如何通过指定键列表过滤Terraform Map以生成新Map?
如何在Terraform中根据列表筛选Map条目?
你可以通过Terraform的**for表达式**结合条件过滤来实现这个需求,直接基于目标列表生成筛选后的新Map。
完整实现代码
locals { all_subnets = { "10.1.1.1/24" = "subnet-a" "10.2.2.2/24" = "subnet-b" "10.3.3.3/24" = "subnet-c" "10.4.4.4/24" = "subnet-d" } subnets_i_like = ["10.1.1.1/24", "10.4.4.4/24"] # 生成筛选后的新Map new_map = { for cidr in local.subnets_i_like : cidr => local.all_subnets[cidr] if contains(keys(local.all_subnets), cidr) } }
代码说明
for cidr in local.subnets_i_like:遍历subnets_i_like列表中的每个CIDR元素cidr => local.all_subnets[cidr]:以当前CIDR作为新Map的键,从all_subnets中取出对应的值作为新Map的valueif contains(keys(local.all_subnets), cidr):添加存在性校验,确保只保留all_subnets中实际存在的键,避免因列表包含无效键导致的报错
简化版本(当列表元素均为原Map有效键时)
如果你能确定subnets_i_like中的所有元素都是all_subnets的有效键,可以省略条件判断,简化为:
new_map = { for cidr in local.subnets_i_like : cidr => local.all_subnets[cidr] }
内容的提问来源于stack exchange,提问作者gbt
相关产品推荐
相关产品推荐

