k8s的包管理工具helm3--流程控制语句(3)
helm3中的流程控制语句主要包括条件判断语句(if else)、作用域控制语句(with)、循环控制语句(range)。
一、if/else语句
if/else语句用于条件判断,通过不同的条件设置完成不同的功能。
1. 语法
{{- if 条件1 }}
....
{{- else if 条件2 }}
....
{{- else }}
....
{{- end }}
2. 示例
创建values.yaml文件
[root@k8s-master m1]# cat chart5/values.yaml 
replics: 3
container_name: nginx
container_port: 80
ingress:enabled: true
创建templates/configmap.yaml文件
[root@k8s-master m1]# cat chart5/templates/configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Release.Name }}
data:{{- if .Values.ingress.enabled }}ingress: "正在配置ingress..."replicCount: {{ .Values.replics }}containerName: {{ .Values.container_name }}containerPort: {{ .Values.container_port }}{{- else }}ingress: "不配置ingress..."{{- end }}部署chart
# Source: chart5/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: chart5
data:ingress: "正在配置ingress..."replicCount: 3containerName: nginxcontainerPort: 80二、with语句
with语句用来改变当前的作用域,避免重复书写冗余的前缀
1. 语法
{{- with 嵌套对象 }}  # 比如.Values.config就是嵌套对象
...
{{- end }}
在整个with语句的范围内,所有的嵌套对象都不需要再加相同的前缀。直接用.表示了之前的.Values.config对象。
2. 示例
创建values.yaml文件
[root@k8s-master m1]# cat chart5/values.yaml 
config:database:username: "user01"password: "123456"port: 3306
创建templates/configmap.yaml文件
[root@k8s-master m1]# cat chart5/templates/configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Release.Name }}
data:{{- with .Values.config.database }}username: {{ .username }}   # .表示.Values.config.database对象password: {{ .password | b64enc}}port: {{ .port }}{{- end }}部署chart
# Source: chart5/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: chart5
data:username: user01password: MTIzNDU2port: 3306三、range语句
range语句循环遍历集合并输出,range遍历对象时,在range语句的作用域内,由于指定了对象,后续以.表示
1.语法
{{- range 要遍历的对象 }}
....
{{-end }}
2.示例
创建一个对象
[root@master m1]# cat chart1/values.yaml 
# 定义一个数组
people:- sex- age- height- hobby
创建一个yaml文件
apiVersion: v1
kind: ConfigMap
metadata:name: {{ .Release.Name }}
data:people: |-     # |- 表示后续为一个多行的字符串{{- range .Values.people }}- {{ . }}     # .表示values.yaml文件中的people对象,循环遍历people对象的内容,即sex,age...{{- end }}{{ range (list "aa" "bb" "cc") }}- {{ . }}      # .指列表,aa,bb,cc{{- end }}
~               
运行查看结果
# Source: chart1/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: chart1
data:people: |-- sex- age- height- hobby- aa- bb- cc
