舵图不正确的数组渲染



我没有弄清楚如何正确渲染嵌套模板数组的对象

values.yaml


persistence:
volumes:
- name: api-manutencao-env2
configMap:
name: api-manutencao-env2
- name: api-manutencao-env2
configMap:
name: api-manutencao-env2

部署。yaml(模板)

{{- if .Values.persistence }}
volumes:
{{- range .Values.persistence.volumes }}
{{ . | toYaml | nindent 8 }}
{{- end }}
{{- end }}

结果:

volumes:

configMap:
name: api-manutencao-env2
name: api-manutencao-env2

configMap:
name: api-manutencao-env2
name: api-manutencao-env2
---

我将其内容反转,并在数组结构中中断,而不是添加-和正确的标识。

我试过https://kb.novaordis.com/index.php/Helm_Template_range,它也不工作。

感谢

最简单的方法是在整个列表上调用toYaml,而不是自己遍历它。

{{- with .Values.persistence }}
volumes:
{{ toYaml .volumes | indent 8 }}
{{- end }}

如果使用range遍历列表,并且需要YAML列表标记,则需要自己发出它们。

{{- with .Values.persistence }}
volumes:
{{- range .volumes }}
- {{ toYaml . | indent 10 | trim }}
{{- end }}
{{- end }}

indent将空格放在每行前面,包括第一行,所以在这个结构中,您需要trim开头和结尾空白,导致渲染输出的第一行立即出现在连字符之后。

YAML映射中的项的顺序并不重要,并且在底层的Gomap[string]interface{}层中它没有被保留。在Go的text/template语言中,range被记录为按排序键顺序迭代映射。Helm的toYaml扩展并没有特别好的文档;toJson至少出现在文档中,但它没有说任何关于键顺序。无论name:还是configMap:先出现,Helm都不会记住values.yaml的顺序;这是你无法控制的。

最新更新