Helm 将单个字符串传递给模板

Helm pass single string to a template

有多个关于使用字典将多个变量传递给 Helm 中的模板的 Whosebug 答案。

但是,我想将单个变量传递给模板。例如,我想定义如下模板,接收输入(准确地说是一个字符串)。

{{- define "blahblah" $var }}
  {{- if .Values.nameOverride }}
  name: {{ .Values.nameOverride }}-$var
  {{- else }}
  name: $var
  {{- end }}
{{- end }}

因此,像下面这样写,我希望结果是 name: myname-whatevername:whatever(假设 .Values.nameOverride 被定义为 'myname')

{{- include "blahblah" "whatever" }}

如何让 helm 知道哪个是模板的输入变量?谢谢!

一个Gotext/template模板只接受一个参数,它在模板内部的值是特殊变量.。所以你可以,例如:

{{- define "name" -}}
name: {{ . }}
{{ end -}}
{{- template "name" "foo" -}}
name: foo

或者,你可以传入 Helm top-level 对象

{{- define "name-override" -}}
name: {{ .Values.nameOverride }}
{{ end -}}
{{- template "name-override" . -}}

请注意,在这种情况下,在 defined 模板中,我们指的是 .Values 字段,当我们通过 [=19= 调用它时],我们明确传递 . 作为参数。不过,同样,您只能获得一个参数。

这里你需要两个参数:Helm根值加上你要传入的附加值。我倾向于用一个list来打包两个参数合并为一个值:

{{- define "blahblah" -}}
{{- $top := index . 0 -}}
{{- $var := index . 1 -}}
{{- if $top.Values.nameOverride -}}
name: {{- $top.Values.nameOverride -}}-{{ $var }}
{{ else -}}
name: {{ $var }}
{{ end -}}
{{- end -}}

{{ include "blahblah" (list . "whatever") | indent 2 }}

所以模板的参数,当你调用它的时候,是一个列表; index . 0. 中的第一项,或 top-level Helm 值,index . 1 是第二项。相反,由于 . 是一个列表,您需要使用保存该值的变量名称 $top 来限定实际上属于 top-level Helm 值一部分的值。