use*_*087 4 go go-templates kubernetes kubernetes-helm
有没有办法用 helm 压平字典?我想通过展平位于values.yaml 中的YAML 配置来从图表向应用程序提供环境变量。配置可以看起来像。(非实际)
config:
server:
port: 3333
other:
setting:
name: test
Run Code Online (Sandbox Code Playgroud)
并希望提供环境变量作为
- name: CONFIG_SERVER_PORT
value: 3333
- name: CONFIG_OTHER_SETTING_NAME
value: test
Run Code Online (Sandbox Code Playgroud)
我考虑过使用 Kubernetes 配置映射,但这意味着使用随机版本名称部署略有不同的应用程序实例,以便配置不会被覆盖。这个库https://github.com/jeremywohl/flatten提供了一种用分隔符压平 a 的方法map[string]interface{}
。有没有办法为使用该库的 helm 提供自定义管道或以其他方式扁平化配置?
我不知道有类似的内置功能。Sprig为 helm 模板提供了大部分有用的函数,但dict 函数只涵盖了原语。
您可以使用define
一个命名模板来完成业务并递归配置字典/映射。然后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 -}}
Run Code Online (Sandbox Code Playgroud)
这里传递config
数据有点复杂,通过 alist
然后将其分离回$map
和$label
。这是因为模板只接受单个变量作用域。
env: {{ list .Values.config "CONFIG" | include "recurseFlattenMap" | nindent 2 }}
Run Code Online (Sandbox Code Playgroud)
使用示例值:
config:
server:
port: 3333
first: astr
other:
setting:
name: test
Run Code Online (Sandbox Code Playgroud)
结果是
$ 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"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4312 次 |
最近记录: |