Попытка сделать if/else powershell для шаблона ARM
У меня есть сценарий PowerShell для шаблона ARM для развертывания некоторых ресурсов в Azure, в частности ASE v2.
В моем шаблоне ARM есть условие:
"sv-ase-version": "v2",
"sv-asp-template-filenameHash": {
"v1": "[concat(variables('sv-baseURI'),concat('/azuredeploy-asp.v1.json',parameters('_artifactsLocationSasToken')))]",
"v2": "[concat(variables('sv-baseURI'),concat('/azuredeploy-asp.json',parameters('_artifactsLocationSasToken')))]"
},
Что у меня сейчас есть в PowerShell:
Param(
[string] $TemplateFile = 'azuredeploy-dev.json',
[string] $TemplateParametersFile = 'azuredeploy-dev.parameters.json',
)
$TemplateFile = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $TemplateFile))
$TemplateParametersFile = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $TemplateParametersFile))
Что я хочу добавить в PowerShell:
Param(
[string] $TemplateFile = 'azuredeploy-dev.json',
[string] $TemplateParametersFile = 'azuredeploy-dev.parameters.json',
[string] $TemplateFilev2 = 'azuredeploy.json',
[string] $TemplateParametersFilev2 = 'azuredeploy.parameters.json',
)
#Checking if this is the correct way to do it
if ("sv-ase-version" -eq "v1") {
$TemplateFile = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $TemplateFile))
$TemplateParametersFile = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $TemplateParametersFile))
}
else {
$TemplateFilev2 = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $TemplateFilev2))
$TemplateParametersFilev2 = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $TemplateParametersFilev2))
}
Мое намерение: сделать переключение в файле JSON, без необходимости что-либо менять в PowerShell.
Будет ли это работать? Как бы вы подошли к этому по-другому?
Благодарю.
1 ответ
Самый простой способ сделать это - использовать параметр в шаблоне, назвать его как deploymentPrefix
:
"deploymentPrefix": {
"type": "string",
"defaultValue": "dev",
"allowedValues": [
"dev",
"prod"
],
"metadata": {
"description": "Resources created will be prefixed with this."
}
},
и на основе значения этого параметра решите, что развернуть в шаблоне:
"variables": {
"template-dev": "someurl",
"template-prod": "someotherurl",
"template-url": "[concat('template-', parameters('deploymentPrefix))]"
...
}
и в вашей PowerShell вы бы просто использовать New-AzureRmResourceGroupDeployment
и передайте это (dev или prod) параметру, и шаблон определит, что использовать для переменной template-url.