代码之家  ›  专栏  ›  技术社区  ›  Alex KeySmith

测试azurermResourceGroupDeployment不验证嵌套资源

  •  2
  • Alex KeySmith  · 技术社区  · 6 年前

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

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

    我试过使用一个本地模板,一个模板URI,附带/不附带哈希参数和参数文件,以防万一。

    我假设在azurerm PowerShell下面使用的是 Resource Manager API ,它并不提示validate对嵌套模板实际执行的操作: https://docs.microsoft.com/en-us/rest/api/resources/deployments/validate

    我错过了什么?对于如何验证整个模板,我是否需要解析嵌套的模板,以及如何从JSON重新构造参数,以及如何手工进行子部署(这将是一个遗憾)有何建议?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Alex KeySmith    6 年前

    从资源管理器团队中的一位微软员工那里读到一篇论坛帖子(很不幸,这是一个私人论坛,不能提供链接),似乎test-azuremresourcegroupdeployment做了“模板扩展”,正如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')]"  }
          }
        }
      ],
    
        2
  •  2
  •   4c74356b41    6 年前

    这不是真的,它将验证嵌套部署,即使使用 condition: false ,所以您做了一些错误的事情,我们需要查看模板以及您如何调用Cmdlet以了解发生了什么。

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