0

我有一个用于 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 中进行更改。

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

谢谢。

4

1 回答 1

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变量的内容。

于 2017-07-26T12:31:39.093 回答