1.1. if/else
我们要看的第一个控制结构是用于在模板中有条件地包含文本块。这就是 if/else 块。
条件的基本结构如下所示:
{{ if PIPELINE }}
# Do something
{{ else if OTHER PIPELINE }}
# Do something else
{{ else }}
# Default case
{{ end }}
[!NOTE|style:flat] 注意,我们现在讨论的是管道而不是值。其原因是要明确控制结构可以执行整个管道,而不仅仅是评估一个值。
如果值为如下情况,则管道评估为 false。
- 一个布尔型的假
False
- 一个数字零
0
- 一个空的字符串
''
- 一个
nil
(空或 null) - 一个空的集合(
map
,slice
,tuple
,dict
,array
)
在其他情况下, 条件值为 true 此管道被执行。
我们为 ConfigMap 添加一个简单的条件。如果饮料被设置为咖啡,我们将添加另一个设置:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
drink: {{ .Values.favorite.drink | default "tea" | quote }}
food: {{ .Values.favorite.food | upper | quote }}
{{ if and .Values.favorite.drink (eq .Values.favorite.drink "coffee") }}mug: true{{ end }}
注意 .Values.favorite.drink
必须已定义,否则在将它与 “coffee” 进行比较时会抛出错误。由于我们在上一个例子中注释掉了 drink:coffee
,因此输出不应该包含 mug:true
标志。但是如果我们将该行添加回 values.yaml
文件中,输出应该如下所示:
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: eyewitness-elk-configmap
data:
myvalue: "Hello World"
drink: "coffee"
food: "PIZZA"
mug: true