31
31
optional arguments:
32
32
-h, --help show this help message and exit
33
33
--cleanup CLEANUP Delete project hierarchy only. Do not scan
34
+
35
+ --rescan-layer NUM Rescans specific layer. No project structure cleanup will be performed
34
36
35
37
'''
36
38
@@ -120,7 +122,8 @@ def read_config(self):
120
122
121
123
class Detector ():
122
124
def __init__ (self , hub ):
123
- self .detecturl = 'https://blackducksoftware.github.io/hub-detect/hub-detect.sh'
125
+ # self.detecturl = 'https://blackducksoftware.github.io/hub-detect/hub-detect.sh'
126
+ self .detecturl = 'https://detect.synopsys.com/detect.sh'
124
127
self .baseurl = hub .config ['baseurl' ]
125
128
self .filename = '/tmp/hub-detect.sh'
126
129
self .token = hub .config ['api_token' ]
@@ -190,6 +193,15 @@ def generate_project_structures(self):
190
193
sub_project_release = self .hub .get_or_create_project_version (layer ['name' ], self .image_version , parameters = parameters )
191
194
self .hub .add_version_as_component (main_project_release , sub_project_release )
192
195
196
+ def generate_single_layer_project_structure (self , layer_number ):
197
+ main_project_release = self .hub .get_or_create_project_version (self .image_name , self .image_version )
198
+
199
+ layer = self .layers [layer_number - 1 ]
200
+ parameters = {}
201
+ parameters ['description' ] = layer ['command' ]['created_by' ]
202
+ sub_project_release = self .hub .get_or_create_project_version (layer ['name' ], self .image_version , parameters = parameters )
203
+ self .hub .add_version_as_component (main_project_release , sub_project_release )
204
+
193
205
def submit_layer_scans (self ):
194
206
for layer in self .layers :
195
207
options = []
@@ -200,6 +212,16 @@ def submit_layer_scans(self):
200
212
options .append ('--detect.source.path={}/{}' .format (self .docker .imagedir , layer ['path' ].split ('/' )[0 ]))
201
213
self .hub_detect .detect_run (options )
202
214
215
+ def submit_single_layer_scan (self , layer_number ):
216
+ layer = self .layers [layer_number - 1 ]
217
+ options = []
218
+ options .append ('--detect.project.name={}' .format (layer ['name' ]))
219
+ options .append ('--detect.project.version.name="{}"' .format (self .image_version ))
220
+ options .append ('--detect.blackduck.signature.scanner.disabled=false' )
221
+ options .append ('--detect.code.location.name={}_{}_code_{}' .format (layer ['name' ],self .image_version ,layer ['path' ]))
222
+ options .append ('--detect.source.path={}/{}' .format (self .docker .imagedir , layer ['path' ].split ('/' )[0 ]))
223
+ self .hub_detect .detect_run (options )
224
+
203
225
def cleanup_project_structure (self ):
204
226
release = self .hub .get_or_create_project_version (self .image_name ,self .image_version )
205
227
@@ -216,14 +238,18 @@ def cleanup_project_structure(self):
216
238
print (self .hub .delete_project_by_name (self .image_name ))
217
239
218
240
219
- def scan_container_image (imagespec ):
241
+ def scan_container_image (imagespec , layer_number = 0 ):
220
242
221
243
hub = HubInstance ()
222
244
scanner = ContainerImageScanner (hub , imagespec )
223
245
scanner .prepare_container_image ()
224
246
scanner .process_container_image ()
225
- scanner .generate_project_structures ()
226
- scanner .submit_layer_scans ()
247
+ if layer_number == 0 :
248
+ scanner .generate_project_structures ()
249
+ scanner .submit_layer_scans ()
250
+ else :
251
+ scanner .generate_single_layer_project_structure (layer_number )
252
+ scanner .submit_single_layer_scan (int (layer_number ))
227
253
228
254
229
255
def clean_container_project (imagespec ):
@@ -241,15 +267,22 @@ def main(argv=None):
241
267
242
268
parser = ArgumentParser ()
243
269
parser .add_argument ('imagespec' , help = "Container image tag, e.g. repository/imagename:version" )
244
- parser .add_argument ('--cleanup' ,default = False , help = "Delete project hierarchy only. Do not scan" )
270
+ parser .add_argument ('--cleanup' , default = False , help = "Delete project hierarchy only. Do not scan" )
271
+ parser .add_argument ('--rescan-layer' ,default = 0 , type = int , help = "Rescan specific layer in case of failure, 0 - scan as usual" )
245
272
args = parser .parse_args ()
246
273
274
+ print (args );
275
+
247
276
hub = HubInstance ()
248
277
249
- clean_container_project (args .imagespec )
250
- if not args .cleanup :
251
- scan_container_image (args .imagespec )
252
-
278
+ if args .cleanup :
279
+ clean_container_project (args .imagespec )
280
+ else :
281
+ if args .rescan_layer == 0 :
282
+ clean_container_project (args .imagespec )
283
+ scan_container_image (args .imagespec )
284
+ else :
285
+ scan_container_image (args .imagespec , args .rescan_layer )
253
286
254
287
if __name__ == "__main__" :
255
288
sys .exit (main ())
0 commit comments