如何创建含条件元素的Terraform映射列表?
Terraform 过滤空映射生成列表方案
方法一:通过映射长度自动过滤
先定义所需变量:
variable "A" { type = map(string) } variable "B" { type = map(string) } variable "C" { type = map(string) }
通过for表达式结合length函数筛选非空映射,生成目标列表:
locals { final_list = [ for item in [var.A, var.B, var.C] : item if length(item) > 0 ] }
当传入A = { foo = "bar" }、B = {}、C = { foo = "bar" }时,local.final_list会自动排除空映射B,得到[{foo = "bar"}, {foo = "bar"}]。
方法二:通过布尔标记手动控制
如果需要更灵活的控制(比如即使映射非空也可选择不加入),可以给每个变量搭配一个布尔开关:
variable "A" { type = map(string) } variable "A_enabled" { type = bool default = true } variable "B" { type = map(string) } variable "B_enabled" { type = bool default = false } variable "C" { type = map(string) } variable "C_enabled" { type = bool default = true }
利用compact函数过滤null值生成列表:
locals { final_list = compact([ var.A_enabled ? var.A : null, var.B_enabled ? var.B : null, var.C_enabled ? var.C : null, ]) }
这种方式下,只要对应布尔变量设为true,就会将映射加入列表,不受映射是否为空限制。
内容的提问来源于stack exchange,提问作者user3079474
相关产品推荐
相关产品推荐

