Helm升级失败:多消息i18n配置转JSON时YAML解析错误
解决Helm ConfigMap多行YAML解析错误问题
问题根源
你的模板中直接输出多行$messages时,第二行及以后的内容没有缩进,违反了YAML块标量的格式规则。YAML解析器会把无缩进的行当成新的顶级键,导致出现找不到冒号的错误。
修复后的模板
将configmap.i18n.yaml中的{{ $messages }}替换为{{ $messages | nindent 4 }},确保多行内容都保持正确的缩进:
apiVersion: v1 kind: ConfigMap metadata: name: {{ include "app.name" . }}-i18n-configuration labels: {{- include "app.labels" . | nindent 4 }} data: {{- range $lang, $messages := .Values.application.i18n }} {{ $lang }}: | {{ $messages | nindent 4 }} {{- end }}
原理说明
使用nindent 4会给$messages的每一行前面添加4个空格,让所有行都属于{{ $lang }}:对应的块内容。这样YAML解析器就能正确识别多行文本是单个键的值,不会误判为新的配置项。
测试修改后的模板,你的多行i18n配置就能正常生成ConfigMap,不会再出现解析错误。
内容的提问来源于stack exchange,提问作者Sepideh
相关产品推荐
相关产品推荐

