我似乎无法找到一个简单有效的解决方案来解决我想象的 Go 模板/Helm 中经常出现的问题。基本上,给定一个像这样的values.yaml:ingress: hosts: - host: busy-a.local paths: - backend: serviceName:busy-a servicePort: 80 path: /busy/[A-Z0-9]{1}和 templates/ingress.yaml 像这样:apiVersion: extensions/v1beta1kind: Ingressmetadata: name: {{.Values.project}}-ingress annotations: nginx.ingress.kubernetes.io/use-regex: "true"spec: rules: {{- range .Values.ingress.hosts }} - host: {{ .host | quote }} http: paths: {{- range .paths }} - path: {{ .path }} backend: serviceName: {{ .backend.serviceName }} # this works servicePort: {{ .backend.servicePort }} # but can we shorthand backend? {{- end }} {{- end }}backend但是,在 中“解压”地图不是更容易.paths range吗backend: {{.backend}}?然而,它似乎并不是那样工作的。... paths: - path: /busy/[A-Z0-9]{3} backend: map[serviceName:busy-a servicePort:80]在 Go 模板或 Sprig 扩展中解压或分配整个对象的首选方法是什么?
1 回答
小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
Helm 有几个几乎没有记录的功能,其中之一是toYaml
. 它接受任意对象并以 YAML 格式写出,不缩进。
toYaml
在您的情况下,您可以通过组合和来实现您想要的目标indent
:
spec:
...
backend:
{{ .backend | trim | indent 14 }}
{{/* above line intentionally at left margin */}}
由于toYaml可以很好地处理嵌套对象,因此考虑到您的输入和输出,我可能会将其应用到更高的位置:
spec:
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host | quote }}
http:
paths: {{- .paths | toYaml | trim | nindent 10 }}
{{- end }}
toYaml总是会发出一个尾随的换行符,所以我倾向于将trim其关闭,这样我就可以更好地控制它。在最后一个示例中,我使用nindent插入前导换行符来使模板更加紧凑。
- 1 回答
- 0 关注
- 109 浏览
添加回答
举报
0/150
提交
取消