You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 16:23:20