fabric: une aide au développement pour WaterOnMars

wom-logo-128Bien que je passe désormais bien plus de temps à utiliser mon lecteur de flux WaterOnMars qu'à le développer, je continue petit à petit à l'améliorer et pour me simplifier la vie j'ai pu encore une fois compter sur un projet particulièrement bien ficelé: fabric ! fabric est une application Python en ligne de commande dont le but premier est de simplifier les actions "à distance": typiquement le déploiement d'une application sur un serveur. Je l'utilise donc pour déployer WaterOnMars sur mon serveur perso, déployer la démo sur heroku mais plus récemment j'ai ajouté la configuration de fabric (le "fabfile") aux sources de WaterOnMars comme une aide officiellement maintenue pour les diverses tâches de maintenance: lancement des tests, initialisation de la db, servir le site en local et déploiement sur un serveur au choix. Ce qui me plaît bien avec fabric:fabric_logo
  • ça s'installe avec pip, sans aucun souci, et hop dans mon virtualenv j'ai la commande "fab" qui est immédiatement disponible
  • ça se configure super-simplement avec un seul fichier Python
  • j'ai eu zero problème pour lancer des commandes à distances ((demande de mot de passe et récupération des logs et interactions en console sont parfaitement gérés))
  • il y a aussi des facilités pour définir des commandes à lancer en local
Du coup, ça en fait un bon assistant au développement/déploiement de WaterOnMars et pour faciliter la vie d'autres développeurs qui seraient intéressés par le projet j'ai fait un petit ajout au fabfile. Il cherche désormais un fichier de config appelé fabhosts.cfg qui définit les serveurs sur lesquels on souhaite faire le déploiement ainsi que les infos de connections. Du coup le fabfile.py avec l'implémentation des ses diverses commandes est commité avec les sources tandis que le fabhosts.cfg avec ses info de connections est spécifiquement ignoré par .gitignore. Pour avoir une idée du format de fabhosts.cfg:
[{userA}@{hostX}]
site_dir = ~/path/to/wateronmars_site
virtual_env_dir = ../venv
final_deploy_action = touch /path/to/passenger/tmp/restart.txt
Avec plus de détails dans le fichier fabfile.py de WaterOnMars bien sûr.