перебирать файлы диаграммы управления и вводить значения

#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 }}