#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" -}}
. в любом случае, спасибо.