Azure ARM模板:将字符串IP数组转换为对象数组
解决ARM模板中IP数组转ipRules对象数组的问题
没问题,我帮你把这个IP数组转换的写法捋顺!你要实现的就是把纯IP字符串数组,转成每个元素带value和固定action: Allow的对象数组,用ARM的copy函数完全可以搞定,而且不用硬编码数组长度,更灵活。
正确的变量定义示例
先看完整的变量写法,我把原始IP数组和转换后的变量放在一起:
"variables": { // 你的原始IP字符串数组 "allowedIps": ["1.1.1.1", "1.1.1.2", "2.2.2.2"], // 转换后的对象数组变量 "convertedAllowedIps": { "copy": [ { "name": "ipRules", // 自动取原始数组的长度,不用硬写数字 "count": "[length(variables('allowedIps'))]", "input": { "value": "[variables('allowedIps')[copyIndex('ipRules')]]", "action": "Allow" } } ] } }
关键细节说明
- 动态计数:用
length(variables('allowedIps'))代替硬编码的2,这样不管你后续加多少IP,这个循环都会自动适配,不用手动改count值。 - copyIndex的正确用法:因为这里只有一个copy循环,其实可以直接用
copyIndex(),但加上循环名称copyIndex('ipRules')更严谨,万一以后加其他copy循环也不会搞混。 - 输出结构:转换后
variables('convertedAllowedIps').ipRules就是你要的格式:[ {"value": "1.1.1.1", "action": "Allow"}, {"value": "1.1.1.2", "action": "Allow"}, {"value": "2.2.2.2", "action": "Allow"} ]
在资源中引用
比如你要在存储账户或者其他支持ipRules的资源里用,直接这么写就行:
"properties": { "ipRules": "[variables('convertedAllowedIps').ipRules]" }
另外如果你的allowedIps可能是空数组,这个写法也没问题,length会返回0,循环不会生成任何元素,符合ARM模板的逻辑。
内容的提问来源于stack exchange,提问作者Jorn Theunissen
相关产品推荐
相关产品推荐

