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"] }
关键实现说明
- 复用解码数据:通过
locals块存储解码后的YAML内容,避免重复执行文件读取和YAML解码操作,提升配置的可读性与执行效率。 - for表达式遍历提取:
- 对于
product,使用for循环遍历resource_tags列表,提取每个元素的TAG:product字段,并通过if条件过滤出目标值sf1、sf2、sf3。 - 对于
role,直接通过for循环遍历所有元素,提取全部TAG:role字段,无需过滤即可得到所有期望的角色值。
- 对于
内容的提问来源于stack exchange,提问作者Felixrobin antony
相关产品推荐
相关产品推荐

