我希望将Test-AzureRmResourceGroupDeployment合并到构建管道中,因此我在部署之前就知道模板/参数存在任何重大问题。
但是我发现我是否使用过nested deployments并没有对嵌套部署进行任何验证,即使我的URI中也存在一个错误的templateLink-> uri带有不正确变量的错误,并且仍然可以成功验证。 / p>
我尝试使用本地模板(模板uri),以防万一,带有/不带有散列的参数和参数文件。
我假设在AzureRM Powershell之下使用的是Resource Manager API,它并不暗示验证对嵌套模板的实际作用:https://docs.microsoft.com/en-us/rest/api/resources/deployments/validate
我错过了什么吗?关于如何验证整个模板的任何建议,我是否需要解析嵌套的模板以及如何从json重构参数以及手动进行子部署(这很可惜)?
答案 0 :(得分:3)
从Resource Manager团队的Microsoft员工那里阅读一个论坛帖子(一个私人论坛,很遗憾,它无法提供链接),看来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')]" }
}
}
],
答案 1 :(得分:2)
那是不正确的,即使您使用condition: false
进行门禁部署,它也会验证嵌套部署,因此您做错了一些事情,我们需要查看模板以及如何调用cmdlet来了解什么。继续