Effectuer une opération sur l'ensemble des machines
Motivation
On a parfois besoin d’effectuer la même opération sur toutes les machines : installer un paquet, le configurer, redémarrer un service, etc.
Se connecter un à un aux machines est assez pénible, fastidieux, et plus propice aux erreurs. De plus, on utilise pas Ansible, qui permettrait de résoudre le problème assez facilement.
Je te propose ici une solution simple pour automatiser la connexion à toutes les machines, et taper une seule fois les commandes.
Note:
Il existe plein d’autres solutions : pssh
, cssh
, etc. Libre à toi de choisir celle qui te convient !
Terminator et layout personnalisé
Terminator est un terminal virtuel qui a pour particularité de pouvoir scinder la fenêtre en plusieurs sous-terminaux, de créer des groupes de terminaux où les commandes sont répliquées, et est très personnalisable.
En général, il suffit d’installer le paquet terminator
sur ta machine.
A Savoir:
La configuration se trouve dans le fichier ~/.config/terminator/config
, mais est aussi accessible via un clic droit → préférences dans le terminal.
Configurer le layout
Ouvre un terminal, puis utilise une combinaison des raccourcis Ctrl+Shift+o
et Ctrl+Shift+e
pour ouvrir des sous terminaux, jusqu’à ce que la disposition te convienne et qu’il y en ait aucun que de machines (à ce jour, 8 : alice
, bob
, caribou
, pica01
, pica02
, pica01-test
, monitoring
, media
).
Attention:
C’est rare de devoir toucher simultanément aux machines physiques et aux machines virtuelles.
Exemple :
Ensuite, on se rend dans les paramètre de Layout
, et on en rajoute un nouveau. Terminator va automatiquement récupérer la configuration des terminaux ouverts, et l’intégrer dans le nouveau profil, il n’y a rien à faire.
Attention:
Si d’autres instances de Terminator sont ouvertes, elles seront également prises en compte, il vaut mieux les fermer.
Exemple :
On renomme le profil (exemple picasoft
), et on appuie sur save
.
On retrouve bien les 7 terminaux. Pour chacun d’entre eux, on va indiquer la commande à exécuter, en l’occurrence une connexion SSH sur les machines. Exemple :
Attention:
Ne pas cliquer sur save
!
« If you use the Save button in the Layouts after spending time setting the items below, you will lose these stored values (custom command, working directory). First get the layout right, then edit these within the Layouts tab of the Preferences Window. You do not need to use the Save button to keep these settings. There is potential to improve this behaviour, as it is a little unintuitive. » Source
On change la machine pour chaque terminal, puis on ferme.
Pour charger le layout, il y a deux solutions :
- Lancer
terminator
, clique droit → Layout → picasoft - Lancer
terminator -l picasoft
Attention:
Un Ctrl+C fermera tout simplement le terminal, car la commande ssh
est alors terminée.
A Savoir:
Si tu versionnes tes fichiers de configuration, n’hésite pas à rajouter celui de Terminator, ainsi tu profiteras de ce layout sur toutes tes machines
Envoyer des commandes à tous les terminaux
Normalement, à ce stade, on te demande de rentrer la passphrase de ta clé SSH. Pour éviter de la rentrer 7 fois, on va utiliser une fonctionnalité très pratique de Terminator : le broadcast. Chaque lettre est reproduite sur l’ensemble des terminaux. Pour l’activer, clique sur l’icône de terminaux dans la barre de titre d’un des terminaux, puis choisis Broadcast all
.
Note:
Il est aussi possible de mettre tous les terminaux dans un groupe (Group All in Tab
) puis de broadcaster pour ce groupe uniquement. Sinon, le broadcast sera effectif dans tous les autres terminaux ouverts, même dans une autre fenêtre.
Maintenant, tu peux rentrer ta passphrase et tester la puissance de cette configuration en lançant une commande sur toutes les machines, par exemple hostname
:
Un grand pouvoir...
Important:
C’est très dangereux de lancer des commandes sur l’ensemble des machines de production, simultanément. Assure-toi d’avoir bien vérifié et de suivre les recommendations qui suivent.
- Assure toi que toutes les machines tournent sur le même OS, c’est plus sûr. Ici, tout est en Debian 10, ça le fait.
- Utilise tmux pour éviter qu’une interruption de la connexion SSH ne vienne tout casser
- Regarde les logs de chaque commande tapée pour l’ensemble des fenêtres. Si une des commandes foire et que tu ne t’en rends pas compte, ça peut vite aller à la catastrophe, notamment lors de mises à jour…
- S’il y a une erreur sur l’une des fenêtres, désactive le broadcast et règle le problème sur la fenêtre en question
Important:
Toute commande en sudo
doit être vérifiée mille fois.