Попытка сделать 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.

Другие вопросы по тегам