Как использовать значение шаблона в функции диапазона в Helm - PullRequest
0 голосов
/ 15 февраля 2020

Я использую рулевую диаграмму для Prometheus и планирую предоставить различный набор файлов менеджера оповещений для разных сред. Извлеченная часть существующей диаграммы:

{{- $root := . -}}
{{- range $key, $value := .Values.alertmanagerFiles }}
  {{ $key }}: |
{{ toYaml $value | default "{}" | indent 4 }}
{{- end -}}

Чтобы переопределить эту часть, у меня есть определенная переменная шаблона

{{- define "prometheus.alertmanagerFiles" -}}
{{- if .Values.alertmanagerFiles.custom -}}
    {{- printf "alertmanagerFiles_%s" .Values.cluster.env }}
{{- else -}}
    {{- default "default" .Values.alertmanagerFiles -}}
{{- end -}}
{{- end -}}

С этим у меня есть новая переменная для среды - пример: alertmanagerFiles_dev для разработки, но я ничего не понимаю из-за недостатка знаний, я не знаю, как использовать шаблонизированную переменную в функции диапазона.

Пробовал, но не работает:

{{- $root := . -}}
{{- range $key, $value := template "prometheus.alertmanagerFiles" . }}
  {{ $key }}: |
{{ toYaml $value | default "{}" | indent 4 }}
{{- end -}}

любая помощь, подсказка или направление помогут мне здесь.

1 Ответ

0 голосов
/ 18 февраля 2020

Вам не нужно настраивать график для этого. Вместо этого вы можете предоставить различный набор значений для каждой среды, когда вы helm install или helm upgrade диаграммы

helm upgrade prometheus stable/prometheus --install -f values.dev.yaml

Как правило, это гораздо проще и предпочтительнее, чем помещать слой косвенности в код шаблона.

Если вы хотите использовать слой косвенности, как вы показали, вы ограничены возможными типами возврата шаблонов Go. Стандартная директива Go template записывает только выходные данные и никогда ничего не возвращает. У Helm есть include функция , которая вместо этого возвращает содержимое визуализированного шаблона в виде строки. Это единственное, что можно вернуть из шаблона.

В вашем случае шаблон prometheus.alertmanagerFiles создает строку, так что вы можете include получить ее, чтобы получить имя значения верхнего уровня, которое вы хочу включить. Затем вы можете использовать стандартную функцию Go template index, чтобы извлечь этот элемент из .Values. Это выглядит примерно так:

{{- $fileKey := include "prometheus.alertmanagerFiles" . }}
{{- range $key, $value := index .Values $fileKey }}
...
{{- end -}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...