Helm 模板中的语法 `default (dict) .Values.outer.inner` 是什么意思?

jor*_*npg 3 templates kubernetes-helm sprig-template-functions

鉴于values.yaml

outer:
  inner: 
    someKey: false
Run Code Online (Sandbox Code Playgroud)

helm 模板文件中的以下语法是什么意思?

  {{- if index (default (dict) .Values.outer.inner) "someKey" }}
  {{- .... }}
  {{- end }}
Run Code Online (Sandbox Code Playgroud)

从上下文中,我可以推断出我认为它应该做什么:检查指定的密钥是否存在于指定的位置。

default (dict)...语法从何而来?小枝?我在这些地方都找不到它的记录:

https://v2.helm.sh/docs/chart_template_guide/#template-functions-and-pipelines

https://golang.org/pkg/text/template/#hdr-Functions

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

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

它到底意味着什么?

Dav*_*aze 12

如果值中outer: {...}不包含键,此特定代码可以避免失败。inner

dict是一个创建新字典的Sprig 函数。可以使用任意(偶数)个参数来调用它;(dict)不带参数创建一个空字典。

default x yy | default x与调用Sprigdefault函数相同。

这是试图防止的重要事情是如果里面.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 }}
Run Code Online (Sandbox Code Playgroud)