ARM模板如何设置变量值及Or条件的正确使用
错误原因分析
第一次写法报错原因
- ARM模板的
equals函数仅支持两个参数做等值比较,不支持直接和or函数返回值匹配多个目标值的写法 - 你将
or()直接作为equals的第二个入参,且or()的入参全部为字符串类型,不符合or函数要求入参为布尔值的语法规则,最终触发语法解析错误。
第二次写法报错原因
or函数要求所有入参必须为布尔类型,但你在if分支中返回的是字符串格式的'true'/'false',类型不匹配导致验证失败。- 写法冗余,没必要为每个sku单独写
if判断。
正确实现方案
最简洁的实现方式是使用contains函数配合合法sku白名单数组判断,代码如下:
"variables": { "alwaysOnAllowedSkus": ["P1","P2","P3","P1V2","P2V2","P3V2","S1","S2","S3"], "isAlwayOnEnable": "[contains(variables('alwaysOnAllowedSkus'), parameters('skuName'))]" }
如果需要用or函数实现,可直接将多个equals判断作为or的入参,不需要额外套if也不需要加字符串引号:
"variables": { "isAlwayOnEnable": "[or(equals(parameters('skuName'),'S1'), equals(parameters('skuName'),'S2'), equals(parameters('skuName'),'S3'), equals(parameters('skuName'),'P1'), equals(parameters('skuName'),'P2'), equals(parameters('skuName'),'P3'), equals(parameters('skuName'),'P1V2'), equals(parameters('skuName'),'P2V2'), equals(parameters('skuName'),'P3V2'))]" }
以上两种写法返回的都是原生布尔值,可直接在后续资源配置中引用。
内容的提问来源于stack exchange,提问作者Pramod Lawate
相关产品推荐
相关产品推荐

