Terraform如何将包含IP元数据的tuple转换为ip_rules所需的字符串集合
错误原因
报错
Inappropriate value for attribute "ip_rules": set of string required.的核心是你所用的jsonencode、join等方法,都将IP列表转换为了单个字符串类型,而ip_rules属性要求传入的是字符串集合(set of string)类型的值。
解决方案
直接用splat表达式提取所有ip_address字段后,通过toset函数转换为符合要求的集合类型即可,修改后的配置如下:
network_acls { default_action = "Deny" bypass = "AzureServices" ip_rules = toset(var.allowed_ips[*].ip_address) }
如果需要更高的版本兼容性,也可以用for循环表达式实现相同效果:
network_acls { default_action = "Deny" bypass = "AzureServices" ip_rules = toset([for ip_obj in var.allowed_ips : ip_obj.ip_address]) }
原方案失效说明
jsonencode(var.allowed_ips.*.ip_address):输出为JSON格式的单字符串,例如"[\"3.3.3.3\",\"127.0.0.1\"]",不符合集合类型要求join拼接方案:输出为逗号分隔的单字符串,例如"3.3.3.3,127.0.0.1",类型不匹配- 未做类型转换直接传splat表达式结果:输出为
list(string)类型,和要求的set(string)类型不兼容,因此需要加toset做类型转换。
内容的提问来源于stack exchange,提问作者Michele
相关产品推荐
相关产品推荐

