@@ -229,7 +229,7 @@ class ContainerImageScanner():
229229
230230 def __init__ (
231231 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 ):
233233 self .hub = hub
234234 self .hub_detect = Detector (hub )
235235 self .docker = DockerWrapper (workdir )
@@ -251,6 +251,11 @@ def __init__(
251251 if detect_options :
252252 self .extra_options = detect_options .split (" " )
253253 self .binary = False
254+ if skip_group :
255+ self .skip_group = skip_group .split ("," )
256+ else :
257+ self .skip_group = []
258+
254259
255260 def prepare_container_image (self ):
256261 self .docker .initdir ()
@@ -344,7 +349,7 @@ def process_container_image_by_base_image_info(self):
344349 layer ['name' ] = self .project_name + "_" + self .project_version + "_layer_" + str (num )
345350 self .layers .append (layer )
346351 num = num + 1
347- # print (json.dumps(self.layers, indent=4))
352+ #print (json.dumps(self.layers, indent=4))
348353
349354 def process_oci_container_image_by_user_defined_groups (self ):
350355 self .manifest = self .docker .read_manifest ()
@@ -373,7 +378,7 @@ def process_oci_container_image_by_user_defined_groups(self):
373378 layer ['name' ] = self .project_name + "_" + self .project_version + "_layer_" + str (layer ['index' ])
374379 if not layer .get ('empty_layer' , False ):
375380 layer ['path' ] = layer_paths .pop (0 )
376- # print (json.dumps(self.layers, indent=4))
381+ #print (json.dumps(self.layers, indent=4))
377382
378383 def get_group_name (self , groups , index ):
379384 group_name = 'undefined'
@@ -408,34 +413,39 @@ def process_oci_container_image(self):
408413
409414 def submit_layer_scans (self ):
410415 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' ]))
423429 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 ))
435437 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 } " )
439449
440450 def adorn_extra_options (self , layer ):
441451 result = list ()
@@ -486,15 +496,15 @@ def get_base_layers(self):
486496
487497def scan_container_image (
488498 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 ):
490500
491501 if hub :
492502 hub = hub
493503 else :
494504 hub = HubInstance ()
495505 scanner = ContainerImageScanner (
496506 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 )
498508 if project_name :
499509 scanner .project_name = project_name
500510 if project_version :
@@ -507,6 +517,7 @@ def scan_container_image(
507517 if binary :
508518 scanner .binary = True
509519 logging .info (f"Scanning image { imagespec } " )
520+
510521 scanner .prepare_container_image ()
511522 scanner .process_container_image ()
512523 scanner .submit_layer_scans ()
0 commit comments