【问题标题】:Using conditions in Azure ARM templates在 Azure ARM 模板中使用条件
【发布时间】:2016-03-09 18:24:21
【问题描述】:

有没有办法在模板中使用条件语句?

例如,我正在构建模板,该模板将在 QA 和 Production 上有带有数据磁盘的 vm,但在 Dev 上没有数据磁盘。另一种情况是有一些扩展只需要安装在 prod 虚拟机中,其他地方不需要。

感谢任何帮助。

【问题讨论】:

  • 这是不正确的,虽然没有直接支持条件逻辑,但可以使用对象和变量来完成类似的事情

标签: azure azure-resource-manager


【解决方案1】:

您可以利用新发布的比较功能来完成大部分工作。

下面是一个示例,说明如何使用参数来确定是否应部署存储帐户。

参数:

"deployStorage": {
  "type": "string"
},

资源:

{
  "condition": "[equals(parameters('deployStorage'),'yes')]",
  "name": "[variables('storageAccountName')]",
  "type": "Microsoft.Storage/storageAccounts",
  "location": "[resourceGroup().location]",
  "apiVersion": "2017-06-01",
  "sku": {
    "name": "[parameters('storageAccountType')]"
  },
  "kind": "Storage"
}

请注意资源中的新条件属性以及存储提供程序的最新 API 版本。

参考:https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-template-functions-comparison

【讨论】:

  • 我在模板中使用条件元素,如果参数“deployStorage”未设置为“yes”,我希望它不会期望 storageAccountName。但是,它因以下 InvalidTemplate 部署模板验证失败而出错:“未提供第 '166' 行和第 '39' 列的模板参数 'name' 的值。”如果我希望 Azure 在 deployStorage 设置为“no”时不询问资源参数,条件元素是否是正确的选择?
【解决方案2】:

实现这一点的关键属性是:

  • templateLink 设置要包含的模板以及要传递给被调用模板的参数名称。

    "templateLink": {
        "uri": "[variables('sharedTemplateUrl')]",
        "contentVersion": "1.0.0.0"
    }
    
  • newOrExisting 根据其值,我们可以决定使用 QA 还是 Productoin 配置。

    "newOrExisting": "new",
    
    "configHash": {
      "new": "[concat(parameters('templateBaseUrl'),'partials/QA.json')]",
      "existing": "[concat(parameters('templateBaseUrl'),'partials/Production.json')]"
    }
    
    "configTemplate": "[variables('configHash')[parameters('Settings').newOrExisting]]"
    

您可以看到Azure ARM deployments: how to perform conditional deployments 提供了更多详细信息。

【讨论】:

  • 我发现了另一种使用子模板的方法,如下面的密码验证类型示例所示。 github.com/Azure/azure-quickstart-templates/blob/master/…
  • @nitinb 显然,该示例中没有使用嵌套\子模板并不会打扰您...
  • 这似乎只适用于在模板之间动态更改 - 但是当您根本不想创建特定资源而有时您会这样做时呢?说在 prod 中启用 autoscale,但在 test 中不启用。
  • @JimAho,现在可能有点老了,但请查看:blogs.endjin.com/2016/12/…。 “2. 可选择部署嵌套模板”。基本上,对于“不要这样做”选项,创建一个空白模板。
  • 更新:看起来有更好的方法:条件元素:docs.microsoft.com/en-us/azure/azure-resource-manager/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多