在Azure ARM模板中使用条件

在Azure ARM模板中使用条件,azure,azure-resource-manager,Azure,Azure Resource Manager,有没有办法在模板中使用条件语句 例如,我正在构建一个模板,该模板将在QA和生产环境中安装带有数据磁盘的虚拟机,但在开发环境中没有数据磁盘。另一种情况是,只需要在prod虚拟机中安装一些扩展,而不需要在其他地方安装 非常感谢您的帮助。实现这一点的关键特性是: templateLink设置要包括的模板以及要传递给被调用模板的参数名称 "templateLink": { "uri": "[variables('sharedTemplateUrl')]", "contentVersio

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

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


非常感谢您的帮助。

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

  • 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]]"
    

您可以看到哪个提供了更多详细信息。

您可以利用新发布的比较函数来完成大部分工作

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

参数:

"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"
}
请注意资源中的新condition属性以及存储提供程序的最新API版本


参考:

我发现了另一种使用子模板的方法,如下面的密码验证类型示例所示@nitinb显然,在该示例中没有使用嵌套\子模板并不困扰您…这似乎只适用于在模板之间动态更改-但是当您根本不想创建特定资源时,有时您会这样做,该怎么办?假设在prod中启用自动缩放,但在测试中不启用。@JimAho,现在可能有点老了,但请检查:。“2.可选择部署嵌套模板”。基本上,对于“不要这样做”选项,创建一个空白模板。更新:看起来有更好的方法:条件元素:这不是真的,但是没有直接支持条件逻辑,使用对象和变量也可以做类似的事情我在模板中使用condition元素,如果参数“deployStorage”未设置为“yes”,我希望它不会使用storageAccountName。但是,由于以下InvalidTemplate部署模板验证失败而出错:“未提供第“166”行和第“39”列的模板参数“name”的值。”如果我希望Azure在deployStorage设置为“否”时不请求资源参数,那么这里的条件元素是否是正确的选择?