@@ -803,7 +803,7 @@ function ConvertTo-FormattedBicep {
803
803
[string []] $RequiredParametersList = @ ()
804
804
)
805
805
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)
807
807
$JSONParametersWithoutValue = @ {}
808
808
foreach ($parameterName in $JSONParameters.psbase.Keys ) {
809
809
$keysOnLevel = $JSONParameters [$parameterName ].Keys
@@ -814,13 +814,13 @@ function ConvertTo-FormattedBicep {
814
814
}
815
815
}
816
816
817
- # [1/4 ] Order parameters recursively
817
+ # [1/5 ] Order parameters recursively
818
818
if ($JSONParametersWithoutValue.Keys.Count -gt 0 ) {
819
819
$orderedJSONParameters = Get-OrderedParametersJSON - ParametersJSON ($JSONParametersWithoutValue | ConvertTo-Json - Depth 99 ) - RequiredParametersList $RequiredParametersList
820
820
} else {
821
821
$orderedJSONParameters = @ {}
822
822
}
823
- # [2/4 ] Remove any JSON specific formatting
823
+ # [2/5 ] Remove any JSON specific formatting
824
824
$templateParameterObject = $orderedJSONParameters | ConvertTo-Json - Depth 99
825
825
if ($templateParameterObject -ne ' {}' ) {
826
826
$contentInBicepFormat = $templateParameterObject -replace " '" , " \'" # Update any [ "field": "[[concat('tags[', parameters('tagName'), ']')]"] to [ "field": "[[concat(\'tags[\', parameters(\'tagName\'), \']\')]"]
@@ -830,16 +830,28 @@ function ConvertTo-FormattedBicep {
830
830
$contentInBicepFormat = $contentInBicepFormat -replace " '(.+.getSecret\('.+'\))'" , ' $1' # Update any [xyz: 'xyz.GetSecret()'] to [xyz: xyz.GetSecret()]
831
831
$bicepParamsArray = $contentInBicepFormat -split ' \n'
832
832
$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 = @ ()
833
845
}
834
846
835
- # [3/4 ] Format params with indent
847
+ # [4/5 ] Format params with indent
836
848
$bicepParams = ($bicepParamsArray | ForEach-Object { " $_ " } | Out-String ).TrimEnd()
837
849
838
- # [4/4 ] Add comment where required & optional parameters start
850
+ # [5/5 ] Add comment where required & optional parameters start
839
851
$splitInputObject = @ {
840
852
BicepParams = $bicepParams
841
853
RequiredParametersList = $RequiredParametersList
842
- AllParametersList = $JSONParametersWithoutValue .Keys
854
+ AllParametersList = $JSONParameters .Keys
843
855
}
844
856
$commentedBicepParams = Add-BicepParameterTypeComment @splitInputObject
845
857
@@ -1208,33 +1220,15 @@ function Set-DeploymentExamplesSection {
1208
1220
}
1209
1221
}
1210
1222
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
1233
1227
}
1234
1228
1235
1229
# [4/5] Convert the JSON parameters to a Bicep parameters block
1236
1230
$conversionInputObject = @ {
1237
- JSONParameters = $JSONParametersWithoutValue
1231
+ JSONParameters = $JSONParametersHashTable
1238
1232
RequiredParametersList = $null -ne $RequiredParametersList ? $RequiredParametersList : @ ()
1239
1233
}
1240
1234
$bicepExample = ConvertTo-FormattedBicep @conversionInputObject
0 commit comments