powershell - Test-AzureRmResourceGroupDeployment 不验证嵌套资源

标签 powershell azure azure-resource-manager azure-rm

我希望将 Test-AzureRmResourceGroupDeployment 合并到构建管道中,以便在部署之前知道模板/参数存在任何重大问题。

但是我发现如果我使用 nested deployments它不提供对嵌套部署的任何验证,即使在 URI 中,我也可能有一个错误的 templateLink -> uri,其中包含不正确的变量,但它仍然验证成功。

我尝试过使用本地模板、模板 uri、带/不带散列参数和参数文件,以防万一。

我假设 AzureRM powershell 正在使用 Resource Manager API ,它没有暗示验证对嵌套模板的实际作用:https://learn.microsoft.com/en-us/rest/api/resources/deployments/validate

我错过了什么吗?关于如何验证整个模板的任何建议,我是否需要解析嵌套模板以及如何从 json 重新构造参数并手动进行子部署(这将是一种耻辱)?

最佳答案

阅读资源管理器团队中 Microsoft 员工的论坛帖子(一个私有(private)论坛,因此遗憾的是无法提供链接),看来 Test-AzureRmResourceGroupDeployment 确实进行了“模板扩展”,正如 4c74356b41 也善意指出的那样 - 当然是嵌套的模板验证应该有效...

因此,进一步的实验发现了验证的局限性,请参阅下面的示例。如果嵌套部署中完全缺少变量,则它似乎不会在父模板中被拾取为验证警告,并且似乎还会干扰模板扩展,导致嵌套模板也被忽略。

如果删除 "parameters": { "missing": "[variables('PURPOSEFULLY_MISSING')]"} ,则模板将正常验证,嵌套模板也会正常验证。

仅用于嵌套资源的整体模板的片段:

  "resources": [
    {
      "name": "[variables('deploymentName')]",
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2018-05-01",
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "uri": "[variables('deploymentUri')]",
          "contentVersion": "1.0.0.0"
        },
        "parameters": { "missing" :  "[variables('PURPOSEFULLY_MISSING')]"  }
      }
    }
  ],

关于powershell - Test-AzureRmResourceGroupDeployment 不验证嵌套资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51539769/

相关文章:

azure - 是否可以使用 ARM 模板部署在 Azure 虚拟机上启用安全启动?

azure - 如何在 ARM 模板中创建 Key Vault 托管存储帐户?

.net - 一元运算符 '--' 后缺少表达式

powershell - 使用点对点连接(RM Powershell)将Azure WebApp添加到现有VPN

Powershell 替换 csv 中的一个实例

Azure Powershell - 从另一个脚本文件加载变量

azure - 如何允许 GZIP 用于 Azure 表存储查询

azure - Azure 中的 web.config 中的邮件设置被忽略

azure - Visual Studio 2013 Azure 发布配置文件相同的 Azure 帐户但不同的开发人员

azure - 是否可以在 YAML 管道中创建带有标签的 Azure 资源组?