@@ -177,7 +177,7 @@ def process_container_image(self):
177
177
self .manifest = self .docker .read_manifest ()
178
178
print (self .manifest )
179
179
self .config = self .docker .read_config ()
180
- print (self .config )
180
+ print (json . dumps ( self .config , indent = 4 ) )
181
181
182
182
self .layers = []
183
183
num = 1
@@ -189,6 +189,7 @@ def process_container_image(self):
189
189
while self .config ['history' ][num + offset - 1 ].get ('empty_layer' , False ):
190
190
offset = offset + 1
191
191
layer ['command' ] = self .config ['history' ][num + offset - 1 ]
192
+ layer ['shaid' ] = self .config ['rootfs' ]['diff_ids' ][num - 1 ]
192
193
self .layers .append (layer )
193
194
num = num + 1
194
195
print (json .dumps (self .layers , indent = 4 ))
@@ -209,7 +210,7 @@ def generate_project_structures(self, base_layers=None):
209
210
addon = []
210
211
211
212
for layer in self .layers :
212
- if layer ['path ' ] in base_layers :
213
+ if layer ['shaid ' ] in base_layers :
213
214
base .append (layer )
214
215
else :
215
216
addon .append (layer )
@@ -252,7 +253,7 @@ def submit_layer_scans(self):
252
253
options = []
253
254
options .append ('--detect.project.name={}' .format (layer ['name' ]))
254
255
options .append ('--detect.project.version.name="{}"' .format (self .image_version ))
255
- options .append ('--detect.blackduck.signature.scanner.disabled=false' )
256
+ # options.append('--detect.blackduck.signature.scanner.disabled=false')
256
257
options .append ('--detect.code.location.name={}_{}_code_{}' .format (layer ['name' ],self .image_version ,layer ['path' ]))
257
258
options .append ('--detect.source.path={}/{}' .format (self .docker .imagedir , layer ['path' ].split ('/' )[0 ]))
258
259
self .hub_detect .detect_run (options )
@@ -262,15 +263,18 @@ def submit_single_layer_scan(self, layer_number):
262
263
options = []
263
264
options .append ('--detect.project.name={}' .format (layer ['name' ]))
264
265
options .append ('--detect.project.version.name="{}"' .format (self .image_version ))
265
- options .append ('--detect.blackduck.signature.scanner.disabled=false' )
266
+ # options.append('--detect.blackduck.signature.scanner.disabled=false')
266
267
options .append ('--detect.code.location.name={}_{}_code_{}' .format (layer ['name' ],self .image_version ,layer ['path' ]))
267
268
options .append ('--detect.source.path={}/{}' .format (self .docker .imagedir , layer ['path' ].split ('/' )[0 ]))
268
269
self .hub_detect .detect_run (options )
269
270
270
271
def cleanup_project_structure (self ):
271
272
release = self .hub .get_or_create_project_version (self .image_name ,self .image_version )
272
- base_release = self .hub .get_or_create_project_version (self .image_name ,self .image_version + "__base_layers" )
273
- addon_release = self .hub .get_or_create_project_version (self .image_name ,self .image_version + "_addon_layers" )
273
+ base_release = self .hub .get_project_version_by_name (self .image_name ,self .image_version + "__base_layers" )
274
+ addon_release = self .hub .get_project_version_by_name (self .image_name ,self .image_version + "_addon_layers" )
275
+
276
+ print ("--------" )
277
+ print (base_release )
274
278
275
279
components = self .hub .get_version_components (release )
276
280
@@ -281,10 +285,28 @@ def cleanup_project_structure(self):
281
285
sub_version_name = item ['componentVersionName' ]
282
286
sub_release = self .hub .get_or_create_project_version (sub_name , sub_version_name )
283
287
print (self .hub .remove_version_as_component (release , sub_release ))
284
- print (self .hub .remove_version_as_component (base_release , sub_release ))
285
- print (self .hub .remove_version_as_component (addon_release , sub_release ))
286
- print (self .hub .delete_project_by_name (sub_name ))
287
- print (self .hub .delete_project_by_name (self .image_name ))
288
+ if base_release :
289
+ print (self .hub .remove_version_as_component (base_release , sub_release ))
290
+ if addon_release :
291
+ print (self .hub .remove_version_as_component (addon_release , sub_release ))
292
+
293
+ project = self .hub .get_project_by_name (sub_name )
294
+ versions = self .hub .get_project_versions (project )
295
+ if versions ['totalCount' ] == 1 :
296
+ print (self .hub .delete_project_by_name (sub_name ))
297
+ else :
298
+ print (self .hub .delete_project_version_by_name (sub_name , sub_version_name ))
299
+
300
+ if base_release :
301
+ print (self .hub .delete_project_version_by_name (self .image_name ,self .image_version + "__base_layers" ))
302
+ if addon_release :
303
+ print (self .hub .delete_project_version_by_name (self .image_name ,self .image_version + "_addon_layers" ))
304
+ project = self .hub .get_project_by_name (self .image_name )
305
+ versions = self .hub .get_project_versions (project )
306
+ if versions ['totalCount' ] == 1 :
307
+ print (self .hub .delete_project_by_name (self .image_name ))
308
+ else :
309
+ print (self .hub .delete_project_version_by_name (self .image_name ,self .image_version ))
288
310
289
311
def get_base_layers (self ):
290
312
if (not self .dockerfile )and (not self .base_image ):
@@ -316,7 +338,9 @@ def get_base_layers(self):
316
338
self .docker .unravel_container ()
317
339
manifest = self .docker .read_manifest ()
318
340
print (manifest )
319
- base_layers .extend (manifest [0 ]['Layers' ])
341
+ config = self .docker .read_config ()
342
+ print (config )
343
+ base_layers .extend (config ['rootfs' ]['diff_ids' ])
320
344
return base_layers
321
345
322
346
@@ -337,7 +361,8 @@ def scan_container_image_with_dockerfile(imagespec, dockerfile, base_image, omit
337
361
hub = HubInstance ()
338
362
scanner = ContainerImageScanner (hub , imagespec , dockerfile = dockerfile , base_image = base_image , omit_base_layers = omit_base_layers )
339
363
base_layers = scanner .get_base_layers ()
340
- print (base_layers )
364
+ print (json .dumps (base_layers , indent = 2 ))
365
+ # sys.exit()
341
366
scanner .prepare_container_image ()
342
367
scanner .process_container_image ()
343
368
scanner .generate_project_structures (base_layers )
0 commit comments