Facile certains diront mais bon il existe différentes méthode de faire. Perso je suis adepte de la méthode par export de la variable d’environnement. Mais encore il y a quelques subtilités.
Alors comme c’est mon sujet du moment, voici comment passer une commande docker en ssh :
export LC_VALEUR=$VALEUR; export LC_DATE=$DATE; ssh -t ${IP_WORKER} -o SendEnv=LC_VALEUR -o SendEnv=LC_DATE -C "echo $LC_VALEUR; CONTENEUR_ID=$(docker ps --filter 'name=$LC_VALEUR' --format '{{ .ID }}'); docker exec -i $CONTENEUR_ID mysql -u<user> -p<password> < /dumps/$LC_VALEUR/$LC_DATE.$LC_VALEUR.sql;" | tee -a ${LOGFILE}
Alors dans cette petite ligne de commande on trouve :
- le passage des variables d’environnements VALEUR et DATE grâce à “-o SendEnv=xxx”
- l’utilisation de variables locales qui nécessitent du coup d’échapper le caractère $
- on combine un docker ps avec un docker exec via ssh et ça marche bien
- et bien sûr le -C pour exécuter une commande en ssh
Mais comment faire pour logger tout cela? Pas si simple de récupérer la sortie d’erreur ou la stdout car il faut passer par la commande tee -a (option append pour ajouter la ligne dans le fichier.
N’oublions pas l’option -t pour préciser tty sinon on génère unne erreur ssh.
Vous le voyez ce petit bout de ligne verrait bien sa place dans un script de restauration dans un cluster swarm…. on reviendra sur cela un autre jour.