Terraform:如何筛选grants含group属性的Person对象?
问题分析
你的原代码逻辑存在错误:你用contains(keys(person.grants), "group")检查的是grants列表本身的键(也就是列表的索引,比如0、1这类数字),而非grants列表中每个对象的键,导致条件永远不成立,无法筛选出目标person。
正确实现方式
要筛选出grants中至少有一个元素包含group属性的person,可借助any函数遍历每个person的grants列表,判断是否存在符合条件的元素:
locals { person = [ { name = "bob" grants = [ { principals = "bob@abc.com" }, { group = ["users"] } ] }, { name = "alice" grants = [ { principals = "bob@abc.com" } ] } ] # 输出以名称为键的映射格式 filtered_persons_map = { for p in local.person : p.name => p if any([for g in p.grants : contains(keys(g), "group")]) } # 输出列表格式(若需保留原列表结构) filtered_persons_list = [ for p in local.person : p if any([for g in p.grants : contains(keys(g), "group")]) ] }
逻辑说明
any([for g in p.grants : contains(keys(g), "group")]):遍历当前person的每个grant对象,检查该对象是否包含group键;只要有一个grant满足条件,any就返回true,当前person会被保留。- 两种输出格式可选:映射格式方便通过名称快速查找,列表格式保留原数据的序列结构。
内容的提问来源于stack exchange,提问作者user3579222
相关产品推荐
相关产品推荐

