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

---
PARAM_1: value1
PARAM_2: value2

我的图表需要读取此文件并将其所有值加载到容器中的环境变量中,因此我在config文件中创建了一个变量values.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的值做两件事:
  • 为所有键添加预定义的值(因此,在上面的示例中,我将MY_APP_PARAM_1作为键)
  • 确保所有值都是字符串,否则ConfigMap将失败

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

    最佳答案

    最后,我能够执行以下操作:

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

    我很难正确设置{{-{{,而helm install --debug --dry-run .在这部分中有很大帮助。

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

    关于go - 将YAML字符串转换为Helm模板中的dict,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55345358/

    10-11 22:10
    查看更多