Skip to content

Commit fc46e36

Browse files
[Utilities] Several smaller improvments for the JSON-Template case (#2381)
1 parent 7ed7e76 commit fc46e36

File tree

1 file changed

+23
-29
lines changed

1 file changed

+23
-29
lines changed

utilities/tools/Set-ModuleReadMe.ps1

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)