Helm 模板似乎只能按字母顺序渲染

问题描述 投票:0回答:1

我正在尝试在部署中对卷和卷安装进行模板化。

我想要的输出是:

volumeMounts:
  - name: appsettings
    mountPath: /usr/share/nginx/html/appsettings.json
    subPath: appsettings.json
volumes:
  - name: appsettings
    configMap:
      name: appsettings-file

这是我的values.yml:

volumemounts:
  - name: appsettings
    mountPath: /usr/share/nginx/html/appsettings.json
    subPath: appsettings.json
volumes:
  - name: appsettings
    configMap:
      name: appsettings-file
  

这是我的模板:

{{- with .Values.volumemounts }}
volumeMounts:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.volumes }}
volumes:
{{- print . | nindent 4 }}
{{- end }}

这是输出:

volumeMounts:
    - mountPath: /usr/share/nginx/html/appsettings.json
      name: appsettings
      subPath: appsettings.json
volumes:
    - configMap:
        name: appsettings-file
      name: appsettings

如果我将values.yml中的第2行和第6行更改为

- aname: appsettings
输出是:

volumeMounts:
    - aname: appsettings
      mountPath: /usr/share/nginx/html/appsettings.json
      subPath: appsettings.json
volumes:
    - aname: appsettings
      configMap:
        name: appsettings-file

所以看来 helm 总是按字母顺序获取数组。 (我也尝试使用

print
而不是
toYaml
,当然它给出了一个错误,但我看到它仍然获取按字母顺序排序的数组:
[map[configMap:map[name:appsettings-file] name:appsettings]]

我错过了什么?我该怎么做?

kubernetes-helm
1个回答
0
投票

toYaml
实际上按字母顺序排列字典键。这通常并不重要; Kubernetes 将同等对待两个版本的 pod 规范。如果您希望字典按特定顺序序列化,则需要手动写出键。

在这种特殊情况下,我可能不会尝试使 pod 规范的低级细节变得可配置。我会将其写在模板文件中。如果整个 ConfigMap 挂载是可选的,请将其放在单个共享

{{ if .Values.mountConfig }}
选项后面。这也将删除
toYaml
调用。

© www.soinside.com 2019 - 2024. All rights reserved.