Преобразовать строку YAML в dict в шаблоне Helm - PullRequest
1 голос
/ 25 марта 2019

Я создаю диаграмму для проекта, в котором есть двоичный файл, который при выполнении создает файл конфигурации в формате 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 для внесения этих изменений?

1 Ответ

2 голосов
/ 26 марта 2019

В конце концов я смог сделать что-то вроде этого:

{{ $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 . очень помогло в этой части..

Это немного грязно, поэтому мне было бы очень интересно узнать, есть ли у кого-нибудь лучшее решение.

...