Вы можете использовать helm template
с такими же флагами -f
и --set
, чтобы увидеть, каков вывод вашего шаблона. Это ключ к устранению проблем такого рода, и вы можете попробовать это, прежде чем продолжить, чтобы понять, что идет не так, и если вы это исправили.
Файлы YAML, которые использует Kubernetes, невероятно чувствительны к отступам. Текстовый / шаблонный движок Helm Go не особенно осведомлен о структуре YAML. Вероятно, вы увидите, что echo
во второй строке скрипта вообще не имеет отступов, что нарушает правила отступов YAML.
На это есть два ответа:
Используйте шаблонную функцию indent для отступа всего тела того, что вы вводите. Обратите внимание, что это включает самую первую строку, поэтому вам не нужно делать отступ в строке в шаблоне YAML.
data:
{{ range $key, $val:= .Values.app.server }}
{{ $key }}: |
{{ $val | indent 4 }}
{{ end }}
Шлем имеет несколько недокументированных расширений . В частности, вы можете использовать toJson
для преобразования строки в строку JSON, включая такие детали, как экранирование строк новой строки. YAML 1.2 предназначен для расширения JSON, поэтому он должен работать:
data:
{{ range $key, $val:= .Values.app.server }}
{{ $key }}: {{ $val | toJson }}
{{ end }}
В этом отношении вы можете использовать toYaml
, чтобы заставить Хелма сделать тяжелую работу за вас:
data:
{{ .Values.app.server | toYaml | indent 2 }}
Проверьте с помощью helm template
, чтобы убедиться, что они выводят то, что вы ожидаете. Первый вариант создаст более читаемый YAML ConfigMap; второй более лаконичный шаблон; но оба должны быть эквивалентны.