Skip to content

Commit 18024c4

Browse files
committed
Deep license status change
1 parent 985afd5 commit 18024c4

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
'''
2+
Purpose: Deactivates Deep Licenses that were detected by Deep License search
3+
4+
Usage:
5+
deactivate_deep_licenses.py --base-url https://your.blackduck.url] [--token-file token.txt]
6+
7+
required arguments:
8+
--base-url BASE_URL Hub server URL e.g. https://your.blackduck.url
9+
--token-file TOKEN_FILE containing access token
10+
--project PROJECT NAME
11+
--version VERSION NAME
12+
13+
optional arguments:
14+
--match-type list of match types for which DL should be deactivated
15+
16+
'''
17+
18+
from blackduck import Client
19+
import logging
20+
import argparse
21+
import sys
22+
23+
from pprint import pprint
24+
25+
logging.basicConfig(
26+
level=logging.DEBUG,
27+
format="[%(asctime)s] {%(module)s:%(lineno)d} %(levelname)s - %(message)s"
28+
)
29+
30+
def set_active(bd, licenses, status=False):
31+
for license in licenses:
32+
license['active'] = status
33+
headers = {'Content-Type': 'application/vnd.blackducksoftware.internal-1+json'}
34+
url = license['_meta']['href']
35+
dld_url = url[:url.index('deep-license-data')+len('deep-license-data')]
36+
response = bd.session.put(dld_url, headers=headers, json=licenses)
37+
return response
38+
39+
def parse_command_args():
40+
41+
parser = argparse.ArgumentParser("Generate and download reports for projets in a spreadsheet")
42+
parser.add_argument("-u", "--base-url", required=True, help="Hub server URL e.g. https://your.blackduck.url")
43+
parser.add_argument("-t", "--token-file", required=True, help="File containing access token")
44+
parser.add_argument("-p", "--project-name", required=True, help="Project Name")
45+
parser.add_argument("-pv", "--version-name", required=True, help="Project Version Name")
46+
parser.add_argument("-mt", "--match-type", required=False, help="Match Type")
47+
parser.add_argument("-nv", "--no-verify", action='store_false', help="Disable TLS certificate verification")
48+
parser.add_argument("--active", action='store_true', help='Dtatus to set deep license to')
49+
return parser.parse_args()
50+
51+
def main():
52+
args = parse_command_args()
53+
with open(args.token_file, 'r') as tf:
54+
access_token = tf.readline().strip()
55+
global bd
56+
bd = Client(base_url=args.base_url, token=access_token, verify=args.no_verify, timeout=60.0, retries=4)
57+
58+
params = {
59+
'q': [f"name:{args.project_name}"]
60+
}
61+
projects = [p for p in bd.get_resource('projects', params=params) if p['name'] == args.project_name]
62+
assert len(projects) == 1, f"There should be one, and only one project named {args.project_name}. We found {len(projects)}"
63+
project = projects[0]
64+
65+
params = {
66+
'q': [f"versionName:{args.version_name}"]
67+
}
68+
versions = [v for v in bd.get_resource('versions', project, params=params) if v['versionName'] == args.version_name]
69+
assert len(versions) == 1, f"There should be one, and only one version named {args.version_name}. We found {len(versions)}"
70+
version = versions[0]
71+
72+
headers = {'Accept': 'application/vnd.blackducksoftware.internal-1+json'}
73+
components = bd.get_resource('components',version, headers=headers)
74+
for component in components:
75+
pprint(component['matchTypes'])
76+
if not args.match_type:
77+
pass
78+
elif args.match_type not in component['matchTypes']:
79+
continue
80+
try:
81+
deep_licenses = bd.get_resource('deep-license-data-list',component, headers=headers)
82+
set = []
83+
for deep_license in deep_licenses:
84+
set.append(deep_license)
85+
pprint (set_active(bd, set, status = args.active))
86+
except KeyError as err:
87+
pprint (err)
88+
89+
logging.debug(f"Found {project['name']}:{version['versionName']}")
90+
91+
92+
if __name__ == "__main__":
93+
sys.exit(main())

0 commit comments

Comments
 (0)