Skip to content

Commit 414f0aa

Browse files
committed
Added an option to pass arbitrary parameters to detect, scnaged detect version to 7.x.x
1 parent f0287b2 commit 414f0aa

File tree

1 file changed

+36
-6
lines changed

1 file changed

+36
-6
lines changed

examples/scan_docker_image_lite.py

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,18 @@
5858
Use Dockerfile to determine base image/layers (can't be used with --grouping or ---base-image)
5959
--project-name Specify project name (default is container image spec)
6060
--project-verson Specify project version (default is container image tag/version)
61-
61+
--detect-options DETECT_OPTIONS
62+
Extra detect options to be passed directlyto the detect
63+
64+
65+
Using --detect-options
66+
67+
It is possible to pass detect options directly to detect command.
68+
For example one wants to specify cloning options directly
69+
70+
python3 scan_container_image_lite.py <imagespec> --detect-options='--detect.clone.project.version.name=version --detect.project.clone.categories=COMPONENT_DATA,VULN_DATA'
71+
72+
There is not validation of extra parameters passed, use with care.
6273
'''
6374

6475
from blackduck.HubRestApi import HubInstance
@@ -153,7 +164,8 @@ def read_config(self):
153164
class Detector():
154165
def __init__(self, hub):
155166
# self.detecturl = 'https://blackducksoftware.github.io/hub-detect/hub-detect.sh'
156-
self.detecturl = 'https://detect.synopsys.com/detect.sh'
167+
# self.detecturl = 'https://detect.synopsys.com/detect.sh'
168+
self.detecturl = 'https://detect.synopsys.com/detect7.sh'
157169
self.baseurl = hub.config['baseurl']
158170
self.filename = '/tmp/hub-detect.sh'
159171
self.token=hub.config['api_token']
@@ -176,7 +188,9 @@ def detect_run(self, options=['--help']):
176188

177189
class ContainerImageScanner():
178190

179-
def __init__(self, hub, container_image_name, workdir='/tmp/workdir', grouping=None, base_image=None, dockerfile=None):
191+
def __init__(
192+
self, hub, container_image_name, workdir='/tmp/workdir',
193+
grouping=None, base_image=None, dockerfile=None, detect_options=None):
180194
self.hub = hub
181195
self.hub_detect = Detector(hub)
182196
self.docker = DockerWrapper(workdir)
@@ -194,6 +208,9 @@ def __init__(self, hub, container_image_name, workdir='/tmp/workdir', grouping=N
194208
self.base_layers = None
195209
self.project_name = self.image_name
196210
self.project_version = self.image_version
211+
self.extra_options = []
212+
if detect_options:
213+
self.extra_options = detect_options.split(" ")
197214
print ("<--{}-->".format(self.grouping))
198215

199216
def prepare_container_image(self):
@@ -286,6 +303,7 @@ def submit_layer_scans(self):
286303
# options.append('--detect.blackduck.signature.scanner.disabled=false')
287304
options.append('--detect.code.location.name={}_{}_code_{}'.format(layer['name'],self.image_version,layer['path']))
288305
options.append('--detect.source.path={}/{}'.format(self.docker.imagedir, layer['path'].split('/')[0]))
306+
options.extend(self.extra_options)
289307
self.hub_detect.detect_run(options)
290308

291309
def get_base_layers(self):
@@ -324,10 +342,14 @@ def get_base_layers(self):
324342
return base_layers
325343

326344

327-
def scan_container_image(imagespec, grouping=None, base_image=None, dockerfile=None, project_name=None, project_version=None):
345+
def scan_container_image(
346+
imagespec, grouping=None, base_image=None, dockerfile=None,
347+
project_name=None, project_version=None, detect_options=None):
328348

329349
hub = HubInstance()
330-
scanner = ContainerImageScanner(hub, imagespec, grouping=grouping, base_image=base_image, dockerfile=dockerfile)
350+
scanner = ContainerImageScanner(
351+
hub, imagespec, grouping=grouping, base_image=base_image,
352+
dockerfile=dockerfile, detect_options=detect_options)
331353
if project_name:
332354
scanner.project_name = project_name
333355
if project_version:
@@ -355,6 +377,7 @@ def main(argv=None):
355377
parser.add_argument('--dockerfile',default=None, type=str, help="Use Dockerfile to determine base image/layers (can't be used with --grouping or ---base-image)")
356378
parser.add_argument('--project-name',default=None, type=str, help="Specify project name (default is container image spec)")
357379
parser.add_argument('--project-version',default=None, type=str, help="Specify project version (default is container image tag/version)")
380+
parser.add_argument('--detect-options',default=None, type=str, help="Extra detect options to be passed directlyto the detect")
358381

359382
args = parser.parse_args()
360383

@@ -372,7 +395,14 @@ def main(argv=None):
372395
parser.print_help(sys.stdout)
373396
sys.exit(1)
374397

375-
scan_container_image(args.imagespec, args.grouping, args.base_image, args.dockerfile, args.project_name, args.project_version)
398+
scan_container_image(
399+
args.imagespec,
400+
args.grouping,
401+
args.base_image,
402+
args.dockerfile,
403+
args.project_name,
404+
args.project_version,
405+
args.detect_options)
376406

377407

378408
if __name__ == "__main__":

0 commit comments

Comments
 (0)