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')]" }
}
}
],
我希望将 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')]" }
}
}
],