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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:31:00