Helm utilise le moteur de templates Go. La syntaxe est préfixée : l’opérateur se place avant les arguments.
Conditions if / else
{{- if .Values.ingress.enabled }}
# ce bloc est rendu si ingress.enabled est "truthy"
{{- end }}
{{- if .Values.ingress.enabled }}
# avec branche else
{{- else }}
# sinon
{{- end }}Truthy vs Falsy
Valeur dans values.yaml | Résultat du if | Raison |
|---|---|---|
true ou "texte" | ✅ Passé | Valeur positive ou remplie |
123 | ✅ Passé | Nombre différent de 0 |
false, "", 0 | ❌ Ignoré | Valeurs fausses |
[] ou {} | ❌ Ignoré | Collection vide |
Opérateurs de comparaison
⚠️ Syntaxe Go :
{{ if eq .A .B }}et non{{ if .A == .B }}
| Opérateur | Signification | Exemple |
|---|---|---|
eq | Égal | {{ if eq .Values.type "nginx" }} |
ne | Différent | {{ if ne .Values.env "prod" }} |
lt / gt | Plus petit / grand | {{ if gt .Values.replicas 3 }} |
le / ge | ≤ / ≥ | {{ if le .Values.cpu 1 }} |
Opérateurs logiques
| Opérateur | Rôle |
|---|---|
and | Toutes les conditions vraies |
or | Au moins une vraie |
not | Inverse |
{{- if and .Values.ingress.enabled (or (eq .Values.env "prod") .Values.ingress.force) }}
# Rendu si ingress activé ET (env=prod OU force=true)
{{- end }}Boucles range
# Itérer sur une liste
{{- range .Values.envList }}
- name: {{ .name | quote }}
value: {{ .value | quote }}
{{- end }}⚠️ Changement de scope dans range
| Symbole | Signification |
|---|---|
. | L’élément courant de la boucle |
$ | Le contexte global (accès à .Values, .Release) |
env:
{{- range .Values.envList }}
- name: {{ .name | quote }}
value: {{ .value | default $.Values.globalDefault | quote }}
# ↑ $.Values = contexte global, .value = élément de la boucle
{{- end }}Exemple combiné — if + range + scope global
values.yaml :
appType: "web"
monitoring:
enabled: true
endpoints:
- port: 8080
- port: 9090templates/config.yaml :
{{- if and .Values.monitoring.enabled (eq .Values.appType "web") -}}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-config
data:
{{- range .Values.monitoring.endpoints }}
service-{{ .port }}: {{ printf "App %s sur port %d" $.Chart.Name .port | quote }}
{{- end }}
{{- end -}}Résultat généré :
apiVersion: v1
kind: ConfigMap
metadata:
name: ma-release-config
data:
service-8080: "App mon-chart sur port 8080"
service-9090: "App mon-chart sur port 9090"Règles à retenir
- Syntaxe préfixée : toujours
{{ if eq A B }} - Parenthèses : pour grouper
and/or {{- end }}: toutifetrangedoit se fermer- Tirets :
{{-supprime les espaces/lignes avant,-}}après
En relation avec
- Templating — Vue d’ensemble — hub templating
- Fonctions Helm — fonctions utilisées dans les conditions
- _helpers.tpl — centraliser la logique complexe