如何从Azure Pipelines YAML读取变量至Terraform outputs.tf?
解决Terraform读取Azure Pipelines YAML变量/参数并输出的问题
问题背景
需要从azure-pipelines.yaml中读取ResourceGroup变量及参数值,在Terraform的outputs.tf中输出,但直接通过local.config.variables["ResourceGroup"]这类方式无法获取到值——因为yamldecode解析后,variables和parameters是对象列表,而非键值对映射。
解决方案
通过Terraform的for表达式将列表格式的变量/参数转换为键值对映射,之后即可直接通过键名访问对应值。
步骤1:更新locals.tf,转换变量/参数为映射
修改locals.tf,新增两个映射用于存储流水线变量和参数:
locals { config = yamldecode(file("azure-pipelines.yaml")) # 将variables列表转换为键值对映射,key为变量名,value为变量值 variables_map = { for var in local.config.variables : var.name => var.value } # 将parameters列表转换为键值对映射,key为参数名,value为参数默认值 parameters_map = { for param in local.config.parameters : param.name => param.default } }
步骤2:在outputs.tf中输出目标值
现在可以直接通过映射的键名读取对应值,修改outputs.tf:
# 输出ResourceGroup变量值 output "resource_group_name" { value = local.variables_map["ResourceGroup"] } # 输出name参数的默认值 output "default_parameter_name" { value = local.parameters_map["name"] } # 输出publishTestData参数的默认值 output "default_publish_test_data" { value = local.parameters_map["publishTestData"] }
验证结果
执行terraform apply或terraform output后,即可看到对应的变量和参数值被正确输出。
内容的提问来源于stack exchange,提问作者hitman126
相关产品推荐
相关产品推荐

