Что такое и какие варианты использования отмечены точкой "." в картах управления? - PullRequest
2 голосов
/ 19 июня 2020

Я сейчас просматриваю документацию по helm, и было по крайней мере 3 различных использования точки (.), Есть ли какое-то конкретное определение c для нее? и есть ли у него что-то общее с использованием bash (фактическая папка / файлы)?

в некоторых случаях в документации

Это распечатывает принятые файлы в диапазоне, указанном ранее?

  {{- $files := .Files }}
  {{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
  {{ . }}: |-
    {{ $files.Get . }}
  {{- end }}

Это говорит "mychart.app" использовать файлы в текущей папке (bash -подобное поведение)

{{ include "mychart.app" . | indent 4 }}

и это, я полагаю, принимает значения из вся папка ??? я думаю, это неверно, так как не работает (это было сделано другим сотрудником тогда, и я должен это исправить)

{{- define "read.select-annot" -}}
{{- range $key, $value := . }}
{{ $key }}: {{ $value }}
{{- end }}
{{- end }}

спасибо за помощь

1 Ответ

8 голосов
/ 19 июня 2020

Как правило, . в шаблонах Helm не имеет ничего общего с файлами или каталогами.

Язык шаблонов Helm использует систему Go text / template . Существует несколько различных способов появления символа точки.

Во-первых, . может быть символом в строке:

{{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
{{/*             ^^^^^^^^^^^^
       this is a literal string "config1.toml"             */}}
...
{{- end }}

Во-вторых, . может быть оператором поиска. В вашем вопросе нет примеров solid, но типичное использование - поиск значений. Если в вашем values.yaml файле есть

root:
  key: value

, вы можете развернуть

{{ .Values.root.key }}

, а . перед root и key перемещается на один уровень вниз в структуре словаря. .

Третье использование и, возможно, то, которое вас сбивает с толку, заключается в том, что . сам по себе является переменной.

{{ . }}

Вы можете выполнять поиск по нему в полях, и вы есть несколько примеров этого: .Files совпадает с index . "Files" и ищет поле «Файлы» на объекте ..

Вы используете . как переменную в нескольких местах:

{{- $files := .Files }}        {{/* Get "Files" from . */}}
{{ . }}                        {{/* Write . as a value */}}
{{ include "mychart.app" . }}  {{/* Pass . as the template parameter */}}

. сложно в том, что он имеет некоторое контекстное значение:

  • На верхнем уровне Helm инициализирует . как объект с ключами Files, Release, Values и Chart.
  • В шаблоне define d . является параметром шаблона. (Поэтому, когда вы include или template, вам нужно передать . в качестве этого параметра.)
  • В range l oop, . - это текущий элемент, который повторяется. on.
  • В блоке with, . является совпадающим элементом, если он существует.

В частности, взаимодействие с range может быть сложным. Давайте посмотрим на упрощенную версию вашего l oop:

# {{ . }}
{{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
- {{ . }}
{{- end }}

За пределами range l oop, ., вероятно, является объектом Helm верхнего уровня. Но внутри range l oop, . находится имя файла (каждое значение из tuple по очереди). Вот где вам нужно сохранить значения из . в локальные переменные:

{{/* We're about to invalidate ., so save .Files into a variable. */}}
{{- $files := .Files }}

{{- range tuple "config1.toml" "config2.toml" "config3.toml" }}
{{/* This . is the filename from the "tuple" call */}}
{{ . }}: |-
  {{/* Call .Get, from the saved $files, passing the filename .
       as the parameter */}}
  {{ $files.Get . }}
{{- end }}
...