go - 用 Helm 展平字典
问题描述
有没有办法用 helm 压平字典?我想通过展平位于 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提供了一种用分隔符展平 a 的方法map[string]interface{}
。有没有办法为使用库的 helm 提供自定义管道或其他方式来展平配置?
解决方案
我不知道有什么类似的内置功能。Sprig为 helm 模板提供了大部分有用的功能,但dict 功能只涵盖了原语。
您可以define
使用一个命名模板来执行该业务并递归配置 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 -}}
在这里传递config
数据有点复杂,通过 alist
然后将其分离回$map
and $label
。这是因为模板只接受一个变量范围。
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"
推荐阅读
- django - Django - 为什么当我尝试从数据库中获取数据时得到布尔结果?
- sql - 如何将多线串拆分为重叠的 2 点子集(2 点线串)?
- data-science - 使用 Orange Data Mining 堆叠模型
- javascript - 找到运行十次的“计数器”变量循环的总和,然后被推入“数字”数组。我尝试的每一种方式都会产生一个列表
- python - 所有字符串表都会导致 PickleException:ClassDict 构造的预期零参数(用于 numpy.dtype)
- html - 内容安全策略仍然给出错误拒绝从
- mariadb - .sql 数据库导入不起作用。(存储过程错误)
- java - Android Studio 错误“PID:12187 无法启动活动 {com.X/com.X.MainActivity}:android.view.InflateException:二进制 XML 文件行 #5”
- java - 如何在 ElasticsearchRepository 中使用可选数据和列表数据进行搜索?
- python - 此解决方案是否适用于最近对问题?