Skip to content

Commit 7ee264e

Browse files
committed
fixed re-scan functionality
1 parent 2c3a694 commit 7ee264e

File tree

1 file changed

+76
-17
lines changed

1 file changed

+76
-17
lines changed

examples/client/multi-image/manage_project_structure.py

Lines changed: 76 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@
8080
logging.getLogger("urllib3").setLevel(logging.INFO)
8181
logging.getLogger("blackduck").setLevel(logging.INFO)
8282

83+
strict = False
84+
8385
def remove_project_structure(project_name, version_name):
8486
project = find_project_by_name(project_name)
8587
if not project:
@@ -109,6 +111,33 @@ def remove_project_structure(project_name, version_name):
109111
response = bd.session.delete(project['_meta']['href'])
110112
logging.info(f"Operation completed with {response}")
111113

114+
def remove_codelocations_recursively(version):
115+
components = bd.get_resource('components', version)
116+
subprojects = [x for x in components if x['componentType'] == 'SUB_PROJECT']
117+
logging.info(f"Found {len(subprojects)} subprojects")
118+
unmap_all_codelocations(version)
119+
for subproject in subprojects:
120+
subproject_name = subproject['componentName']
121+
subproject_version_name = subproject['componentVersionName']
122+
project = find_project_by_name(subproject_name)
123+
if not project:
124+
logging.info(f"Project {subproject_name} does not exist.")
125+
return
126+
subproject_version = find_project_version_by_name(project, subproject_version_name)
127+
if not subproject_version:
128+
logging.info(f"Project {subproject_name} with version {subversion_name} does not exist.")
129+
return
130+
remove_codelocations_recursively(subproject_version)
131+
132+
def unmap_all_codelocations(version):
133+
codelocations = bd.get_resource('codelocations',version)
134+
for codelocation in codelocations:
135+
logging.info(f"Unmapping codelocation {codelocation['name']}")
136+
codelocation['mappedProjectVersion'] = ""
137+
response = bd.session.put(codelocation['_meta']['href'], json=codelocation)
138+
pprint (response)
139+
140+
112141
def find_or_create_project_group(group_name):
113142
url = '/api/project-groups'
114143
params = {
@@ -183,30 +212,60 @@ def create_and_add_child_projects(version, args):
183212
if project:
184213
version = find_project_version_by_name(project,args.version_name)
185214
if version:
186-
logging.error(f"Child project {project['name']} with version {args.version_name} exists.")
187-
return
188-
response = create_project_version(child,args.version_name, args, nickname=container_spec)
189-
logging.info(f"Creating project {child} : {args.version_name} completed with {response}")
190-
if response.ok:
191-
child_version = find_project_version_by_name(find_project_by_name(child),args.version_name)
192-
child_version_url = child_version['_meta']['href']
193-
response = bd.session.post(version_url,json={'component': child_version_url})
194-
logging.info(f"Adding {child} : {args.version_name} to parent project completed with {response}")
195-
scan_params.append(scan_param)
215+
if strict:
216+
logging.error(f"Child project {project['name']} with version {args.version_name} exists.")
217+
sys.exit(1)
218+
else:
219+
logging.info(f"Child project {project['name']} with version {args.version_name} found.")
220+
logging.info(f"Recursively removing codelocations for {project['name']} with version {args.version_name} ")
221+
remove_codelocations_recursively(version)
222+
else:
223+
response = create_project_version(child,args.version_name, args, nickname=container_spec)
224+
logging.info(f"Creating project {child} : {args.version_name} completed with {response}")
225+
if response.ok:
226+
child_version = find_project_version_by_name(find_project_by_name(child),args.version_name)
227+
child_version_url = child_version['_meta']['href']
228+
response = bd.session.post(version_url,json={'component': child_version_url})
229+
logging.info(f"Adding {child} : {args.version_name} to parent project completed with {response}")
230+
else:
231+
response = create_project_version(child,args.version_name, args, nickname=container_spec)
232+
logging.info(f"Creating project {child} : {args.version_name} completed with {response}")
233+
if response.ok:
234+
child_version = find_project_version_by_name(find_project_by_name(child),args.version_name)
235+
child_version_url = child_version['_meta']['href']
236+
response = bd.session.post(version_url,json={'component': child_version_url})
237+
logging.info(f"Adding {child} : {args.version_name} to parent project completed with {response}")
238+
scan_params.append(scan_param)
196239

197240
def create_project_structure(args):
198241
project = find_project_by_name(args.project_name)
199242
logging.info(f"Project {args.project_name} located")
200243
if project:
201244
version = find_project_version_by_name(project,args.version_name)
202245
if version:
203-
logging.error(f"Project {project['name']} with version {args.version_name} exists.")
204-
sys.exit(1)
205-
response = create_project_version(args.project_name,args.version_name,args)
206-
if response.ok:
207-
version = find_project_version_by_name(find_project_by_name(args.project_name),args.version_name)
208-
logging.info(f"Project {args.project_name} : {args.version_name} created")
209-
create_and_add_child_projects(version, args)
246+
if strict:
247+
logging.error(f"Project {project['name']} with version {args.version_name} exists.")
248+
sys.exit(1)
249+
else:
250+
logging.info(f"Found Project {project['name']} with version {args.version_name}.")
251+
else:
252+
response = create_project_version(args.project_name,args.version_name,args)
253+
if response.ok:
254+
version = find_project_version_by_name(find_project_by_name(args.project_name),args.version_name)
255+
logging.info(f"Project {args.project_name} : {args.version_name} created")
256+
else:
257+
logging.info(f"Failed to create Project {args.project_name} : {args.version_name} created")
258+
sys.exit(1)
259+
else:
260+
response = create_project_version(args.project_name,args.version_name,args)
261+
if response.ok:
262+
version = find_project_version_by_name(find_project_by_name(args.project_name),args.version_name)
263+
logging.info(f"Project {args.project_name} : {args.version_name} created")
264+
else:
265+
logging.info(f"Failed to create Project {args.project_name} : {args.version_name} created")
266+
sys.exit(1)
267+
logging.info(f"Checking/Adding subprojects to {args.project_name} : {version['versionName']}")
268+
create_and_add_child_projects(version, args)
210269

211270
def scan_container_images(scan_params):
212271
from scan_docker_image_lite import scan_container_image

0 commit comments

Comments
 (0)