如何将values.yaml中完整YAML传递至Helm模板?求解报错
问题根源
你遇到的错误是因为toYaml函数的使用场景不对:这个函数是用来把结构化的YAML对象(比如values里的map、列表)转换成YAML字符串的,但你在values.yaml里把metallbConfig定义成了多行字符串(用|或>标记的块字符串),直接把字符串传给toYaml,Helm会尝试把它解析成结构化数据,自然就会报解组错误。
两种解决方案
方案1:将values中的配置改为YAML对象(推荐)
把values.yaml里的多行字符串改成原生YAML结构,让metallbConfig成为一个结构化对象,这样toYaml就能正确处理:
修改后的values.yaml
metallbConfig: apiVersion: metallb.io/v1beta1 kind: BGPPeer metadata: name: example-peer spec: peerAddress: 192.168.1.1 peerASN: 64512 myASN: 64512
templates/resources.yaml中引用
{{- if .Values.metallbConfig }} {{ toYaml .Values.metallbConfig | nindent 2 }} {{- end }}
这里用nindent 2是为了给生成的YAML内容添加合适的缩进,保证最终输出的YAML格式合法。
方案2:直接输出多行字符串(保留原字符串格式时用)
如果你确实需要把metallbConfig作为多行字符串存储(比如从外部文件导入、动态生成内容),那就不要用toYaml,直接输出字符串即可:
原values.yaml(保留多行字符串)
metallbConfig: | apiVersion: metallb.io/v1beta1 kind: BGPPeer metadata: name: example-peer spec: peerAddress: 192.168.1.1 peerASN: 64512 myASN: 64512
templates/resources.yaml中引用
{{- if .Values.metallbConfig }} {{ .Values.metallbConfig | nindent 2 }} {{- end }}
这样就能直接把你定义的多行字符串原样输出到模板里,不会触发解析错误。
内容的提问来源于stack exchange,提问作者Vishnu Hari Dadhich
相关产品推荐
相关产品推荐

