控制流程
模板函数和管道
是通过转换信息并将其插入到YAML
文件中的强大方法。但有时候需要添加一些比插入字符串更复杂一些的模板逻辑。这就需要使用到模板语言中提供的控制结构了。
控制流程为我们提供了控制模板生成流程的一种能力,Helm 的模板语言提供了以下几种流程控制:
if/else
条件块with
指定范围range
循环块
除此之外,它还提供了一些声明和使用命名模板段的操作:
define
在模板中声明一个新的命名模板template
导入一个命名模板block
声明了一种特殊的可填写的模板区域
关于命名模板
的相关知识点,我们会在后面的课程中和大家接触到,这里我们暂时和大家介绍if/else
、with
、range
这3中控制流程的用法。
if/else 条件
if/else
块是用于在模板中有条件地包含文本块的方法,条件块的基本结构如下:
1 | {{ if PIPELINE }} |
当然要使用条件块就得判断条件是否为真,如果值为下面的几种情况,则管道的结果为 false:
- 一个布尔类型的
假
- 一个数字
零
- 一个
空
的字符串 - 一个
nil
(空或null
) - 一个空的集合(
map
、slice
、tuple
、dict
、array
)
除了上面的这些情况外,其他所有条件都为真
。
例子
1 | [root@master101 sy]# cat mychart/templates/configmap.yaml |
在底部加了if条件,如果等于django,就加一个web:true。
1 | [root@master101 sy]# cat mychart/templates/configmap.yaml |
现在把values.yaml值替换下:
1 | [root@master101 sy]# cat mychart/values.yaml |
1 | [root@master101 sy]# helm install --dry-run --debug mychart/ |
发现,if语句判断出来了
空格
例子1
先改回django
1 | [root@master101 sy]# cat mychart/values.yaml |
加空格,换行
1 | [root@master101 sy]# cat mychart/templates/configmap.yaml |
debug看一下:
1 | [root@master101 sy]# helm install --dry-run --debug mychart/ |
注意:会发现有空格出来
例子2
1 | 可以通过使用在模板标识{{后面添加破折号和空格{{-来表示将空白左移,而在}}前面添加一个空格和破折号-}}表示应该删除右边的空格,另外需要注意的是换行符也是空格! |
1 | [root@master101 sy]# cat mychart/templates/configmap.yaml |
1 | [root@master101 sy]# helm install --dry-run --debug mychart/ |
with
with
语句就可以来控制变量的作用域范围
1 | {{ with PIPELINE }} |
例子
###
1 | [root@master101 sy]# cat mychart/templates/configmap.yaml |
1 | [root@master101 sy]# helm install --dry-run --debug mychart/ |
有with的.Values.course ,之后的就不用加了
range循环
例子
1 | [root@master101 sy]# cat mychart/values.yaml |
1 | [root@master101 sy]# cat mychart/templates/configmap.yaml |
1 | [root@master101 sy]# helm install --dry-run --debug mychart/ |
我们可以看到courselist
按照我们的要求循环出来了。除了 list 或者 tuple,range 还可以用于遍历具有键和值的集合(如map 或 dict)。