Terraform-如果在for_each中.我可以筛选每个(_E)吗



通过以下操作,我可以循环遍历资源块,将路由表关联添加到"所有";我的子网。但是,我只需要为我的公共子网创建关联。

我该怎么做;如果";报表工作?或者以任何其他方式对each.value.class == "pub"进行过滤。

resource "aws_route_table_association" "rtb-pub" {
for_each =  local.subnets_map 
if each.value.class == "pub"    ## <---- how?
route_table_id = aws_route_table.rtb-pub.id
subnet_id      = aws_subnet.map["${each.value.subnet}"].id
}

提前感谢!

这取决于local.subnets_map的结构。但是for_each应该类似于以下内容:

resource "aws_route_table_association" "rtb-pub" {
for_each =  {for key, val in local.subnets_map: 
key => val if val.class == "pub"}
route_table_id = aws_route_table.rtb-pub.id
subnet_id      = aws_subnet.map["${each.value.subnet}"].id
}

for循环过滤的一个弱点是AFAIK只能使用一个匹配值。

如果需要在映射或列表中筛选多个值,请尝试matchkeys((函数:https://www.terraform.io/docs/language/functions/matchkeys.html

使用映射时,需要使用keys((和values((函数来提供列表参数:

local {
users = { user1 = "value1", user2 = "value2", user3 = "value3", user4 = "value4" }
}
output user_subset {
value = matchkeys(values(local.users), keys(local.users), ["user1", "user3"])
}

所得到的输出可以在资源块中的for_each循环中使用。在本例中,我将使用它将用户的子集添加到组中。

相关内容

  • 没有找到相关文章