Skip to content

Commit b872839

Browse files
Update scan_docker_image_lite.py
logic added to skip base layer
1 parent ee8513f commit b872839

File tree

1 file changed

+42
-31
lines changed

1 file changed

+42
-31
lines changed

examples/client/multi-image/scan_docker_image_lite.py

Lines changed: 42 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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

487497
def 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

Comments
 (0)