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 }}