Helm 控制函数
(在模板语言中称为 "actions")提供给你和模板作者控制模板迭代流的能力。 Helm 的模板语言提供了以下控制结构:
if
/else
,用来创建条件语句with
,用来指定范围range
,提供 "for each" 类型的循环
除了这些之外,还提供了一些声明和使用命名模板的关键字:
define
在模板中声明一个新的命名模板template
导入一个命名模板block
声明一种特殊的可填充的模板块
1、If/Else
If/Else 语句中的条件在模板中称为管道,基本结构如下:
{{ if PIPELINE }}
# Do something
{{ else if OTHER PIPELINE }}
# Do something else
{{ else }}
# Default case
{{ end }}
如果是以下值时,管道会被设置为 false,否则为 true:
布尔 false
数字 0
空字符串
nil
空集合(
map
,slice
,tuple
,dict
,array
)
实例:
$ cat > mychart/values.yaml <<EOF
grayscale: "open" # open or close
EOF
$ cat > mychart/templates/configmap.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-cm
namespace: {{ .Release.Namespace }}
data:
{{- if eq .Values.grayscale "open" }}
environment: "Restricted"
{{- else }}
environment: "Prod"
{{- end }}
EOF
$ helm install mychart ./mychart/ --debug --dry-run
......
......
......
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mychart-cm
namespace: default
data:
environment: "Restricted"
2、With
With 语句主要是用来控制变量的范围,也就是修改查找变量的作用域,基本结构如下:
{{ with PIPELINE }}
# restricted scope
{{ end }}
实例:
$ cat > mychart/values.yaml <<EOF
support:
author:
name: "JokerZhang"
mail: "jokerzhang@outlook.com"
EOF
$ cat > mychart/templates/configmap.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-cm
namespace: {{ .Release.Namespace }}
data:
{{- with .Values.support }}
author_name: {{ .author.name }}
author_mail: {{ .author.mail }}
{{- end }}
EOF
$ helm install mychart ./mychart/ --debug --dry-run
......
......
......
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mychart-cm
namespace: default
data:
author_name: JokerZhang
author_mail: jokerzhang@outlook.com
注意:我们需要注意对象的作用域,使用 $ 符号从父作用域中访问对象而不是直接获取。当模板开始执行后 $ 会被映射到根作用域,且执行过程中不会更改。
3、Range
Range 语句用于提供循环遍历集合输出的功能,基本结构如下:
{{- range 要遍历的对象 }}
# do something
{{- end }}
实例:
$ cat > mychart/values.yaml <<EOF
depends:
- jdk
- mysql
- npm
EOF
$ cat > mychart/templates/configmap.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-cm
namespace: {{ .Release.Namespace }}
data:
preconditions: |-
{{- range .Values.depends }}
- {{ . | title | quote }}
{{- end }}
EOF
$ helm install mychart ./mychart/ --debug --dry-run
......
......
......
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mychart-cm
namespace: default
data:
preconditions: |-
- "Jdk"
- "Mysql"
- "Npm"
注意: |-