Terraform zipmap条件表达式返回类型不一致报错如何解决
变量说明
ingress_ports_udp:逗号分隔的字符串类型ingress_cidr_udp:逗号分隔的字符串类型
问题原因
原有代码的for_each条件表达式存在类型不匹配问题:真值分支返回map(string)类型的端口-CIDR映射,假值分支返回空字符串"",二者类型不一致,触发Terraform校验报错。同时需要满足两个输入变量均为空字符串时,不生成任何ingress规则的需求。
修复方案
核心调整是将条件表达式的假值分支改为和真值分支同类型的空map(string),Terraform遍历空集合时会自动跳过dynamic块的生成,刚好匹配需求。
修改后的代码如下:
dynamic "ingress" { iterator = rule for_each = length(var.ingress_ports_udp) > 0 && length(var.ingress_cidr_udp) > 0 ? zipmap(split(",", var.ingress_ports_udp), split(",", var.ingress_cidr_udp)) : tomap({}) content { from_port = rule.key to_port = rule.key protocol = "udp" cidr_blocks = [rule.value] } }
额外说明:如果单端口需要对应多个CIDR,可把cidr_blocks的取值改为split(",", rule.value)即可。
内容的提问来源于stack exchange,提问作者Abhishek Solanki
相关产品推荐
相关产品推荐

