Cela fait maintenant un moment que j'avais envie d'avoir un moyen simple de distribuer des commandes sur un grand nombre de machines différentes, par exemple pour distribuer des calculs puis récupérer les résultats.
Je viens de publier mon premier projet public sur Bitbucket : SSHMaster. Le code essentiel qui permet d'exécuter une commande sur une machine sur SSH n'est pas de moi : je l'ai récupéré ici et il utilise lui-même le module python paramiko. Je me suis contenté d'une part de développer une surcouche objet et d'aute part de gérer plusieurs machines à la fois.
Le code est organisé en 3 fichiers principaux :
- Connection.py contient le code que j'ai récupéré, qui permet d'exécuter une commande, d'envoyer un fichier ou de récupérer un fichier.
- Machine.py fait exactement la même chose mais en orienté objet :
1 2 3 4 5 6 7 8 9 | |
- Cluster.py s'occupe de gérer plusieurs machines :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
Ce script peut bien sûr être amélioré :
- Il serait pratique de créer un réel script main.py avec des paramètres tels que les commandes à lancer et les triplets machine/login/clé ssh permettant de savoir sur quelles machines lancer les commandes.
- Pouvoir ajuster les commandes lancées en fonction de chaque machine serait aussi utile : on pourrait par exemple donner des paramètres tels que 1-30 à la première machine pour qu'elle traite les 30 premières données et 31-60 à la seconde pour qu'elle traite les 30 suivantes.
Je m'occuperai peut-être de rajouter ces fonctionnalités si j'en ai besoin. En attendant, si vous avez envie de le faire, n'hésitez pas et partagez ;). Si vous avez d'autres idées d'améliorations, ça m'intéresse aussi :)