#kubernetes #kubernetes-helm #haproxy-ingress
Вопрос:
Я пытаюсь добавить {{ .Release.Namespace }}
его в строку, но он анализируется буквально как просто {{ .Release.Namespace }}
, а не как само пространство имен. Я пробовал использовать кавычки ( "
) и использовать tpl
, но ничего не помогло. Я использую Helm v3.5.4.
В контексте:
config:
config-proxy: |-
_front__tls
# BEGIN::Redirect to openBalena VPN
acl is_ssl req.ssl_ver 2:3.4
use_backend {{ .Release.Namespace }}_openbalena-vpn_443 if !is_ssl
# END::Redirect to openBalena VPN
Целое values.yaml
найдено здесь, и приведенный выше фрагмент находится здесь.
Я использую диаграмму HAProxy Ingress Helm.
В некоторых частях, как вы можете видеть в values.yaml
, также используются {{ .Release.Namespace }}
, но они анализируются нормально (например, параметры TCP).
Заранее спасибо!
Комментарии:
1.
values.yaml
файлы (и их--set
друг) не подлежат интерполяции, так как я уверен, что это будет представлять угрозу безопасности. Если вы хотите.Values.config.config-proxy
, чтобы вас интерполировали, вы можете использоватьtpl
функцию helm2. Спасибо! Единственное, что при использовании
tpl
функции это должно быть сделано в файлах yaml шаблона, а не вvalues.yaml
правильном? Таким образом, единственный вариант-изменить поведение в шаблонах диаграмм, как они анализируются?3. @mdaniel не возражал бы против преобразования вашего комментария в ответ, поскольку он касается вопроса OP?
4. @BartVersluijs да, это правильно;
values.yaml
не выполняет никакого динамического содержимого (это первоначальная проблема, с которой вы столкнулись). Если вы просто пытаетесь заменить пространство имен, то использованиеtpl
может доставить больше проблем, чем того стоит. Если у вас много таких выражений gotmpl, то исправление диаграммы-единственный способ
Ответ №1:
Это должно сработать, если у вас есть config-proxy
место <chart_root_dir>/files/config-proxy
и вы используете функцию tpl, чтобы загрузить ее в свой шаблон следующим образом:
config:
{{ tpl (.Files.Glob "files/config-proxy").AsConfig . | indent 2 }}
Не уверен в том, насколько вложен ваш конфигурационный ключ в ваш шаблон, поэтому вы можете настроить уровень отступа в примере.
Комментарии:
1. Спасибо за ваш ответ! Однако могу ли я использовать это в
values.yaml
шаблонах диаграмм или мне нужно это делать в шаблонах диаграмм? Потому что я пытаюсь настроить конфигурацию диаграммы зависимостей. Когда я пытаюсь сделать это вvalues.yaml
, я получаю следующую ошибку:Error: cannot load values.yaml: error converting YAML to JSON: yaml: invalid map key: map[interface {}]interface {}{"tpl (.Files.Glob ("files/haproxy.config.yaml")).AsConfig . | nindent 6":interface {}(nil)}
2. Я не знал, что это отрывок из ваших ценностей.yml. Вы не можете использовать шаблоны там, извините. Я сам использовал это в конфигурационных картах, но это должно работать во всех yaml в папке templates
3. Ну ладно, спасибо! Тогда я попробую другое решение своей проблемы. Странно то, что
{{ .Release.Namespace }}
в другой конфигурации в моемvalues.yaml
анализируется, поэтому я не знаю, почему это не анализируется…
Ответ №2:
Изучив это еще немного и с помощью @Minato и @mdaniel (спасибо за это), я пришел к выводу, что это просто невозможно с помощью values.yaml
одного. Я создал PR в графике.
Перед пиаром значения были проанализированы следующим образом:
{{- toYaml .Values.controller.config | nindent 2 }}
Я изменил это на:
{{- tpl (toYaml .Values.controller.config) . | nindent 2 }}
И теперь он разбирает {{ .Release.Namespace }}
штраф!