Terraform如何将对象列表转换为名称-ID键值对映射?
解决方案
你可以直接通过Terraform映射类型的for表达式一步生成目标键值对结构,或者基于已有的列表变量转换,两种方式都可行:
方法一:直接生成目标映射(推荐)
无需先创建中间对象列表,直接在for表达式里构建映射结构,语法为{for ... in ... : 键 => 值 if ...}:
locals { my_group_map = { for group in data.okta_groups.aws_groups.groups : group.name => group.id if contains(local.groups_not_to_check, group.name) == false } }
这段代码会直接输出你需要的结构:
{ "<group1name>" = "<group1id>", "<group2name>" = "<group2id>", ... }
方法二:基于已有列表变量转换
如果需要保留原有的my_new_map列表变量,可以额外新建一个local变量,通过遍历列表生成映射:
locals { my_new_map = [for group in data.okta_groups.aws_groups.groups: { id = group.id name = group.name } if contains(local.groups_not_to_check, group.name) == false] my_group_map = { for item in local.my_new_map : item.name => item.id } }
关键语法说明
Terraform的for表达式创建映射时,核心结构是:
{for 元素 in 集合 : 键表达式 => 值表达式 [if 过滤条件]}
这里利用group.name(或item.name)作为唯一键,group.id(或item.id)作为对应值,同时保留原有的过滤逻辑排除指定组。
内容的提问来源于stack exchange,提问作者K2SO
相关产品推荐
相关产品推荐

