为了账号安全,请及时绑定邮箱和手机立即绑定

在 Helm 模板中解压 Go 映射值

在 Helm 模板中解压 Go 映射值

Go
繁花不似锦 2023-08-07 11:21:49
我似乎无法找到一个简单有效的解决方案来解决我想象的 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插入前导换行符来使模板更加紧凑。


查看完整回答
反对 回复 2023-08-07
  • 1 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信