我没有弄清楚如何正确渲染嵌套模板数组的对象
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
的顺序;这是你无法控制的。