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

Terraform从map对象提取指定值失败,仅需获取name字段

解决方案

你可以通过for表达式直接提取每个子对象的name字段,同时保留原var.host_svc的map结构不变,用于其他需要完整对象的场景。

修改后的Terraform主文件示例

locals {
  # 提取name字段的列表,保持原reverse顺序
  services_names = reverse([for svc in values(var.host_svc) : svc.name])
  
  # 保留原有的完整对象列表(如果仍需要的话)
  services_list = reverse(values(var.host_svc))
}

variable "host_svc" {
  type = map(map(any))
}

output "service_names" {
  value = local.services_names
}

# 保留原输出用于验证完整对象(可选)
output "full_services" {
  value = local.services_list
}

关键说明

  1. 保留原map结构:var.host_svc依然是你定义的map(map(any))类型,完全可以在其他资源或模块中直接使用,比如引用var.host_svc.accounts.pod获取实例数。
  2. 提取name字段:通过[for svc in values(var.host_svc) : svc.name]遍历所有子对象,只取出name属性,再用reverse()保持你原来的顺序要求。
  3. 冗余代码清理:你原来的flatten()是多余的,因为values(var.host_svc)返回的已经是一维列表,reverse()后依然是一维,不需要扁平化。

输出结果

应用上述代码后,service_names输出会是:

[
  "analytics",
  "accounts"
]

而var.host_svc可以继续用于其他场景,比如:

# 示例:使用原map中的pod配置
resource "some_resource" "example" {
  for_each = var.host_svc
  replicas = each.value.pod
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:01:18