如何在Terraform中将API返回的列表嵌套映射转换为指定格式的映射对象?
Terraform 数据转换解决方案
直接通过local变量结合Terraform内置函数,一步完成从list(map(object))到目标map(object)的转换:
locals { prefix_info = { for desc, items in groupby(var.api_response, "description") : desc => { address_space = [for item in items : item.prefix] site_name = items[0].site.name } } }
代码逻辑说明
- 分组处理:
groupby(var.api_response, "description")将原始API响应列表按description字段分组,生成一个以description值为键、对应同组元素列表为值的临时映射。 - 构造目标结构:外层
for循环遍历分组后的映射:- 以每个分组的
description值作为最终映射的键; - 内层
for循环提取分组内所有元素的prefix字段,组合成address_space列表; - 取分组内第一个元素的
site.name作为site_name(基于同一description对应相同site的前提,若需兼容不同site场景,可根据需求添加校验逻辑)。
- 以每个分组的
代入你提供的API响应示例,最终生成的local.prefix_info结构将完全匹配目标格式。
内容的提问来源于stack exchange,提问作者AndyB
相关产品推荐
相关产品推荐

