@@ -333,19 +333,36 @@ def _is_provider_key(key: str) -> bool:
333
333
return (key .startswith ('module.' ) or key .startswith ('__' ) or key in {'start_line' , 'end_line' })
334
334
335
335
336
- def _get_provider (template : dict [str , dict [str , Any ]]) -> dict [str , dict [str , Any ]]:
337
- """Returns the provider dict"""
338
-
339
- provider_map : dict [str , dict [str , Any ]] = {}
336
+ def _get_providers (template : dict [str , dict [str , Any ]]) -> list [dict [str , dict [str , Any ]]]:
337
+ """Returns a list of provider dicts"""
338
+
339
+ # `providers` should be a list of dicts, one dict for each provider:
340
+ # [
341
+ # {
342
+ # "aws": {
343
+ # "region": ["us-east-1"],
344
+ # . . .
345
+ # }
346
+ # },
347
+ # {
348
+ # "aws.west": {
349
+ # "region": ["us-west-1"],
350
+ # "alias": ["west"],
351
+ # . . .
352
+ # }
353
+ # }
354
+ # ]
355
+ providers : list [dict [str , dict [str , Any ]]] = []
340
356
provider_config = template .get ("configuration" , {}).get ("provider_config" )
341
357
342
358
if provider_config and isinstance (provider_config , dict ):
343
359
for provider_key , provider_data in provider_config .items ():
344
360
if _is_provider_key (key = provider_key ):
345
361
# Not a provider, skip
346
362
continue
347
- provider_map [provider_key ] = {}
348
363
provider_alias = provider_data .get ("alias" , "default" )
364
+ provider_map : dict [str , dict [str , Any ]] = {}
365
+ provider_map [provider_key ] = {}
349
366
provider_map_entry = provider_map [provider_key ]
350
367
for field , value in provider_data .get ('expressions' , {}).items ():
351
368
if field in LINE_FIELD_NAMES or not isinstance (value , dict ):
@@ -360,9 +377,14 @@ def _get_provider(template: dict[str, dict[str, Any]]) -> dict[str, dict[str, An
360
377
provider_map_entry [start_line ] = [provider_data .get (START_LINE , 1 ) - 1 ]
361
378
provider_map_entry [end_line ] = [provider_data .get (END_LINE , 1 )]
362
379
provider_map_entry ['alias' ] = [provider_alias ]
363
- provider_map_entry [TF_PLAN_RESOURCE_ADDRESS ] = f"{ provider_key } .{ provider_alias } "
380
+ # provider_key already contains the alias (ie "aws.east") for non-default providers
381
+ if provider_alias == "default" :
382
+ provider_map_entry [TF_PLAN_RESOURCE_ADDRESS ] = f"{ provider_key } .{ provider_alias } "
383
+ else :
384
+ provider_map_entry [TF_PLAN_RESOURCE_ADDRESS ] = provider_key
385
+ providers .append (provider_map )
364
386
365
- return provider_map
387
+ return providers
366
388
367
389
368
390
def _get_resource_changes (template : dict [str , Any ]) -> dict [str , dict [str , Any ]]:
@@ -421,9 +443,7 @@ def parse_tf_plan(tf_plan_file: str, out_parsing_errors: Dict[str, str]) -> Tupl
421
443
if not template :
422
444
return None , None
423
445
424
- provider = _get_provider (template = template )
425
- if bool (provider ):
426
- tf_definition ["provider" ].append (provider )
446
+ tf_definition ["provider" ] = _get_providers (template = template )
427
447
428
448
resource_changes = _get_resource_changes (template = template )
429
449
0 commit comments