I am creating a chart for a project that has a binary that when executed generates a configuration file in YAML format that looks like this:
---
PARAM_1: value1
PARAM_2: value2
My chart needs to read this file and and load all of its values into environment variables in a container, so I created a variable config
in my values.yaml
file and when the chart is installed I am passing the file content using --set-file
:
helm install <CHART> --set-file config=/path/to/yaml/config/file
Next I create a ConfigMap
withe the value of .Values.config
:
apiVersion: v1
kind: ConfigMap
metadata:
...
data:
{{ .Values.config }}
The problem I am having is that I need to do two things with values of config
:
MY_APP_PARAM_1
as key)ConfigMap
will failHow can I parse the value of .Values.config
in my template as a dict
so that I can use a range
loop do these changes?
In the end I was able to do something like this:
{{ $lines := splitList "
" .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 -}}
I had a hard time getting the {{-
vs {{
right, and helm install --debug --dry-run .
help a lot in this part.
It's kind of messy, so I would be very interested in seeing if anyone has a better solution.