Terraform中如何对Map内列表嵌套for循环转换数据结构
Terraform Map转列表对象的实现方案
需求回顾
现有Map类型的本地变量old_local,每个键对应一个权限列表:
old_local = { "ReaderAVD" = [ "Reader", "DesktopVirtualizationUser", "VirtualMachineUserLogin" ] "OwnerAVD" = [ "Owner", "TagContributor", "DesktopVirtualizationUser", "VirtualMachineUserLogin" ] }
需要转换为列表结构new_local,每个父键对应列表中的单个权限生成独立对象,每个对象包含parent(父键)和child(单个权限的列表)。
正确实现代码
new_local = flatten([ for parent_key, roles in old_local : [ for role in roles : { parent = parent_key child = [role] } ] ])
代码解释
- 外层循环:遍历
old_local的键值对,parent_key取Map的键(如"ReaderAVD"),roles取对应的值(权限列表)。 - 内层循环:针对当前
parent_key对应的roles列表,逐个遍历每个权限,生成包含parent和child的对象——注意child要求是列表格式,所以用[role]将单个权限包装成列表。 - flatten函数:将内层循环生成的嵌套列表打平为一维列表,得到目标结构。
原代码问题分析
你之前的代码内层循环错误地再次遍历了整个原Map,导致每个父键与所有权限列表进行全组合,而非仅遍历当前父键对应的权限列表,这会生成大量冗余的错误组合。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

