尝试为 ARM 模板制作 if/else powershell



我有一个用于ARM模板的PowerShell脚本,用于将一些资源部署到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中更改内容。

这行得通吗?你会如何以不同的方式处理这个问题?

谢谢。

最简单的方法是在模板中使用参数,将其称为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(传递给参数,模板就会找出用于模板URL变量的内容。

相关内容

  • 没有找到相关文章

最新更新