当值为空字符串时,Helm 使用默认字符串

Helm use default string when values is empty string

在使用Helm3时,我想在设置.Values.nameOverride时将某个名称设置为(.Values.nameOverride)-init,在未设置.Values.nameOverride时将名称设置为“init”(只是定义为空字符串)。但是,通过使用下面的表达式,从不使用默认值。

name: {{ printf "%s-init" .Values.nameOverride | default "init" }}

我可以通过使用更多行来实现我想要实现的目标。

  {{- if .Values.nameOverride }}
  name: {{ .Values.nameOverride }}-init
  {{- else }}
  name: "init"
  {{- end }}

是否可以通过更简单的方式实现目标?我必须在多个地方使用这个表达式,所以我想缩短表达式。

谢谢!

Go text/template with 运算符在这里很有用。与 if 一样,它会测试该值是否为“truthy”;如果是,那么在块内,它将特殊变量 . 绑定到它匹配的值。所以在这里你可以写:

name: {{ with .Values.nameOverride }}{{ . }}-{{ end }}init

将其分成更多行:

name: {{/* comment */}}
{{- with .Values.nameOverride -}} {{-/* if the value is defined */-}}
  {{- . -}}                       {{-/* emit it */-}}
  -                               {{-/* and a hyphen */-}}
{{- end -}}
init                              {{-/* and either way, the string "init" */}}