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

Terraform 如何筛选列表中符合指定条件的对象?

解决方案

你可以用Terraform原生的for表达式实现集合过滤,也可以搭配groupby函数直接完成分组,两种实现方案如下:

方案1:单独输出dev、prd对应的子列表

适配你给出的列表结构,过滤逻辑如下:

# 输出所有dev集群的服务
output "sublist_dev" {
  value = [
    for svc_obj in var.kubernetes : svc_obj
    if values(svc_obj)[0].cluster == "dev"
  ]
}

# 输出所有prd集群的服务
output "sublist_prd" {
  value = [
    for svc_obj in var.kubernetes : svc_obj
    if values(svc_obj)[0].cluster == "prd"
  ]
}

方案2:一次性按cluster值分组

如果希望更灵活的调用,可直接生成按cluster分组的map,后续需要某类集群的服务时直接取对应key的值即可:

output "kubernetes_by_cluster" {
  value = groupby(
    [for svc_obj in var.kubernetes : values(svc_obj)[0].cluster => svc_obj]
  )
}

该输出的结构为:

{
  "dev" = [dev集群的所有服务对象列表],
  "prd" = [prd集群的所有服务对象列表]
}

后续调用时直接使用kubernetes_by_cluster.dev、kubernetes_by_cluster.prd即可拿到对应分组的列表。

注:如果你的列表结构后续调整为服务名直接作为对象属性、而非单key对象,过滤条件可以简化为if svc.cluster == "目标值",当前写法完全适配你给出的示例结构。

内容的提问来源于stack exchange,提问作者jarobar435

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:24:08