使用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:
将渲染结果与Terraform生成的内容对比,找出语法差异点。helm template sonarqube SonarSource/sonarqube --values your-local-values.yaml
内容的提问来源于stack exchange,提问作者hurricane2923
相关产品推荐
相关产品推荐

