有没有一种方法可以使带有词典的字典变平?我想通过展平位于values.yaml中的YAML配置向图表中的应用程序提供环境变量。配置看起来像。 (不实际)
config:
server:
port: 3333
other:
setting:
name: test
并且想提供环境变量为
- name: CONFIG_SERVER_PORT
value: 3333
- name: CONFIG_OTHER_SETTING_NAME
value: test
我已经考虑过使用Kubernetes配置映射,但这将意味着使用随机发行版名称部署略有不同的应用实例,以使配置不会被覆盖。该库https://github.com/jeremywohl/flatten提供了一种用分度数展平map[string]interface{}
的方法。有没有一种方法可以为使用库的头盔提供自定义管道,或以另一种方法来扁平化配置?
可能不是。您可能可以使用某些Sprig函数和许多局部变量在纯Gotpl中实现此功能,但是……不行。您不能在不重新编译自定义功能的情况下将其添加到Helm中。只需直接使用本机格式即可。
您提出的问题是可能的。没有附近的消息来源。但是尝试这样的事情。
// chart
apiVersion: apps/v1beta1
kind: Deployment
spec:
template:
spec:
containers:
- name: {{ template "name" . }}
command: [{{ range $i, $e := .Values.container.command }}{{ if $i }}, {{$e|quote}}{{else}}{{$e|quote}}{{end}}{{end}}]
env:
{{- range .Values.container.env }}
- name: {{ .name }}
value: "{{ .value }}"
{{- end }}
// values
container:
command: ["cmd", "sub_cmd", "sub_sub_cmd"]
env:
- name: CONFIG_SERVER_PORT
value: 3333
- name: CONFIG_OTHER_SETTING_NAME
value: test
[我不知道内置的东西。Sprig为头盔模板提供了大多数有用的功能,但dict functions仅覆盖了基元。
您可以define
和named template开展业务并递归配置dict / map。然后在需要的地方include
模板:
{{- define "recurseFlattenMap" -}}
{{- $map := first . -}}
{{- $label := last . -}}
{{- range $key, $val := $map -}}
{{- $sublabel := list $label $key | join "_" | upper -}}
{{- if kindOf $val | eq "map" -}}
{{- list $val $sublabel | include "recurseFlattenMap" -}}
{{- else -}}
- name: {{ $sublabel | quote }}
value: {{ $val | quote }}
{{ end -}}
{{- end -}}
{{- end -}}
由于增加了label
参数,因此传入配置数据有点复杂,并且模板仅传递单个scope。
env: {{ list .Values.config "CONFIG" | include "recurseFlattenMap" | nindent 2 }}
带有示例值:
config:
server:
port: 3333
first: astr
other:
setting:
name: test
结果]
$ helm template .
---
# Source: so61280873/templates/config.yaml
env:
- name: "CONFIG_FIRST"
value: "astr"
- name: "CONFIG_OTHER_SETTING_NAME"
value: "test"
- name: "CONFIG_SERVER_PORT"
value: "3333"