Terraform:如何批量更新列表映射中含小写x的name属性
Terraform 批量处理映射列表问题解决
原代码的问题点
- 多余嵌套
levels循环:你的期望输出里并没有difficulty字段,这段循环完全没必要,反而会生成不符合预期的多重复条目。 - 条件判断语法错误:Terraform的for循环过滤需要用
if关键字,直接写regex会导致语法错误;且regex匹配不到时会报错,应该用can()包裹来安全判断。 - 字符串转义冗余:
replace函数内的参数不需要转义双引号,直接写明文即可。 - 不必要的
flatten:当前场景没有嵌套数组需要展平,这个函数是多余的。
修正后的代码方案
方案一:用can(regex)判断包含小写x
locals { mini_maps = [ { id = "1" name = "secret-x" }, { id = "2" name = "tomz" }, { id = "3" name = "juke-x" } ] new_mini_maps = [ for m in local.mini_maps : { id = m.id name = "MAP_${replace(m.name, "x", "X")}" } if can(regex("x", m.name)) # 仅保留name含小写x的条目 ] }
方案二:用contains判断包含小写x(更直观)
locals { mini_maps = [ { id = "1" name = "secret-x" }, { id = "2" name = "tomz" }, { id = "3" name = "juke-x" } ] new_mini_maps = [ for m in local.mini_maps : { id = m.id name = "MAP_${replace(m.name, "x", "X")}" } if contains(split("", m.name), "x") ] }
输出结果
两段代码都会生成你期望的结果:
[ { id = "1" name = "MAP_secret-X" }, { id = "3" name = "MAP_juke-X" } ]
内容的提问来源于stack exchange,提问作者N. J
相关产品推荐
相关产品推荐

