Test-AzureRmResourceGroupDeployment 不验证嵌套资源

Test-AzureRmResourceGroupDeployment doesn't validate nested resource

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

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

我已经尝试使用本地模板、模板 uri、with/without 散列参数和参数文件以防万一。

我假设 AzureRM powershell 下面使用的是 Resource Manager API, it doesn't hint to what the validate actually does with nested templates: https://docs.microsoft.com/en-us/rest/api/resources/deployments/validate

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

这不是真的,它会验证嵌套部署,即使您使用 condition: false 对其进行控制,所以您做错了什么,我们需要查看模板以及您如何调用 cmdlet 以了解发生了什么

关于验证:没有真正的方法来验证部署是否有效(test-azurermresourcegroupdeployment 只是垃圾,价值极低)。验证它的唯一方法 - 部署它。

阅读来自资源管理器团队的 Microsoft 员工的论坛 post(一个私人论坛,很遗憾不能提供 link),似乎 Test-AzureRmResourceGroupDeployment 确实 "template expansion"正如 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')]"  }
      }
    }
  ],