@@ -151,15 +151,15 @@ def _format_resource_changes_and_deletion_summary(self) -> bool:
151151 0 if x .id else 1 , # sort Azure resources before extension resources
152152 DeploymentStacksWhatIfResultFormatter .CHANGE_CERTAINTY_PRIORITIES .get (
153153 x .change_certainty , 1 ) if x .id else 0 , # Azure resources: then by certainty
154- x .id if x .id else "" , # Azure resources: then by ID
155- x .extension .name if x .extension else "" ,
154+ x .id .lower () if x .id else "" , # Azure resources: then by ID
156155 # Extension resources: then by (ext name, ext version, config id)
156+ x .extension .name if x .extension else "" ,
157157 x .extension .version if x .extension else "" ,
158158 (x .extension .config_id if x .extension else "" ) or "" ,
159159 DeploymentStacksWhatIfResultFormatter .CHANGE_CERTAINTY_PRIORITIES .get (
160160 x .change_certainty , 1 ) if not x .id else 0 , # Extension resources: then by certainty
161161 x .type if x .extension else "" , # Extension resources: then by type
162- json . dumps (x .identifiers ) if x .extension else "" # Extension resources: then by identifiers
162+ self . _format_ext_resource_identifiers (x .identifiers ) if x .identifiers else "" # Extension resources: then by identifiers
163163 ))
164164
165165 if self ._format_resource_changes (resource_changes_sorted ):
@@ -275,7 +275,8 @@ def _format_resource_heading_line(self, resource_change: StackModels.DeploymentS
275275 self .builder .append ("[Potential] " , Color .CYAN )
276276
277277 api_version_suffix = f" [{ resource_change .api_version } ]" if resource_change .api_version else ""
278- resource_id = resource_change .id if resource_change .id else f"{ resource_change .type } { json .dumps (resource_change .identifiers )} "
278+ resource_id = resource_change .id if resource_change .id else \
279+ f"{ resource_change .type } { self ._format_ext_resource_identifiers (resource_change .identifiers )} "
279280 self .builder .append_line (f"{ resource_id } { api_version_suffix } " , color )
280281
281282 def _format_resource_property_changes (
@@ -508,14 +509,34 @@ def _format_resource_class_header(change: StackModels.DeploymentStacksWhatIfReso
508509 result = f"{ change .extension .name } @{ change .extension .version } "
509510
510511 if change .extension .config :
512+ # Print the config. Eventually this can be substituted with an optional user-provided "comparison ID"
513+ # for brevity.
511514 config_items = sorted (
512515 change .extension .config .items (),
513- key = lambda ci : ci [0 ] )
516+ key = lambda ci : (( ci [1 ] or {}). get ( 'keyVaultReference' , None ) is not None , ci [ 0 ]) )
514517
515518 if len (config_items ) > 0 :
516- for prop , item in change .extension .config .items ():
517- result += f" { prop } ={ item } \n "
519+ config_parts = []
520+
521+ for prop , item in config_items :
522+ if not item :
523+ continue
524+
525+ if item .get ('keyVaultReference' , None ):
526+ secret_name = item ['keyVaultReference' ].get ('secretName' , None )
527+ secret_version = item ['keyVaultReference' ].get ('secretVersion' , None )
528+ kv_id = item ['keyVaultReference' ].get ('keyVault' , {}).get ('id' , None )
529+ version_suffix = f"@{ secret_version } " if secret_version else ""
530+ config_parts .append (f"{ prop } =<Secret '{ secret_name } '{ version_suffix } in key vault '{ kv_id } '>" )
531+ else :
532+ config_parts .append (f"{ prop } ={ json .dumps (item .get ('value' , None ))} " )
518533
519- result = result . rstrip ( " \n " )
534+ result += f" { ', ' . join ( config_parts ) } "
520535
521536 return result
537+
538+ @staticmethod
539+ def _format_ext_resource_identifiers (identifiers : dict [str , t .Any ]) -> str :
540+ sorted_items = sorted (identifiers .items (), key = lambda x : x [0 ])
541+
542+ return ", " .join (f"{ key } ={ json .dumps (value )} " for key , value in sorted_items )
0 commit comments