Что означает синтаксис default (dict) .Values.outer.inner в шаблоне Helm?

Данный values.yaml:

outer:
  inner: 
    someKey: false

Что означает следующий синтаксис в файле шаблона helm?

  {{- if index (default (dict) .Values.outer.inner) "someKey" }}
  {{- .... }}
  {{- end }}

Из контекста я могу сделать вывод, что, по моему мнению, он должен делать: проверять, существует ли указанный ключ в указанном месте.

Но причем тут default (dict)...синтаксис откуда? Веточка? Я не могу найти это задокументировано ни в одном из этих мест:

https://v2.helm.sh/docs/chart_template_guide/

https://golang.org/pkg/text/template/

http://masterminds.github.io/sprig/

http://masterminds.github.io/sprig/defaults.html

А что это на самом деле означает?

1 ответ

Решение

Этот конкретный код позволяет избежать сбоя, если значения outer: {...} не содержит inner ключ внутри него.

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

default x y такой же как y | default xи называет Веточкуdefaultфункция.

Важно защитить от этого: .Values.outer не имеет innerключ внутри него. Если это случилось,.Values.outer.inner было бы nil, а также .Values.outer.inner.someKeyвыдаст ошибку; тоdefault dict блок заменяет nil с пустым словарем, который можно использовать с index и аналогичный код шаблона.

Я часто пишу похожие блоки шаблонов по одному слою за раз:

{{- $outer := .Values.outer | default dict -}}
{{- $inner := $outer.inner | default dict -}}
{{- if $inner.someKey }}
...
{{- end }}
Другие вопросы по тегам