Helm 中变量的使用

Usage of variables in Helm

我正在使用 Helm 图表,我想知道如何默认定义一个值。就我而言,我想定义一个未在 values.yaml 中定义的日期,并且我有以下代码:

{{- if ne .Value.persistence.home.restoreBackup.date "" }}
{{- $bkDate := .Value.persistence.home.restoreBackup.date }}
{{- else }}
{{- $bkDate := "2022-01-01" }}
{{- end }}

我想将 $bkDate 设置为一个特定的日期,如果它没有在 .Value.persistence.home.restoreBackup.date 中定义但是当我尝试打印 $bkDate 它是空的。

你知道这里出了什么问题吗?

尝试

{{- if ((.Value.persistence.home.restoreBackup).date) }}
{{- $bkDate := .Value.persistence.home.restoreBackup.date }}
{{- else }}
{{- $bkDate := "2022-01-01" }}
{{- end }}

您可以检查选项:https://helm.sh/docs/chart_template_guide/control_structures/#modifying-scope-using-with

{{ with PIPELINE }}
  # restricted scope
{{ end }}

Go text/template documentation 注释(在“变量”下):

A variable's scope extends to the "end" action of the control structure ("if", "with", or "range") in which it is declared....

这实际上意味着您不能在 if 块内定义变量并使其在块外可见。

对于您想做的事情,Helm default function 提供了一个简单的解决方法。您可以无条件地定义变量,但它的值是 Helm 值,或者如果未定义则为一些默认值。

{{- $bkDate := .Value.persistence.home.restoreBackup.date | default "2022-01-01" -}}

(请注意,对于 default,除了 empty-string 之外,还有一些内容是“错误的”,包括“未设置”、nil 和 empty-list,但实际上这对你来说无关紧要。)

如果您需要比这更复杂的逻辑,那么 ternary 函数可以满足您的需求 {{- $var := $someCondition | ternary "trueValue" "falseValue" -}} 但这会导致 hard-to-read 表达式,最好重构以避免这个。