Helm构建时传入的数组丢失分隔符问题排查
问题:Helm模板渲染后数组列表的逗号丢失原因
ConfigMap模板
apiVersion: v1 kind: ConfigMap metadata: name: {{ .Values.configmap.name }} data: config.yaml: |- {{ tpl .Values.configmap.template . | indent 4 }}
Chart中的Values配置
values.config.yaml
configmap: name: "some-name" template: |- list: {{ .Values.config.list }}
values.yaml
config: list: [7, 8]
执行的Helm命令
helm template -f values.yaml -f values.config.yaml app .
实际生成的结果
apiVersion: v1 kind: ConfigMap metadata: name: "some-name" data: config.yaml: |- list: [7 8]
问题原因
这是Go模板的YAML序列化机制导致的:
- 当模板直接输出
.Values.config.list这种数组类型的值时,Go模板会按照YAML语法规则进行序列化,而YAML允许在数组元素之间省略逗号(只要元素间有空格分隔),模板序列化器会自动选择这种更紧凑的格式输出,于是逗号就被省略了。 - 你通过
tpl函数渲染嵌套模板时,{{ .Values.config.list }}的输出是Go模板序列化后的YAML数组,而非原始定义里带逗号的格式。
可选解决方法
如果需要强制保留逗号,可以用以下两种方式:
方式一:将数组定义为字符串
修改values.yaml里的配置,把数组写成字符串形式:config: list: "[7, 8]"这样模板输出时会直接保留字符串中的逗号。
方式二:用
toJson函数转换
修改values.config.yaml中的模板:configmap: template: |- list: {{ toJson .Values.config.list }}JSON数组强制保留逗号,渲染后会输出
list: [7,8](逗号保留,仅无空格),如果需要空格可以手动调整。
内容的提问来源于stack exchange,提问作者Mojtaba Arezoomand
相关产品推荐
相关产品推荐

