如何在Terraform中反转嵌套映射与列表结构
Terraform 嵌套映射结构转换实现
输入结构
variable "original" { type = map(map(string)) default = { "us1" = { "0" = "192.168.1.1" }, "europe2" = { "0" = "192.168.10.1", "1" = "10.0.0.1" } } }
转换实现
通过Terraform的flatten、groupby和merge函数组合,可实现结构的反转转换:
locals { # 将原始嵌套结构扁平化为包含区域、索引、IP的一维列表 flattened = flatten([ for region, ip_map in var.original : [ for idx, ip in ip_map : { region = region idx = idx ip = ip } ] ]) # 按索引分组,生成目标结构 transformed = merge([ for idx_key, grouped_items in groupby(local.flattened, "idx") : { idx_key = { for item in grouped_items : item.region => item.ip } } ]...) }
验证输出
添加输出块查看转换结果:
output "transformed_result" { value = local.transformed }
执行terraform apply后,输出结果将符合预期:
transformed_result = { "0" = { "europe2" = "192.168.10.1" "us1" = "192.168.1.1" } "1" = { "europe2" = "10.0.0.1" } }
逻辑说明
- 扁平化处理:通过两层
for循环遍历原始结构,将每个区域下的索引-IP对转换为包含区域、索引、IP的独立对象,再用flatten合并为一维列表,消除嵌套层级。 - 分组合并:使用
groupby按索引值分组,将同一索引下的所有区域-IP对聚合,再通过内层for表达式生成以区域为键、IP为值的映射,最后用merge和展开运算符...将所有索引对应的映射合并为最终结构。
内容的提问来源于stack exchange,提问作者DeLoVaN
相关产品推荐
相关产品推荐

