在 terraform 中访问地图列表中的列表
Accessing a list inside a list of maps in terraform
我正在尝试访问 terraform 地图列表中的列表。结构如下:
dynamic.tfvars
--------------
nacl=[
{
"vpc_name" = "vpc1"
"acl_name" = "acl1"
"subnet_name" = ["sub1-az1","sub2-az2"]
},
{
"vpc_name" = "vpc2"
"acl_name" = "acl2"
"subnet_name" = ["sub1-az1","sub2-az2"]
}
]
我试图从我的子模块中的地图列表中获取“subnet_name”(列表),但它不起作用。下面是我正在使用的代码。
main.tf
-------
data "aws_vpc" "vpc_nacl" {
count = length(var.nacl[*])
filter {
name = "tag:Name"
values = [element(var.nacl[*]["vpc_name"],count.index)]
}
}
locals {
lcl_vpc_nacl = data.aws_vpc.vpc_nacl.*.id
}
data "aws_subnet_ids" "example" {
count = length(var.nacl[*]["subnet_name"])
vpc_id = element(local.lcl_vpc_nacl,count.index)
filter {
name = "tag:Name"
values = [element(var.nacl[*]["subnet_name"],count.index)]
}
}
执行 terraform 计划时出现以下错误。
│ Error: Incorrect attribute value type
│
│ on Modules\NACL\Main.tf line 28, in data "aws_subnet_ids" "example":
│ 28: values = [element(var.nacl[*]["subnet_name"],count.index)]
│ ├────────────────
│ │ count.index is 1
│ │ var.nacl is list of object with 5 elements
│
│ Inappropriate value for attribute "values": element 0: string required.
任何修复或建议将不胜感激。提前致谢。
从 aws_subnet_ids 数据源文档中,我看到 filter
中的 values
需要一个集合。
查看代码,您就快完成了,但是您正在将列表列表传递给 values
,这就是您出现此错误的原因。
element((var.nacl[*]["subnet_name"]), count.index)
以列表格式提取子网列表。
您只需要像下面那样转换为 set 并在没有方括号的情况下传递..
main.tf
-------
data "aws_subnet_ids" "example" {
count = length(var.nacl[*]["subnet_name"])
vpc_id = element(local.lcl_vpc_nacl,count.index)
filter {
name = "tag:Name"
values = toset(element((var.nacl[*]["subnet_name"]), count.index))
}
}
试一试,如果有帮助请告诉我..
我正在尝试访问 terraform 地图列表中的列表。结构如下:
dynamic.tfvars
--------------
nacl=[
{
"vpc_name" = "vpc1"
"acl_name" = "acl1"
"subnet_name" = ["sub1-az1","sub2-az2"]
},
{
"vpc_name" = "vpc2"
"acl_name" = "acl2"
"subnet_name" = ["sub1-az1","sub2-az2"]
}
]
我试图从我的子模块中的地图列表中获取“subnet_name”(列表),但它不起作用。下面是我正在使用的代码。
main.tf
-------
data "aws_vpc" "vpc_nacl" {
count = length(var.nacl[*])
filter {
name = "tag:Name"
values = [element(var.nacl[*]["vpc_name"],count.index)]
}
}
locals {
lcl_vpc_nacl = data.aws_vpc.vpc_nacl.*.id
}
data "aws_subnet_ids" "example" {
count = length(var.nacl[*]["subnet_name"])
vpc_id = element(local.lcl_vpc_nacl,count.index)
filter {
name = "tag:Name"
values = [element(var.nacl[*]["subnet_name"],count.index)]
}
}
执行 terraform 计划时出现以下错误。
│ Error: Incorrect attribute value type
│
│ on Modules\NACL\Main.tf line 28, in data "aws_subnet_ids" "example":
│ 28: values = [element(var.nacl[*]["subnet_name"],count.index)]
│ ├────────────────
│ │ count.index is 1
│ │ var.nacl is list of object with 5 elements
│
│ Inappropriate value for attribute "values": element 0: string required.
任何修复或建议将不胜感激。提前致谢。
从 aws_subnet_ids 数据源文档中,我看到 filter
中的 values
需要一个集合。
查看代码,您就快完成了,但是您正在将列表列表传递给 values
,这就是您出现此错误的原因。
element((var.nacl[*]["subnet_name"]), count.index)
以列表格式提取子网列表。
您只需要像下面那样转换为 set 并在没有方括号的情况下传递..
main.tf
-------
data "aws_subnet_ids" "example" {
count = length(var.nacl[*]["subnet_name"])
vpc_id = element(local.lcl_vpc_nacl,count.index)
filter {
name = "tag:Name"
values = toset(element((var.nacl[*]["subnet_name"]), count.index))
}
}
试一试,如果有帮助请告诉我..