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

使用Terraform通过Helm Chart部署SonarQube遇YAML解析错误求助

问题

通过Terraform使用Helm Chart部署SonarQube时,每次执行部署都会触发如下错误:

Error: YAML parse error on sonarqube/templates/ingress.yaml: error converting YAML to JSON: yaml: line 14: found character that cannot start any token

已将制表符替换为空格,问题仍未解决。仓库地址可正常访问,该Helm Chart可手动安装,但无法通过main.tf完成部署。相关Terraform配置代码如下:

# Install PostgreSQL
resource "helm_release" "postgresql" {
  name       = "postgresql"
  namespace  = "default"
  repository = "oci://registry-1.docker.io/bitnamicharts"
  chart      = "postgresql"
  version    = "15.1.0" # Replace with the latest valid version

  timeout = 600
  wait    = true

  values = [
    <<-EOF
    global:
      postgresql:
        auth:
          username: sonarqube
          password: sonarqube123
          database: sonarqube
    persistence:
      enabled: true
      size: 10Gi
    EOF
  ]
}    
# Install SonarQube
    resource "helm_release" "sonarqube" {
      depends_on = [helm_release.postgresql]

      name       = "sonarqube"
      namespace  = "default"
      repository = "https://SonarSource.github.io/helm-chart-sonarqube"
      chart      = "sonarqube"

      values = [
        <<-EOF
        postgresql:
          enabled: false
          postgresqlServer: "postgresql.default.svc.cluster.local"
          postgresqlDatabase: "sonarqube"
          postgresqlUsername: "sonarqube"
          postgresqlPassword: "sonarqube123"

        persistence:
          enabled: true
          size: 10Gi

        ingress:
          enabled: true
          annotations:
            nginx.ingress.kubernetes.io/rewrite-target: /
          hosts:
            - host: sonarqube.local
              paths:
                - path: /
                  pathType: Prefix
          tls: [] # Optional TLS configuration if required
        EOF
      ]
    }
解决方法

1. 修正HEREDOC缩进问题

Terraform的<<-EOF语法仅会移除内容中的前导制表符,不会处理前导空格。你SonarQube配置块中的HEREDOC内容前有多余空格,导致生成的YAML缩进混乱,触发解析错误。

修正后的SonarQube配置:

# Install SonarQube
resource "helm_release" "sonarqube" {
  depends_on = [helm_release.postgresql]

  name       = "sonarqube"
  namespace  = "default"
  repository = "https://SonarSource.github.io/helm-chart-sonarqube"
  chart      = "sonarqube"

  values = [
    <<-EOF
postgresql:
  enabled: false
  postgresqlServer: "postgresql.default.svc.cluster.local"
  postgresqlDatabase: "sonarqube"
  postgresqlUsername: "sonarqube"
  postgresqlPassword: "sonarqube123"

persistence:
  enabled: true
  size: 10Gi

ingress:
  enabled: true
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
  hosts:
    - host: sonarqube.local
      paths:
        - path: /
          pathType: Prefix
  tls: [] # Optional TLS configuration if required
EOF
  ]
}

注意:HEREDOC内的内容需顶格书写,或保证所有内容的缩进完全一致,避免混合空格导致YAML结构异常。

2. 统一资源块缩进

你的SonarQuberesource块前有多余的缩进(比PostgreSQL块多了空格),虽然Terraform本身允许,但容易引发HEREDOC的缩进混淆,建议保持所有资源块的缩进一致(比如都顶格或统一缩进2/4空格)。

3. 验证生成的YAML内容

如果问题仍存在,可通过以下步骤定位差异:

  • 执行terraform plan,查看输出中Helm values的实际生成内容
  • 用手动安装时的values文件,通过helm template命令渲染Chart:
    helm template sonarqube SonarSource/sonarqube --values your-local-values.yaml
    
    将渲染结果与Terraform生成的内容对比,找出语法差异点。

内容的提问来源于stack exchange,提问作者hurricane2923

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:02:22