Helm Template range
Jump to navigation
Jump to search
External
Internal
Overview
range provides a "for each" loop. It "ranges over".
The range operator sets the scope to ".", so the simples way to access the current iteration element is with {{ . }}
Variables can also be used.
Playground
Iterating over an In-Line List
env:
{{- range list "blue" "red" "green" }}
- name: {{ . | upper | printf "COLOR_%s" }}
value: {{ . -}}
{{ end }}
The result is:
env:
- name: COLOR_BLUE
value: blue
- name: COLOR_RED
value: red
- name: COLOR_GREEN
value: green
Iterating over a .Values List
values.yaml:
colors:
- blue
- red
- green
- yellow
Template:
env:
{{- range .Values.colors }}
- name: {{ . | upper | printf "COLOR_%s" }}
value: {{ . -}}
{{ end }}
Result:
env:
- name: COLOR_BLUE
value: blue
- name: COLOR_RED
value: red
- name: COLOR_GREEN
value: green
- name: COLOR_YELLOW
value: yellow
Iterating over a Map
It uses variables.
values.yaml:
shapes:
FIRST_SHAPE: square
SECOND_SHAPE: circle
THIRD_SHAPE: triangle
Template:
env:
{{- range $k, $v := .Values.shapes }}
- name: {{ $k }}
value: {{ $v | upper -}}
{{ end }}
Result:
env:
- name: FIRST_SHAPE
value: SQUARE
- name: SECOND_SHAPE
value: CIRCLE
- name: THIRD_SHAPE
value: TRIANGLE
Iterating over a map can be used to transfer the content of a map from values.yaml in a template:
Iterating over a Complex Structure
values.yaml:
volumesAndMounts:
volumes:
- name: mount-0
hostPath:
path: /tmp
- name: mount-1
hostPath:
path: /tmp
volumesMounts:
- mountPath: /a
name: mount-0
- mountPath: /b
name: mount-1
Template:
kind: Pod
[...]
spec:
containers:
- name: ...
[...]
volumeMounts:
{{- range .Values.volumesAndMounts.volumesMounts }}
- {{- . | toYaml | nindent 10 -}}
{{- end }}
volumes:
{{- range .Values.volumesAndMounts.volumes }}
- {{ . | toYaml | nindent 6 -}}
{{- end }}