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

标签 kubernetes-helm go-templates

我正在尝试这样做:

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 将列表组合成一个字符串。您可以将其分配给临时变量,并在三元调用中使用它:

{{- $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 $ .) }}

关于kubernetes-helm - 如何在三元语句中连接变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66906489/

相关文章:

kubernetes-helm - helm get 获取发布图表的语法

loops - 在 GO 模板中使用 range over struct

kubernetes - 如何在 kube-prometheus-stack helm chart 中覆盖 alertmanager 配置

apache-spark - 如何使用 Helm 图表在K8S上产生 Spark

templates - 告诉 Golang 先执行哪个模板

templates - 防止模板中转义正斜杠

go - 在模板中访问数组中的任意元素

json - kubectl 应用错误 : error converting YAML to JSON

kubernetes - 从集群内运行 helm3 客户端

kubernetes - Helm : how do I Install the latest helm chart from repo