range循环操作

我们知道许多编程语言都支持使用 for 循环、foreach 循环或者类似功能机制进行循环迭代,在 Helm 得模板语言中,迭代集合得方法是使用 range 运算符。

比如首先我们在 values.yaml 文件中添加一份 regions 区域列表,我们想遍历它,生成到 ConfigMap 中:

image-20211217202207305

对应的模板代码如下:

image-20211217202136784

我们仔细观察下模板中的 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

执行结果:

image-20211219202239534