我们知道许多编程语言都支持使用 for
循环、foreach
循环或者类似功能机制进行循环迭代,在 Helm 得模板语言中,迭代集合得方法是使用 range
运算符。
比如首先我们在 values.yaml
文件中添加一份 regions 区域列表,我们想遍历它,生成到 ConfigMap 中:
对应的模板代码如下:
我们仔细观察下模板中的 regions:
列表,range
函数将遍历 Values.regions
列表,我们看到里面使用了一个 .
,类似于上面我们用 with
设置范围一样,运算符也是这样的,每次循环,.
都会被设置为当前的 region
,也就是说第一次设置为ohio
,第二次迭代设置为newyork
,依次类推…
我们可以直接传递 .
这个值到管道上,所以我们这里 {{ . | quote }}
就相当于发送.
给 quote
函数。
有时候,在模板中快速创建一个列表,然后遍历该列表很有用,Helm 模板具有简化该功能的函数:tuple
。元组是固定大小的列表集合,但是具有任意数据类型,下面是元组的大概使用方法:
sizes: |-
{{- range tuple "small" "medium" "large" }}
- {{ . }}
{{- end }}
上面的模板最终会被渲染成如下的 YAML:
sizes: |-
- small
- medium
- large
configmap.yaml
:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-regioninfo
data:
regions:
{{- range .Values.regions }}
- {{ . | quote}}
{{- end }}
values.yaml
:
regions:
- ohio
- newyork
- ontario
- london
- singapore
- mumbai
执行结果: