Remplacer la variable d'environnement dans tous les fichiers lors de l'application de kubectl

Jan 14 2021

Disons que nous avons un certain nombre de fichiers de configuration Kubernetes dans un dossier kuberneteset que nous voulons tous les appliquer:

kubectl apply -f kubernetes -n MyNamespace

Certains de ces fichiers contiennent des variables d'environnement qui doivent être substitué premier (pas templating en Kubernetes). Par exemple, plusieurs des yamls de déploiement contiennent quelque chose comme:

image: myregistry.com/myrepo:$TAG

Pour un seul fichier yaml, cela peut être fait par exemple en utilisant envsubst comme ceci:

envsubst < deploy.yml | kubectl apply -f -

Quelle est la meilleure façon de faire ces substitutions pour tous les fichiers yaml?

(Faire une boucle sur les fichiers du dossier et appeler envsubstcomme ci-dessus est une option, mais je soupçonne qu'il serait préférable de transmettre le dossier entier à kubectlet non des fichiers individuels)

Réponses

5 Inian Jan 13 2021 at 23:26

Vous pouvez laisser envsubstlire le contenu de plusieurs fichiers à partir de l'entrée standard comme s'il lisait un fichier < deploy.yamlen utilisant la <(..)fonction de substitution de processus bashou en utilisant plain ol 'cat

envsubst < <(cat *.yaml) | kubectl apply -f -

ou alors

cat *.yaml | envsubst - | kubectl apply -f -
2 Max Jan 14 2021 at 07:39

Cela marche:

for f in *.yaml; do envsubst < $f | kubectl apply -f -; done