我正在尝试这样做:
name: {{ $value.enable | ternary $value.prefix $.Release.Namespace $value.suffix $value.override }}
但这种语法是错误的。我找不到任何例子来说明如何将这些变量连接在一起:$value.prefix $.Release.Namespace $value.suffix
编辑
我想我可以使用这样的打印:
name: {{ true | ternary (print $value.prefix $.Release.Namespace $value.suffix) $value.fullnameOverride }}
但是,如果您不指定其中一个字段,它将打印<nil>
,而不是不打印任何我想要的内容。
Helm包含Sprig模板库,其中包含许多有用的可组合部件。
对于";真";一半,你有三个组成部分;你希望他们结合在一起;但你不希望任何部分被移除。Spriglist
函数从任意项目构建一个列表;compact
获取一个列表并返回一个没有空项的新列表(空字符串或nil,任何Go零值(;然后CCD_ 5将该列表组合成单个字符串。您可以将其分配给一个临时变量,并在ternary
调用中使用:
{{- $qualifiedName := list $value.prefix $.Release.Namespace $value.suffix | compact | join "" }}
name: {{ $value.enable | ternary $qualifiedName $value.fullnameOverride }}
我发现ternary
语法有点难以阅读(即使它与C风格的expr ? t : f
语法匹配(,在这种情况下也没有必要。一个详细说明这一点的助手模板以后可能更容易理解。
{{-/* Generate the name of the thing. Call with a list containing
the top-level Helm object and an item from the values file.
(Indented for readability, the template engine removes all of
the whitespace.) */-}}
{{- define "name" -}}
{{- $top := index . 0 -}}
{{- $value := index . 1 -}}
{{- if $value.enable -}}
{{- with $value.prefix -}}{{- . -}}{{- end -}}
{{- with $top.Release.Namespace -}}{{- . -}}{{- end -}}
{{- with $value.suffix -}}{{- . -}}{{- end -}}
{{- else -}}
{{- $value.fullnameOverride -}}
{{- end -}}
{{- end -}}
name: {{ include "name" (list $ .) }}