我有一个用于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中进行更改。
这会有用吗?你会如何区别对待?
感谢。
答案 0 :(得分:0)
最简单的方法是在模板中使用参数,称之为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变量的内容。