Terraform如何遍历嵌套map为name数组元素批量追加固定后缀
Terraform 嵌套Map遍历为数组元素追加后缀实现方案
你可以通过Terraform的嵌套for表达式直接完成结构转换,不需要依赖额外自定义函数,实现逻辑如下:
完整实现代码
将原始数据和转换逻辑统一放在locals块中即可:
locals { # 原始嵌套Map数据 school = { "class1" = { "student" = { "name" : ["J", "B"] } } "class2" = { "student" = { "name" : ["Y", "X"] } } } # 定义需要追加的统一后缀 append_value = "appendValue" # 转换完成的目标结构 school_with_suffix = { for class_name, class_info in local.school : class_name => { student = { name = [for stu_name in class_info.student.name : "${stu_name}-${local.append_value}"] } } } }
逻辑说明
- 外层for循环遍历最外层
school下的所有班级键值对,保留原有班级key(class1、class2)不做修改 - 内层保留
student固定层级,对student.name数组做列表推导式遍历,直接通过字符串拼接给每个姓名元素追加指定后缀 - 转换完成的
local.school_with_suffix完全匹配你需要的目标结构,不会修改原始school数据
结果验证
你可以通过output块输出转换后的结果做校验:
output "final_school_structure" { value = local.school_with_suffix }
执行terraform plan后即可看到输出结果和目标结构完全一致。
兼容扩展写法
如果后续student层级下除了name字段还会新增其他属性,建议用merge函数保留原有字段,只覆盖修改name数组,避免新增字段丢失:
school_with_suffix = { for class_name, class_info in local.school : class_name => { student = merge( class_info.student, { name = [for stu_name in class_info.student.name : "${stu_name}-${local.append_value}"] } ) } }
内容的提问来源于stack exchange,提问作者HLT
相关产品推荐
相关产品推荐

