首页 > 解决方案 > 在 Helm 模板中将 YAML 字符串转换为 dict

问题描述

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

---
PARAM_1: value1
PARAM_2: value2

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

helm install <CHART> --set-file config=/path/to/yaml/config/file

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

apiVersion: v1
kind: ConfigMap
metadata:
  ...
data:
  {{ .Values.config }}

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

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

标签: gokubernetes-helm

解决方案


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

{{ $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 -}}

我很难让{{-vs{{正确,并helm install --debug --dry-run .在这部分提供了很多帮助。

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


推荐阅读