@@ -229,7 +229,7 @@ class ContainerImageScanner():
229
229
230
230
def __init__ (
231
231
self , hub , container_image_name , workdir = '/tmp/workdir' ,
232
- grouping = None , base_image = None , dockerfile = None , detect_options = None ):
232
+ grouping = None , base_image = None , dockerfile = None , detect_options = None , skip_group = None ):
233
233
self .hub = hub
234
234
self .hub_detect = Detector (hub )
235
235
self .docker = DockerWrapper (workdir )
@@ -251,6 +251,11 @@ def __init__(
251
251
if detect_options :
252
252
self .extra_options = detect_options .split (" " )
253
253
self .binary = False
254
+ if skip_group :
255
+ self .skip_group = skip_group .split ("," )
256
+ else :
257
+ self .skip_group = []
258
+
254
259
255
260
def prepare_container_image (self ):
256
261
self .docker .initdir ()
@@ -344,7 +349,7 @@ def process_container_image_by_base_image_info(self):
344
349
layer ['name' ] = self .project_name + "_" + self .project_version + "_layer_" + str (num )
345
350
self .layers .append (layer )
346
351
num = num + 1
347
- # print (json.dumps(self.layers, indent=4))
352
+ #print (json.dumps(self.layers, indent=4))
348
353
349
354
def process_oci_container_image_by_user_defined_groups (self ):
350
355
self .manifest = self .docker .read_manifest ()
@@ -373,7 +378,7 @@ def process_oci_container_image_by_user_defined_groups(self):
373
378
layer ['name' ] = self .project_name + "_" + self .project_version + "_layer_" + str (layer ['index' ])
374
379
if not layer .get ('empty_layer' , False ):
375
380
layer ['path' ] = layer_paths .pop (0 )
376
- # print (json.dumps(self.layers, indent=4))
381
+ #print (json.dumps(self.layers, indent=4))
377
382
378
383
def get_group_name (self , groups , index ):
379
384
group_name = 'undefined'
@@ -408,34 +413,39 @@ def process_oci_container_image(self):
408
413
409
414
def submit_layer_scans (self ):
410
415
for layer in self .layers :
411
- if not layer .get ('empty_layer' , False ):
412
- options = []
413
- options .append ('--detect.project.name={}' .format (layer ['project_name' ]))
414
- options .append ('--detect.project.version.name="{}"' .format (layer ['project_version' ]))
415
- options .append ('--detect.code.location.name={}_{}_code_{}' .format (layer ['name' ],self .image_version ,layer ['path' ]))
416
- if self .binary :
417
- options .append ('--detect.tools=BINARY_SCAN' )
418
- options .append ('--detect.binary.scan.file.path={}/{}' .format (self .docker .imagedir , layer ['path' ]))
419
- else :
420
- options .append ('--detect.tools=SIGNATURE_SCAN' )
421
- if self .oci_layout :
422
- options .append ('--detect.source.path={}/{}' .format (self .docker .imagedir , layer ['path' ]))
416
+
417
+ #print(f"layer group name={layer['group_name']} skip_group ={self.skip_group}")
418
+
419
+ if layer ['group_name' ] not in self .skip_group :
420
+
421
+ if not layer .get ('empty_layer' , False ):
422
+ options = []
423
+ options .append ('--detect.project.name={}' .format (layer ['project_name' ]))
424
+ options .append ('--detect.project.version.name="{}"' .format (layer ['project_version' ]))
425
+ options .append ('--detect.code.location.name={}_{}_code_{}' .format (layer ['name' ],self .image_version ,layer ['path' ]))
426
+ if self .binary :
427
+ options .append ('--detect.tools=BINARY_SCAN' )
428
+ options .append ('--detect.binary.scan.file.path={}/{}' .format (self .docker .imagedir , layer ['path' ]))
423
429
else :
424
- options .append ('--detect.source.path={}/{}' .format (self .docker .imagedir , layer ['path' ].split ('/' )[0 ]))
425
- if self .base_image or self .grouping or self .dockerfile :
426
- options .extend (self .adorn_extra_options (layer ))
427
- else :
428
- options .extend (self .extra_options )
429
- logging .debug (f"Submitting scan for { layer ['name' ]} " )
430
- completed = self .hub_detect .detect_run (options )
431
- scan_results = dict ()
432
- for key , value in vars (completed ).items ():
433
- if type (value ) is bytes :
434
- scan_results [key ] = value .decode ('utf-8' )
430
+ options .append ('--detect.tools=SIGNATURE_SCAN' )
431
+ if self .oci_layout :
432
+ options .append ('--detect.source.path={}/{}' .format (self .docker .imagedir , layer ['path' ]))
433
+ else :
434
+ options .append ('--detect.source.path={}/{}' .format (self .docker .imagedir , layer ['path' ].split ('/' )[0 ]))
435
+ if self .base_image or self .grouping or self .dockerfile :
436
+ options .extend (self .adorn_extra_options (layer ))
435
437
else :
436
- scan_results [key ] = value
437
- layer ['scan_results' ] = scan_results
438
- logging .debug (f"Detect run for { layer ['name' ]} completed with returncode { completed .returncode } " )
438
+ options .extend (self .extra_options )
439
+ logging .debug (f"Submitting scan for { layer ['name' ]} " )
440
+ completed = self .hub_detect .detect_run (options )
441
+ scan_results = dict ()
442
+ for key , value in vars (completed ).items ():
443
+ if type (value ) is bytes :
444
+ scan_results [key ] = value .decode ('utf-8' )
445
+ else :
446
+ scan_results [key ] = value
447
+ layer ['scan_results' ] = scan_results
448
+ logging .debug (f"Detect run for { layer ['name' ]} completed with returncode { completed .returncode } " )
439
449
440
450
def adorn_extra_options (self , layer ):
441
451
result = list ()
@@ -486,15 +496,15 @@ def get_base_layers(self):
486
496
487
497
def scan_container_image (
488
498
imagespec , grouping = None , base_image = None , dockerfile = None ,
489
- project_name = None , project_version = None , detect_options = None , hub = None , binary = False ):
499
+ project_name = None , project_version = None , detect_options = None , hub = None , binary = False , skip_group = None ):
490
500
491
501
if hub :
492
502
hub = hub
493
503
else :
494
504
hub = HubInstance ()
495
505
scanner = ContainerImageScanner (
496
506
hub , imagespec , grouping = grouping , base_image = base_image ,
497
- dockerfile = dockerfile , detect_options = detect_options )
507
+ dockerfile = dockerfile , detect_options = detect_options , skip_group = skip_group )
498
508
if project_name :
499
509
scanner .project_name = project_name
500
510
if project_version :
@@ -507,6 +517,7 @@ def scan_container_image(
507
517
if binary :
508
518
scanner .binary = True
509
519
logging .info (f"Scanning image { imagespec } " )
520
+
510
521
scanner .prepare_container_image ()
511
522
scanner .process_container_image ()
512
523
scanner .submit_layer_scans ()
0 commit comments