|
80 | 80 | logging.getLogger("urllib3").setLevel(logging.INFO) |
81 | 81 | logging.getLogger("blackduck").setLevel(logging.INFO) |
82 | 82 |
|
| 83 | +strict = False |
| 84 | + |
83 | 85 | def remove_project_structure(project_name, version_name): |
84 | 86 | project = find_project_by_name(project_name) |
85 | 87 | if not project: |
@@ -109,6 +111,33 @@ def remove_project_structure(project_name, version_name): |
109 | 111 | response = bd.session.delete(project['_meta']['href']) |
110 | 112 | logging.info(f"Operation completed with {response}") |
111 | 113 |
|
| 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 | + |
112 | 141 | def find_or_create_project_group(group_name): |
113 | 142 | url = '/api/project-groups' |
114 | 143 | params = { |
@@ -183,30 +212,60 @@ def create_and_add_child_projects(version, args): |
183 | 212 | if project: |
184 | 213 | version = find_project_version_by_name(project,args.version_name) |
185 | 214 | 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) |
196 | 239 |
|
197 | 240 | def create_project_structure(args): |
198 | 241 | project = find_project_by_name(args.project_name) |
199 | 242 | logging.info(f"Project {args.project_name} located") |
200 | 243 | if project: |
201 | 244 | version = find_project_version_by_name(project,args.version_name) |
202 | 245 | 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) |
210 | 269 |
|
211 | 270 | def scan_container_images(scan_params): |
212 | 271 | from scan_docker_image_lite import scan_container_image |
|
0 commit comments