Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 您能否在terraform中使用包含数组的映射变量的查找函数?_Variables_Terraform_Lookup - Fatal编程技术网

Variables 您能否在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

我使用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/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或更高版本中始终使用精确的类型约束