https://helm.sh/docs/chart_template_guide/control_structures/
Helm的模板语言提供了以下控制结构:

  • if/else, 用来创建条件语句
  • with, 用来指定范围
  • range, 提供"for each"类型的循环

除了这些之外,还提供了一些声明和使用命名模板的关键字:

  • define 在模板中声明一个新的命名模板
  • template 导入一个命名模板
  • block 声明一种特殊的可填充的模板块

If/Else

{{ if PIPELINE }}
  # Do something
{{ else if OTHER PIPELINE }}
  # Do something else
{{ else }}
  # Default case
{{ end }}

修改使用with的范围

这个用来控制变量范围。

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

例子:
如果在 Values.yaml 文件中有以下值:

image:
  repository: nginx
  pullPolicy: IfNotPresent
  tag: "1.15.12"

如果要引用 image 中的 repository 值 tag,则需要写成:

{{ .Values.image.repository }}
{{ .Values.image.tag }}

使用with修改范围后:

{{ with .Values.image }}
  {{ repository }}
  {{ tag }}
{{ end }}

如果在with 里面需要引用其他非.Values.image里的 values,可以使用$进行引用,比如:

{{ with .Values.image }}
  {{ repository }}
  {{ tag }}
  {{ $.Values.pizzaToppings }}
{{ end }}

使用range操作循环

在Helm的模板语言中,在一个集合中迭代的方式是使用range操作符。
假如 values.yaml 文件中有个以下列表,写明需要创建 deployment 的名称:

selfSlices:
  - deployment1
  - deployment2

在 template/deployment.yaml 中可以使用range来循环创建,通过{{ . }}来引用:

{{ range .Values.selfSlices }}

{{ . }}

{{ end }}

通过 map 进行循环:
假如 values.yaml 文件中有个以下 Labels:

selfLabels:
  a: c
  b: d

通过range将 selfLabels 中的 key 赋值为$key,value 赋值为 $value:

{{ range $key,$value := .Values.selfLabels }}

{{ $key }}: {{ $value }}

{{ end }}