2

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

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

为了以防万一,我尝试了一个本地模板,一个模板 uri,带/不带散列参数和参数文件。

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

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

4

2 回答 2

3

阅读资源管理器团队中微软员工的论坛帖子(一个私人论坛,因此很遗憾无法提供链接),似乎 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')]"  }
      }
    }
  ],
于 2018-07-26T13:50:52.310 回答
2

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

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

于 2018-07-26T13:21:02.647 回答