@@ -42,7 +42,14 @@ def _master_account_type(val: str, pattern: str = r'[0-9]{12}'):
4242 raise argparse .ArgumentTypeError
4343 return val
4444
45- # Setup command line arguments
45+ class ParseCommaSeparatedKeyValuePairsAction (argparse .Action ):
46+ def __call__ (self , parser , namespace , values , option_string = None ):
47+ setattr (namespace , self .dest , dict ())
48+ for kv_pairs in values .split ("," ):
49+ key , value = kv_pairs .split ('=' , 1 )
50+ getattr (namespace , self .dest )[key ] = value
51+
52+ # Setup command line arguments
4653 parser = argparse .ArgumentParser (description = ('Link AWS Accounts to central '
4754 'Detective Account.' ))
4855 parser .add_argument ('--master_account' , type = _master_account_type ,
@@ -57,6 +64,9 @@ def _master_account_type(val: str, pattern: str = r'[0-9]{12}'):
5764 parser .add_argument ('--enabled_regions' , type = str ,
5865 help = ('Regions to enable Detective. If not specified, '
5966 'all available regions enabled.' ))
67+ parser .add_argument ('--tags' ,
68+ action = ParseCommaSeparatedKeyValuePairsAction ,
69+ help = "Tags to be added to any newly enabled Detective graphs." )
6070 return parser .parse_args (args )
6171
6272
@@ -286,15 +296,15 @@ def accept_invitations(role: str, accounts: typing.Set[str], graph: str, region:
286296 except Exception as e :
287297 logging .exception (f'error accepting invitation { e .args } ' )
288298
289- def enable_detective (d_client : botocore .client .BaseClient , region : str ):
299+ def enable_detective (d_client : botocore .client .BaseClient , region : str , tags : dict = None ):
290300 graphs = get_graphs (d_client )
291301
292302 if not graphs :
293303 confirm = input ('Should Amazon Detective be enabled in {}? Enter [Y/N]: ' .format (region ))
294304
295305 if confirm == 'Y' or confirm == 'y' :
296- logging .info (f'Enabling Amazon Detective in { region } ' )
297- graphs = [d_client .create_graph ()['GraphArn' ]]
306+ logging .info (f'Enabling Amazon Detective in { region } ' + ( f'with tags { tags } ' if tags else '' ) )
307+ graphs = [d_client .create_graph (Tags = tags )['GraphArn' ]]
298308 else :
299309 logging .info (f'Skipping { region } ' )
300310 return None
@@ -326,7 +336,7 @@ def enable_detective(d_client: botocore.client.BaseClient, region: str):
326336 for region in detective_regions :
327337 try :
328338 d_client = master_session .client ('detective' , region_name = region )
329- graphs = enable_detective (d_client , region )
339+ graphs = enable_detective (d_client , region , args . tags )
330340
331341 if graphs is None :
332342 continue
0 commit comments