Variables 您能否在terraform中使用包含数组的映射变量的查找函数?
我使用map变量和lookup函数根据所选的工作区对aws进行不同的配置。当变量包含字符串时,它可以正常工作,但我不能让它与数组一起工作,我不确定这是否可行 我已经翻遍了terraform文档,但看不清如何整理它。看起来它不能用数组图来表示。也许有人已经解决了这个问题Variables 您能否在terraform中使用包含数组的映射变量的查找函数?,variables,terraform,lookup,Variables,Terraform,Lookup,我使用map变量和lookup函数根据所选的工作区对aws进行不同的配置。当变量包含字符串时,它可以正常工作,但我不能让它与数组一起工作,我不确定这是否可行 我已经翻遍了terraform文档,但看不清如何整理它。看起来它不能用数组图来表示。也许有人已经解决了这个问题 variable "cidr" { type = "map" default = { "prod" = ["10.7.3.0/24","10.7.4.0/24"] "test" = ["10.8.3.0/2
variable "cidr" {
type = "map"
default = {
"prod" = ["10.7.3.0/24","10.7.4.0/24"]
"test" = ["10.8.3.0/24","10.8.4.0/24"]
}
}
cidr = ${lookup(var.cidr, terraform.workspace)}"
lookup()只能与的映射一起使用
基本类型。如果您使用Terraform v0.12.0或更高版本,从列表地图访问其中一个列表的惯用方法是使用索引语法:
cidr = var.cidr[terraform.workspace]
您也可以在Terraform v0.11或更早版本中使用索引语法,但必须将其包装在模板字符串中,因为这就是我们向Terraform表明我们打算在这些旧版本中使用表达式的方式:
cidr = "${var.cidr[terraform.workspace]}"
适用于不知道给定键是否存在的情况,如果不存在,则希望提供一个默认值以供使用。尽管只有两个参数的lookup
仍然支持向后兼容,但在现代Terraform中,它通常只能以三个参数的形式使用:
# (this particular default is likely not a good idea, but this
# is just to illustrate the syntax.)
cidr = lookup(var.cidr, terraform.workspace, ["0.0.0.0/0"])
在Terraform 0.12.7之前,查找
功能实际上仅限于处理基本类型的地图。在Terraform 0.12.7中,它被推广为与索引操作符的行为相同,但有一个额外的规则,即如果请求的键不存在,则返回默认值
作为旁注,如果您使用Terraform v0.12.0或更高版本,则可以对该变量提供更具体的类型约束:
variable "cidr" {
type = map(list(string))
default = {
"prod" = ["10.7.3.0/24","10.7.4.0/24"]
"test" = ["10.8.3.0/24","10.8.4.0/24"]
}
}
通过准确地告诉Terraform列表和映射类型需要哪些元素类型,Terraform可以自动检查调用者提供的值以确保其符合,如果不符合,则报告类型错误。如果您只是编写“map”
,那么这是map(any)
的传统简写,在这种情况下,Terraform只能检查它是否是任何单一类型的贴图,而不能具体检查元素类型。我建议在Terraform 0.12.0或更高版本中始终使用精确的类型约束