Terraform 默认地图值

n0z*_*0zz 8 variables merge terraform

变量映射的默认值是否与我提供给 terraform 的数据合并?

示例变量.tf:

variable "foo" {
  type = map
  default = {
    lorem = "ipsum"
    dolor = "sit"
  }
}
Run Code Online (Sandbox Code Playgroud)

并且 foo.tfvars 提供了:

foo = {
  dolor = "changed"
  amet = "consectetur"
}
Run Code Online (Sandbox Code Playgroud)

还会${foo.lorem}存在吗?

${foo.dolor}被“改变”吗?

${foo.amet}可用吗?

Mar*_*ins 11

不,没有合并行为。如果您为变量设置显式值,则根本不使用默认值。

如果您需要与其他值合并,那么您可以使用merge函数显式编写:

variable "foo" {
  type    = map(string)
  default = {}
}

locals {
  foo = merge(
    tomap({
      lorem = "ipsum"
      dolor = "sit"
    }),
    var.foo,
  )
}
Run Code Online (Sandbox Code Playgroud)

通过上述配置,您可以参考模块中的其他位置来var.foo获取调用者提供的确切值,或者local.foo获取将调用者的映射与默认值映射合并的结果。