данные из файла значений теряются при передаче параметра в файле шаблона в hele

#kubernetes-helm #helmfile

#kubernetes-helm

Вопрос:

Вот как я передал переменную в файл шаблона

 {{ template "fluentd-config" (dict "replica" "bbcc" "pattern" "aabb"  ) }}
  

и вот файл шаблона

 {{- define "fluentd-config" -}}
image: {{ .Values.fluentd.kinesis_image }}
myname: {{ .replica }}
pattern: {{ .pattern }}
{{- end -}}
  

и когда я его запускаю, .Values.fluentd.kinesis_image становится нулевым. Пожалуйста, дайте мне знать, как это решить. Спасибо.

Ответ №1:

Внутри шаблона Go text/template специальная переменная . является параметром для шаблона. Также помните, что синтаксис .foo означает поиск поля foo в объекте . . Итак, в этом контексте параметр шаблона заменяет глобальный объект Helm; .Values пытается найти его в словаре, который вы передаете в качестве параметра.

Одним из решений этого является также передача .Values на сайте вызова (если вам нужны какие-либо другие объекты Helm верхнего уровня, вам также необходимо передать их вручную):

 {{ template "fluentd-config" (dict "replica" "bbcc" "pattern" "aabb" "Values" .Values) }}
  

Более сложный шаблон, который я использовал, — передать список в качестве параметра шаблона, а затем извлечь из него поля. Вы можете использовать функции списка Sprig для построения и деконструкции списка. (Вы могли бы сделать что-то подобное с dict помощью именованных параметров, и это может быть синтаксически проще.)

 {{- define "fluentd-config" -}}
{{- $top := index . 0 -}}
{{- $params := index . 1 -}}
image: {{ $top.Values.fluentd.kinesis_image }}
myname: {{ $params.replica }}
pattern: {{ $params.pattern }}
{{- end -}}

{{- $params := dict "replica" "bbcc" "pattern" "aabb" -}}
{{ template "fluentd-config" (list . $params) }}
  

Комментарии:

1. Хотя это идеально. Даже если это правильный ответ, мне необходимо исправить некоторые изменения. ` {{- $top := index . -}}` и {{- $params := index . "replica" -}} . в любом случае, спасибо.