Remplacer la variable d'environnement dans tous les fichiers lors de l'application de kubectl
Disons que nous avons un certain nombre de fichiers de configuration Kubernetes dans un dossier kubernetes
et 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 envsubst
comme ci-dessus est une option, mais je soupçonne qu'il serait préférable de transmettre le dossier entier à kubectl
et non des fichiers individuels)
Réponses
Vous pouvez laisser envsubst
lire le contenu de plusieurs fichiers à partir de l'entrée standard comme s'il lisait un fichier < deploy.yaml
en utilisant la <(..)
fonction de substitution de processus bash
ou en utilisant plain ol 'cat
envsubst < <(cat *.yaml) | kubectl apply -f -
ou alors
cat *.yaml | envsubst - | kubectl apply -f -
Cela marche:
for f in *.yaml; do envsubst < $f | kubectl apply -f -; done