我有一个用于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变量的内容。