使用Terraform yamlencode修复Helm Chart部署的缩进问题
Terraform yamlencode生成Helm values缩进错误的解决方法
问题背景
使用Terraform v0.14.11部署Helm Chart时,通过yamlencode函数编码values配置,生成的alertmanager.yml文件缩进层级不符合预期,导致部署出错。
当前代码
Helm Release资源配置
resource "helm_release" "foo" { name = local.chart_name chart = "${path.module}/charts/${local.chart_name}" namespace = var.name-sp values = [yamlencode(local.helm_values.foo)] }
local.helm_values.foo结构
alertmanagerFiles = { "alertmanager.yml" = var.slack_key != "" ? { global = { slack_api_url = var.alertmanager_slack_key receivers = [for k, v in var.receivers : { name = k slack_configs = [{ send_resolved = true channel = v.channel title = "" text = "" }] }] route = { group_wait = "10s" group_interval = "3m" receiver = "slack-notify" repeat_interval = "5m" } } } : {} }
错误现象
执行helm get manifest命令后,发现生成的alertmanager.yml缩进不符合要求:
当前生成内容
alertmanager.yml: | global: receivers: - name: slack_notify slack_configs: - channel: '#prometheus-alerts' route: routes: receiver: slack_notify repeat_interval: 5m slack_api_url: https://hooks.slackurl
预期正确内容
alertmanager.yml: | global: receivers: - name: slack_notify slack_configs: - channel: '#prometheus-alerts' route: routes: receiver: slack_notify repeat_interval: 5m slack_api_url: https://hooks.slackurl
解决方案
问题根源在于原代码中receivers和route被错误嵌套在global的Map结构内,导致yamlencode生成时将它们作为global的子节点,多了一级缩进。只需调整结构,将receivers和route与global设置为同级即可:
修改后的local.helm_values.foo结构
alertmanagerFiles = { "alertmanager.yml" = var.slack_key != "" ? { global = { slack_api_url = var.alertmanager_slack_key } receivers = [for k, v in var.receivers : { name = k slack_configs = [{ send_resolved = true channel = v.channel title = "" text = "" }] }] route = { group_wait = "10s" group_interval = "3m" receiver = "slack-notify" repeat_interval = "5m" } } : {} }
调整后,yamlencode会将global、receivers、route作为同级节点生成,缩进层级与预期一致。
内容的提问来源于stack exchange,提问作者Metro
相关产品推荐
相关产品推荐

