如何从HelmRelease文件动态传递Values至Terraform helm_release资源
解决方案
要在Terraform中实现从远程test-helm-release.yaml动态提取.spec.values及其他字段的需求,无需使用set参数,可通过base64decode+yamldecode组合解析YAML内容,直接复用原values结构,完整实现代码如下:
data "github_repository_file" "test_platform" { repository = "test-platform" branch = "test" file = "internal/default/test-helm-release.yaml" } # 解码并解析远程YAML文件为Terraform可操作的对象 locals { parsed_config = yamldecode(base64decode(data.github_repository_file.test_platform.content)) # 提取chart名称、版本和values内容 target_chart = local.parsed_config.spec.chart.spec.chart target_version = local.parsed_config.spec.chart.spec.version target_values = local.parsed_config.spec.values } resource "helm_release" "test_platform" { name = "test-platform" repository = "https://test-platform/charts" chart = local.target_chart version = local.target_version namespace = "test-system" create_namespace = true timeout = 800 # 将解析后的values对象转为YAML字符串传入,完全复用原文件结构 values = [yamlencode(local.target_values)] lifecycle { ignore_changes = all } }
关键说明
- YAML解析逻辑:
github_repository_file返回的content是Base64编码的字符串,需先用base64decode解码,再通过yamldecode转换为Terraform映射对象,方便提取指定字段。 - values参数处理:
helm_release的values参数接受YAML格式的字符串列表,因此用yamlencode将提取到的target_values映射转回标准YAML字符串,确保和原文件的values结构完全一致。 - 重复键处理:原YAML中重复的
key1字段会被yamldecode自动去重,保留最后一个值,和你之前用yq的处理逻辑一致。 - 版本兼容性:该方案要求Terraform版本≥0.12,确保支持
yamldecode和base64decode函数。
内容的提问来源于stack exchange,提问作者mystack
相关产品推荐
相关产品推荐

