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

Terraform嵌套For循环中如何跳过无variables属性的迭代?

如何在Terraform中跳过无variables属性的环境迭代

你可以通过两种方式实现跳过无variables属性的环境迭代,避免Terraform因属性不存在报错,同时不生成无效元素:

方法1:用lookup函数设置默认空列表

使用lookup函数为没有variables属性的环境返回一个空列表,这样内层循环遍历空列表时不会生成任何对象,最终flatten后会自动忽略这类环境:

locals {
  variables = flatten([
    for k, env in local.environments : [
      for var_obj in lookup(env, "variables", []) : {
        key: var_obj.key
        value: var_obj.value
        terraform_id: "${k}-${var_obj.key}" # 添加环境标识避免变量key重复
      }
    ]
  ])
}

方法2:用条件判断过滤无variables的环境

在外层循环的内层列表生成逻辑中添加if条件,仅当环境包含variables属性时才执行内层循环,否则返回空列表:

locals {
  variables = flatten([
    for k, env in local.environments : [
      for var_obj in env.variables : {
        key: var_obj.key
        value: var_obj.value
        terraform_id: "${k}-${var_obj.key}" # 添加环境标识避免变量key重复
      }
      if contains(keys(env), "variables")
    ]
  ])
}

补充说明

注意在生成variables时最好添加terraform_id字段(比如用环境名+变量key的组合),否则当不同环境存在同名变量时,gitlab_project_variable资源的for_each会因键值重复报错。调整后的资源配置可以正常使用:

resource "gitlab_project_variable" "variable" {
  for_each = {
    for v in local.variables : v.terraform_id => v
  }

  key   = each.value.key
  value = each.value.value
}

内容的提问来源于stack exchange,提问作者Marcus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:09:40