#kubernetes-helm #helmfile
#kubernetes-helm
Вопрос:
У меня такая структура каталогов:
helm
|-->mappings
|--> foo
foo1.yaml foo2.yaml
|-->templates
mapping.yaml
values.yaml
где values.yaml
имеет значение, которое мне нужно, чтобы быть переменной из-за среды, такой как {{ .Values.data.hostname }}
и в mapping.yaml
{{- $files := .Files }}
{{- range .Values.mappings.foo }}
{{- $genericfilepath := printf "mappings/foo/%s.yaml" . }}
{{ $files.Get $genericfilepath }}
{{- end }}
В настоящее время выполняется сопоставление.файл yaml перебирает указанный каталог и загружает файл yaml, однако я не могу получить доступ к переменной Values.
Я также пытался использовать вложенную диаграмму, где значения.файл yaml будет находиться в разделе helm/mappings/foo/values.yaml, но он также не разрешает, или я не на 100% понимаю, будет ли subchart правильным решением для определения пути к файлу
Ответ №1:
На языке Go text/template
.
это специальная «контекстная» переменная, и ссылки, подобные .Files
или .Values
фактически извлекающие поля .
. Например, вы могли бы написать образец шаблона:
{{- $dot := . -}}
# These both print the same value
dot-values-foo: {{ .Values.foo }}
dollars-dot-values-foo: {{ $dot.Values.foo }}
Один из .
особых способов заключается в том, что range
оператор устанавливает .
для каждого элемента по мере итерации по коллекции. В вашем примере:
{{/* . is the top item; .Values is valid */}}
{{- range .Values.mappings.foo }}
{{/* . is one of the items in `mappings.foo` */}}
{{- end }}
{{/* . is the top item again */}}
Если мне нужно использовать .
для какой-то специальной цели, подобной этой, я обычно сохраняю исходный верхний элемент в переменной, а затем я могу ссылаться на поля в этом.
{{- $top := . }}
{{- range .Values.mappings.foo }}
{{- $genericfilepath := printf "mappings/foo/%s.yaml" . }}
{{ $top.Files.Get $genericfilepath }}
{{ index $top.Values.enabled . }}
{{- end }}