@@ -803,7 +803,7 @@ function ConvertTo-FormattedBicep {
803803 [string []] $RequiredParametersList = @ ()
804804 )
805805
806- # Remove 'value' parameter property, if any (e.g. when dealing with a classic parameter file)
806+ # [0/5] Remove 'value' parameter property, if any (e.g. when dealing with a classic parameter file)
807807 $JSONParametersWithoutValue = @ {}
808808 foreach ($parameterName in $JSONParameters.psbase.Keys ) {
809809 $keysOnLevel = $JSONParameters [$parameterName ].Keys
@@ -814,13 +814,13 @@ function ConvertTo-FormattedBicep {
814814 }
815815 }
816816
817- # [1/4 ] Order parameters recursively
817+ # [1/5 ] Order parameters recursively
818818 if ($JSONParametersWithoutValue.Keys.Count -gt 0 ) {
819819 $orderedJSONParameters = Get-OrderedParametersJSON - ParametersJSON ($JSONParametersWithoutValue | ConvertTo-Json - Depth 99 ) - RequiredParametersList $RequiredParametersList
820820 } else {
821821 $orderedJSONParameters = @ {}
822822 }
823- # [2/4 ] Remove any JSON specific formatting
823+ # [2/5 ] Remove any JSON specific formatting
824824 $templateParameterObject = $orderedJSONParameters | ConvertTo-Json - Depth 99
825825 if ($templateParameterObject -ne ' {}' ) {
826826 $contentInBicepFormat = $templateParameterObject -replace " '" , " \'" # Update any [ "field": "[[concat('tags[', parameters('tagName'), ']')]"] to [ "field": "[[concat(\'tags[\', parameters(\'tagName\'), \']\')]"]
@@ -830,16 +830,28 @@ function ConvertTo-FormattedBicep {
830830 $contentInBicepFormat = $contentInBicepFormat -replace " '(.+.getSecret\('.+'\))'" , ' $1' # Update any [xyz: 'xyz.GetSecret()'] to [xyz: xyz.GetSecret()]
831831 $bicepParamsArray = $contentInBicepFormat -split ' \n'
832832 $bicepParamsArray = $bicepParamsArray [1 .. ($bicepParamsArray.count - 2 )]
833+
834+ # [3/5] Format 'getSecret' references
835+ $bicepParamsArray = $bicepParamsArray | ForEach-Object {
836+ if ($_ -match " .+: '(\w+)\.getSecret\(\\'([0-9a-zA-Z-<>]+)\\'\)'" ) {
837+ # e.g. change [pfxCertificate: 'kv1.getSecret(\'<certSecretName>\')'] to [pfxCertificate: kv1.getSecret('<certSecretName>')]
838+ " {0}: {1}.getSecret('{2}')" -f ($_ -split ' :' )[0 ], $matches [1 ], $matches [2 ]
839+ } else {
840+ $_
841+ }
842+ }
843+ } else {
844+ $bicepParamsArray = @ ()
833845 }
834846
835- # [3/4 ] Format params with indent
847+ # [4/5 ] Format params with indent
836848 $bicepParams = ($bicepParamsArray | ForEach-Object { " $_ " } | Out-String ).TrimEnd()
837849
838- # [4/4 ] Add comment where required & optional parameters start
850+ # [5/5 ] Add comment where required & optional parameters start
839851 $splitInputObject = @ {
840852 BicepParams = $bicepParams
841853 RequiredParametersList = $RequiredParametersList
842- AllParametersList = $JSONParametersWithoutValue .Keys
854+ AllParametersList = $JSONParameters .Keys
843855 }
844856 $commentedBicepParams = Add-BicepParameterTypeComment @splitInputObject
845857
@@ -1208,33 +1220,15 @@ function Set-DeploymentExamplesSection {
12081220 }
12091221 }
12101222
1211- # [3/5] Remove the 'value' property from each parameter
1212- # If we're handling a classic ARM-JSON parameter file that includes replacing all 'references' with the link to one of the 'existing' Key Vault resources
1213- if ((ConvertFrom-Json $rawContent - Depth 99 ).' $schema' -like ' *deploymentParameters*' ) {
1214- # If handling a classic parameter file
1215- $JSONParameters = (ConvertFrom-Json $rawContent - Depth 99 - AsHashtable - NoEnumerate).parameters
1216- $JSONParametersWithoutValue = @ {}
1217- foreach ($parameterName in $JSONParameters.psbase.Keys ) {
1218- $keysOnLevel = $JSONParameters [$parameterName ].Keys
1219- if ($keysOnLevel.count -eq 1 -and $keysOnLevel -eq ' value' ) {
1220- $JSONParametersWithoutValue [$parameterName ] = $JSONParameters [$parameterName ][' value' ]
1221- } else {
1222- # replace key vault references
1223- $matchingTuple = $keyVaultReferenceData | Where-Object { $_.parameterName -eq $parameterName }
1224- $JSONParametersWithoutValue [$parameterName ] = " {0}.getSecret('{1}')" -f $matchingTuple.vaultResourceReference , $matchingTuple.secretName
1225- }
1226- }
1227- } else {
1228- # If handling a test deployment file
1229- $JSONParametersWithoutValue = @ {}
1230- foreach ($parameter in $JSONParametersHashTable.Keys ) {
1231- $JSONParametersWithoutValue [$parameter ] = $JSONParametersHashTable .$parameter.value
1232- }
1223+ # [3/5] Replace all 'references' with the link to one of the 'existing' Key Vault resources
1224+ foreach ($parameterName in ($JSONParametersHashTable.Keys | Where-Object { $JSONParametersHashTable [$_ ].Keys -contains ' reference' })) {
1225+ $matchingTuple = $keyVaultReferenceData | Where-Object { $_.parameterName -eq $parameterName }
1226+ $JSONParametersHashTable [$parameterName ] = " {0}.getSecret('{1}')" -f $matchingTuple.vaultResourceReference , $matchingTuple.secretName
12331227 }
12341228
12351229 # [4/5] Convert the JSON parameters to a Bicep parameters block
12361230 $conversionInputObject = @ {
1237- JSONParameters = $JSONParametersWithoutValue
1231+ JSONParameters = $JSONParametersHashTable
12381232 RequiredParametersList = $null -ne $RequiredParametersList ? $RequiredParametersList : @ ()
12391233 }
12401234 $bicepExample = ConvertTo-FormattedBicep @conversionInputObject
0 commit comments