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
相关产品推荐
相关产品推荐

