You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:25:09