根据 terraform 中的条件输出值构建地图

Jel*_*tis 2 terraform

我有一个输出两个值的模块,key并且value. 该模块包含第三个值is_needed,它是一个布尔值。我可以多次运行该模块并获取输出图。有没有办法根据is_needed布尔值有条件地将值添加到地图?

例如,我可以创建一个包含所有值的地图,如下所示:

locals {
  map_of_values = tomap({
    for instance in module.my_module : instance.key => instance.value
  })
}
Run Code Online (Sandbox Code Playgroud)

我可以创建仅包含部分值的地图吗?类似于这个伪代码:

locals {
  map_of_needed_values = tomap({
    for instance in module.my_module if is_needed: instance.key => instance.value
  })
}
Run Code Online (Sandbox Code Playgroud)

Tyl*_*ler 5

是的。事实上,您的伪代码非常接近正确的语法。

locals {
  map_of_needed_values = tomap({
    for instance in module.my_module :
    instance.key => instance.value if instance.is_needed
  })
}
Run Code Online (Sandbox Code Playgroud)

这是完整的功能代码块,可帮助您了解其全部工作原理。我不完全确定你的module.my_module输出的结构,所以我猜测。

variable "my_module" {
  default = {
    "instance_1" = {
      "key"       = "hello"
      "value"     = "world"
      "is_needed" = false
    }
    "instance_2" = {
      "key"       = "foo"
      "value"     = "bar"
      "is_needed" = true
    }
  }
}

locals {
  map_of_needed_values = tomap({
    for instance in var.my_module :
    instance.key => instance.value if instance.is_needed
  })
}

output "map_of_needed_values" { value = local.map_of_needed_values }
Run Code Online (Sandbox Code Playgroud)