微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在三元语句中连接变量?

如何解决如何在三元语句中连接变量?

我正在尝试这样做:

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 模板库,其中包含许多有用的可组合部件。

对于“真实”的一半,你有三个组成部分;你希望他们结合在一起;但您希望删除零部分。 Sprig list 函数从任意项构造一个列表; compact 接受一个列表并返回一个没有空项的新列表(空字符串或 nil,任何 Go 零值);然后 join 将列表组合成一个字符串。您可以将其分配给一个临时变量,并在 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 $ .) }}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。