powershell - Test-AzureRmResourceGroupDeployment 不验证嵌套资源
问题描述
我希望将 Test-AzureRmResourceGroupDeployment 合并到构建管道中,以便在部署之前知道模板/参数有任何重大问题。
但是,我发现如果我使用嵌套部署,它不会对嵌套部署提供任何验证,即使在 URI 中,我也可能有一个错误的 templateLink -> uri 带有不正确的变量,并且它仍然验证成功。
为了以防万一,我尝试了一个本地模板,一个模板 uri,带/不带散列参数和参数文件。
我假设 AzureRM powershell 下面正在使用Resource Manager API,它没有暗示 validate 对嵌套模板的实际作用:https ://docs.microsoft.com/en-us/rest/api/resources/deployments/证实
我错过了什么?关于如何验证整个模板的任何建议,我是否需要解析嵌套模板以及如何从 json 重新构造参数并手动进行子部署(这将是一种耻辱)?
解决方案
阅读资源管理器团队中微软员工的论坛帖子(一个私人论坛,因此很遗憾无法提供链接),似乎 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')]" }
}
}
],
推荐阅读
- c++ - 函数调用中的 C++ Int 数组类型
- winforms - 如何使用 SAML 对 Windows 窗体客户端进行身份验证?
- video - FFMPEG 忽略“-shortest”
- php - 如何在 SuiteCRM 中基于自定义模块“ProductInvestigation”子面板创建逻辑挂钩
- css - 布局在 iOS/Safari 中无法正确缩放
- mulesoft - 如何在 Mule4 Select Query 中添加动态参数
- php - PHP simpleXMLelment xpath 返回意外结果
- javascript - JS鼠标触发坏
- python - Python中FFT峰值下的区域
- vhdl - VHDL 从 std_logic_vector 数组中获取 std_logic_vector