58
58
Use Dockerfile to determine base image/layers (can't be used with --grouping or ---base-image)
59
59
--project-name Specify project name (default is container image spec)
60
60
--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.
62
73
'''
63
74
64
75
from blackduck .HubRestApi import HubInstance
@@ -153,7 +164,8 @@ def read_config(self):
153
164
class Detector ():
154
165
def __init__ (self , hub ):
155
166
# 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'
157
169
self .baseurl = hub .config ['baseurl' ]
158
170
self .filename = '/tmp/hub-detect.sh'
159
171
self .token = hub .config ['api_token' ]
@@ -176,7 +188,9 @@ def detect_run(self, options=['--help']):
176
188
177
189
class ContainerImageScanner ():
178
190
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 ):
180
194
self .hub = hub
181
195
self .hub_detect = Detector (hub )
182
196
self .docker = DockerWrapper (workdir )
@@ -194,6 +208,9 @@ def __init__(self, hub, container_image_name, workdir='/tmp/workdir', grouping=N
194
208
self .base_layers = None
195
209
self .project_name = self .image_name
196
210
self .project_version = self .image_version
211
+ self .extra_options = []
212
+ if detect_options :
213
+ self .extra_options = detect_options .split (" " )
197
214
print ("<--{}-->" .format (self .grouping ))
198
215
199
216
def prepare_container_image (self ):
@@ -286,6 +303,7 @@ def submit_layer_scans(self):
286
303
# options.append('--detect.blackduck.signature.scanner.disabled=false')
287
304
options .append ('--detect.code.location.name={}_{}_code_{}' .format (layer ['name' ],self .image_version ,layer ['path' ]))
288
305
options .append ('--detect.source.path={}/{}' .format (self .docker .imagedir , layer ['path' ].split ('/' )[0 ]))
306
+ options .extend (self .extra_options )
289
307
self .hub_detect .detect_run (options )
290
308
291
309
def get_base_layers (self ):
@@ -324,10 +342,14 @@ def get_base_layers(self):
324
342
return base_layers
325
343
326
344
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 ):
328
348
329
349
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 )
331
353
if project_name :
332
354
scanner .project_name = project_name
333
355
if project_version :
@@ -355,6 +377,7 @@ def main(argv=None):
355
377
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)" )
356
378
parser .add_argument ('--project-name' ,default = None , type = str , help = "Specify project name (default is container image spec)" )
357
379
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" )
358
381
359
382
args = parser .parse_args ()
360
383
@@ -372,7 +395,14 @@ def main(argv=None):
372
395
parser .print_help (sys .stdout )
373
396
sys .exit (1 )
374
397
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 )
376
406
377
407
378
408
if __name__ == "__main__" :
0 commit comments