【问题标题】:What does the syntax `default (dict) .Values.outer.inner` mean in a helm template?helm 模板中的语法“default (dict) .Values.outer.inner”是什么意思?
【发布时间】:2020-05-21 12:46:18
【问题描述】:

给定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/#template-functions-and-pipelines

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

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

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

它的真正含义是什么?

【问题讨论】:

    标签: templates kubernetes-helm sprig-template-functions


    【解决方案1】:

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

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

    default x yy | default x 相同,调用Sprig default function

    这要防止的重要事情是.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 }}
    

    【讨论】:

      猜你喜欢
      • 2021-02-03
      • 2013-11-02
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 2022-09-23
      • 2022-11-24
      相关资源
      最近更新 更多