Astuces

De Wiki de Jordan LE NUFF
Sauter à la navigation Sauter à la recherche

Présentation

Cette page a pour objet de donner des astuces dans l'utilisation de Helm.

Utiliser une même random string

Lors de l'utilisation d'une random sting avec la fonction Helm randAlphaNum (entre autres), lorsqu'elle est utilisée plusieurs fois, elle ne rend évidemment pas la même valeur.

Même en essayent de passer par un helper, on pourrait penser que le template est généré une seule fois : ce n'est pas le cas.

Exemple avec un simple helper et son utilisation au sein de deux secrets :

{{/*
Random string for each deploy
*/}}
{{- define "randomString" -}}
{{- (randAlphaNum 8 | lower) -}}
{{- end -}}

---
apiVersion: v1
kind: Secret
metadata:
  name: secret-one-{{ include "randomString" . }}
---
apiVersion: v1
kind: Secret
metadata:
  name: secret-two-{{ include "randomString" . }}

Cela aura le rendu suivant :

---
# Source: example/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: secret-one-gaifkj98
---
# Source: example/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: secret-two-fc3zm3g4

Les noms générés, bien qu'ayant utilisé le même template, sont différents.

Pour pouvoir réutiliser la même randomString, il va falloir générer la valeur une seule fois et la stocker de façon à pouvoir la réutiliser :

{{/*
Random string for each deploy in order to reuse it in several resources
*/}}
{{- define "randomString" -}}
{{- /* Create "CustomValues" dict inside ".Release" to store various stuff. */ -}}
{{- if not (index .Release "CustomValues") -}}
{{-   $_ := set .Release "CustomValues" dict -}}
{{- end -}}
{{- /* Variabilize the key name to use in the previous created dict. */ -}}
{{- $key := "RandomString" -}}
{{- /* If $key does not yet exist in .Release.CustomValues, then... */ -}}
{{- if not (index .Release.CustomValues $key) -}}
{{- /* ... create it under the key $key. */ -}}
{{-   $_ := set .Release.CustomValues $key (randAlphaNum 8 | lower) -}}
{{- end -}}
{{- /* Retrieve previously generated value. */ -}}
{{- index .Release.CustomValues $key -}}
{{- end -}}

Ainsi, les secrets générés peuvent utiliser la même randomString :

---
# Source: example/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: secret-one-teyqjcva
---
# Source: example/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: secret-two-teyqjcva

Bonus : Cette valeur étant stockée dans l'object Release de Helm, elle peut être réutilisée dans les subcharts.