Что означает синтаксис 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 }}