Helm模板createDbWithUserV2.yaml第48行YAML解析失败求助
排查Helm模板YAML解析失败问题
报错信息
Bake failed: Error: YAML parse error on ccgf-pipeline-jobs/templates/createDbWithUserV2.yaml Line 48 is - name: VAULT_BASE_PATH
模板文件内容(createDbWithUserV2.yaml)
{{ if eq .Values.jobType "create-dbs-with-user-v2"}} {{ $root := .Values }} apiVersion: batch/v1 kind: Job metadata: name: {{ printf "%s-%s-%s" .Values.jobType "custom-task" (.Values.uniqueId | default (randNumeric 25)) | trunc 60 }}{{randNumeric 2}} namespace: {{ .Values.namespace }} labels: customJobType: custom-pipeline-job customJobName: {{ printf "%s-%s" .Values.jobType "custom-task" }} customJobUniqueId: {{ .Values.uniqueId }} cloudtrust.rocks/servicename: {{ printf "%s-%s" .Values.jobType "custom-task" }} {{- if and (hasKey .Values "service") (hasKey .Values.service "standard") (hasKey .Values.service.standard "labels") }} {{- range $key, $val := .Values.service.standard.labels }} {{ $key }}: {{ $val }} {{- end }} {{- end }} spec: ttlSecondsAfterFinished: {{ .Values.ttlSecondsAfterFinished }} template: metadata: annotations: sidecar.istio.io/inject: 'false' labels: cloudtrust.rocks/servicename: {{ printf "%s-%s" .Values.jobType "custom-task" }} {{- if and (hasKey .Values "service") (hasKey .Values.service "standard") (hasKey .Values.service.standard "labels") }} {{- range $key, $val := .Values.service.standard.labels }} {{ $key }}: {{ $val }} {{- end }} {{- end }} namespace: {{ .Values.namespace }} spec: {{- include "customNodeSelector" . | nindent 6 }} containers: - env: - name: DB_HOST value: {{ .Values.dbHost }} - name: DB_PORT value: "3306" - name: DB_LIST value: {{ .Values.dbList }} - name: DB_PREFIX value: {{ .Values.dbPrefix }} - name: VAULT_ADDR value: {{ .Values.vaultAddr }} - name: VAULT_ROLE value: {{ .Values.vaultRole }} - name: VAULT_BASE_PATH value: {{ .Values.vaultBasePath }} - name: MASTER_USER_VAULT_PATH value: {{ .Values.masterUserVaultPath }} - name: DS_CONFIGS value: {{ .Values.dsConfigs | quote }} - name: DB_CONFIG value: {{ .Values.dbConfig | quote }} - name: CMD value: "create-dbs,create-dbs-user" image: {{ (eq .Values.overrideDockerImage "" ) | ternary ( printf "%s/%s" .Values.dockerRepo .Values.pipelineJobsDockerImage ) .Values.overrideDockerImage }} imagePullPolicy: IfNotPresent name: {{ printf "%s-%s" .Values.jobType "custom-task" }} resources: limits: {} requests: {} tty: true imagePullSecrets: - name: {{ .Values.imageSecrets }} restartPolicy: Never securityContext: {} serviceAccount: {{ .Values.serviceAccount }} {{ end }}
可能的原因及解决方法
原因1:customNodeSelector模板输出非法YAML
报错指向第48行,但问题可能出在前面的{{- include "customNodeSelector" . | nindent 6 }}部分。如果这个模板输出的内容存在语法错误(比如缺少空格、冒号使用不当、缩进错误),会破坏整个YAML结构,导致解析器在后续行报错。
解决方法:
- 运行
helm template <release-name> . --set jobType=create-dbs-with-user-v2 --debug命令,查看渲染后的完整YAML,重点检查customNodeSelector对应的输出部分是否合法。 - 修正
customNodeSelector模板的语法错误,确保输出符合YAML规范。
原因2:引用的Values变量未定义或包含特殊字符
如果.Values.vaultBasePath、.Values.dbHost等变量未定义,或变量值包含未转义的引号、换行符等特殊字符,会导致渲染后的YAML格式无效。
解决方法:
- 检查
values.yaml文件,确保所有模板中引用的变量(如vaultBasePath、dbHost、dbList等)都已正确定义。 - 若变量值包含特殊字符,使用
quote函数包裹(如value: {{ .Values.dbList | quote }}),避免破坏YAML结构。
原因3:缩进混合空格与制表符
YAML对缩进严格要求,不能同时使用空格和制表符,否则会触发解析错误。
解决方法:
- 检查模板文件,将所有制表符替换为空格,确保整个文件使用统一的空格缩进(推荐2或4个空格)。
原因4:复杂类型变量渲染异常
比如.Values.dsConfigs或.Values.dbConfig是对象、数组等复杂类型,直接使用quote函数可能生成不符合预期的字符串,破坏YAML结构。
解决方法:
- 若
dsConfigs、dbConfig是复杂类型,改用toJson或toYaml函数处理,比如value: {{ .Values.dsConfigs | toJson | quote }},确保渲染后的内容是合法的字符串。
内容的提问来源于stack exchange,提问作者naman jain
相关产品推荐
相关产品推荐

