默认地图值

问题描述 投票:0回答:2

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

示例变量.tf:

variable "foo" {
  type = map
  default = {
    lorem = "ipsum"
    dolor = "sit"
  }
}

并且 foo.tfvars 提供:

foo = {
  dolor = "changed"
  amet = "consectetur"
}

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

${foo.dolor}
会被「改变」吗?

${foo.amet}
可用吗?

variables merge terraform
2个回答
11
投票

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

如果您需要与其他值合并,那么您可以使用

merge
函数 明确地编写:

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

locals {
  foo = merge(
    tomap({
      lorem = "ipsum"
      dolor = "sit"
    }),
    var.foo,
  )
}

通过上述配置,在模块的其他位置,您可以参考

var.foo
来获取调用者提供的确切值,或者参考
local.foo
来获取将调用者的映射与默认值映射合并的结果。


1
投票

为了澄清,如果您指定了 tfvars 文件,您会得到:

${foo.lorem} = "Error: Missing map element"

${foo.dolor} = "changed"

${foo.amet}  = "consectetur"
© www.soinside.com 2019 - 2024. All rights reserved.