在 Helm 模板中将 YAML 字符串转换为 dict

Lui*_*qui 1 go kubernetes-helm

我正在为一个项目创建一个图表,该项目具有一个二进制文件,该二进制文件在执行时会生成一个 YAML 格式的配置文件,如下所示:

---
PARAM_1: value1
PARAM_2: value2
Run Code Online (Sandbox Code Playgroud)

我的图表需要读取此文件并将其所有值加载到容器中的环境变量中,因此我configvalues.yaml文件中创建了一个变量,当安装图表时,我使用以下方式传递文件内容--set-file

---
PARAM_1: value1
PARAM_2: value2
Run Code Online (Sandbox Code Playgroud)

接下来我创建一个ConfigMap值为.Values.config

apiVersion: v1
kind: ConfigMap
metadata:
  ...
data:
  {{ .Values.config }}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我需要用 的值做两件事config

  • 为所有键添加预定义值的前缀(因此在上面的示例中我将MY_APP_PARAM_1作为键)
  • 确保值都是字符串,否则ConfigMap将失败

.Values.config如何将模板中的值解析为 adict以便我可以使用range循环来执行这些更改?

Lui*_*qui 5

最后我能够做这样的事情:

{{ $lines := splitList "\n" .Values.config -}}
{{- range $lines }}
{{- if not (. | trim | empty) -}}
{{- $kv := . | splitn ":" 2 -}}
{{ printf "MY_APP_%s: %s" $kv._0 ($kv._1 | trim | quote) | indent 2 }}
{{ end -}}
{{- end -}}
Run Code Online (Sandbox Code Playgroud)

我很难正确地进行{{-对比{{,但helm install --debug --dry-run .在这部分提供了很多帮助。

这有点混乱,所以我很想看看是否有人有更好的解决方案。