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

Pil*_*hae 2 go-templates kubernetes-helm helm3

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

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

{{- define "blahblah" $var }}
  {{- if .Values.nameOverride }}
  name: {{ .Values.nameOverride }}-$var
  {{- else }}
  name: $var
  {{- end }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)

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

{{- include "blahblah" "whatever" }}
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*aze 7

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

{{- define "name" -}}
name: {{ . }}
{{ end -}}
{{- template "name" "foo" -}}
Run Code Online (Sandbox Code Playgroud)
name: foo
Run Code Online (Sandbox Code Playgroud)

或者,您可以传入 Helm 顶级对象

{{- define "name-override" -}}
name: {{ .Values.nameOverride }}
{{ end -}}
{{- template "name-override" . -}}
Run Code Online (Sandbox Code Playgroud)

请注意,在这种情况下,在defined 模板内,我们引用的是Values的字段.,并且当我们调用它时 via ,我们显式地作为参数template传递。.但同样,您只能获得一个参数。

这里您需要两个参数:Helm 根值加上您尝试传入的附加值。我倾向于使用 alist将这两个参数打包为一个值:

{{- 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 }}
Run Code Online (Sandbox Code Playgroud)

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