Проанализируйте пространство имен в файл значений

#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 функцию helm

2. Спасибо! Единственное, что при использовании 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 }} штраф!