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

Terraform中使用yamldecode提取多列表所有产品与角色标签

Terraform提取YAML中所有指定product和role标签值的解决方案

问题说明

当前Terraform的outputs.tf配置仅能从YAML文件的resource_tags列表中提取首个元素的product和role值,需调整配置以实现:

  • product输出指定值:["sf1", "sf2", "sf3"]
  • role输出所有对应值:["pipeline", "development", "automation", "build"]

修改后的outputs.tf配置

# 预解码YAML数据,避免重复调用yamldecode和file函数
locals {
  yaml_data = yamldecode(file("resource/rnd/amc.yaml"))
}

output "product" {
  # 遍历resource_tags列表,提取并过滤指定的product值
  value = [for tag in local.yaml_data["account_list"]["resource_tags"] : tag["TAG:product"] if contains(["sf1", "sf2", "sf3"], tag["TAG:product"])]
}

output "bu" {
  value = local.yaml_data["common_tags"]["TAG:bu"]
}

output "acc-no" {
  value = local.yaml_data["account_list"]["workload_accounts"]["TAG:acc-no"]
}

output "role" {
  # 遍历resource_tags列表,提取全部role值
  value = [for tag in local.yaml_data["account_list"]["resource_tags"] : tag["TAG:role"]]
}

output "environment" {
  value = local.yaml_data["account_list"]["workload_accounts"]["TAG:environment"]
}

output "type" {
  value = local.yaml_data["common_tags"]["TAG:type"]
}

关键实现说明

  1. 复用解码数据:通过locals块存储解码后的YAML内容,避免重复执行文件读取和YAML解码操作,提升配置的可读性与执行效率。
  2. for表达式遍历提取:
    • 对于product,使用for循环遍历resource_tags列表,提取每个元素的TAG:product字段,并通过if条件过滤出目标值sf1、sf2、sf3。
    • 对于role,直接通过for循环遍历所有元素,提取全部TAG:role字段,无需过滤即可得到所有期望的角色值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:01:06