Automatisation DevOps en Python 3 avec Fabric 2.5 − L'histoire de Fabric

Ce billet est un peu spécial ; en effet, il est le premier d'une série d'articles que je vais écrire progressivement sur ce blog, et qui vont détailler l'histoire et les possibilités d'utilisation de Fabric 2, un outil permettant d'exécuter des tâches via ssh en Python.

Si j'écris cette série aujourd'hui, c'est parce qu'il m'a fallu pas mal de temps pour agréger toutes ces connaissances sur Fabric, étant donné que la documentation de la version 2.X du projet n'est pas encore tout à fait terminée, et que la meilleure chance de trouver mes réponses était encore d'éplucher les résultats de stackoverflow.
Je souhaite donc rassembler tout ce que j'ai appris au même endroit, afin de pouvoir retrouver ce savoir facilement, et aussi de pouvoir le partager avec le reste du monde :)

Qu'est-ce que c'est Fabric ?

Fabric est le nom d'un module Python, créé le 4 janvier 2008 par chrisvest, qui fut ensuite rejoint par bitprophet peu après.

Le module rencontra la popularité très rapidement à cette époque, parce qu'il permettait d'automatiser un grand nombre de tâches en local et en production sans devoir passer par des immenses scripts bash (qui avaient une fâcheuse tendance à devenir illisibles).

Python 3 fut publié en 2008, mais il fallut attendre le 12 octobre 2013 pour que soit initiée une version compatible ; la version 2 de Fabric.
Cette version est une réécriture complète, ce qui a engendré un certain nombre de changements dans la manière de l'utiliser. C'est pourquoi beaucoup de monde continue aujourd'hui d'utiliser Fabric 1.14.1, la dernière version de Fabric compatible avec Python 2.

Le développeur principal est aujourd'hui bitprophet, et s'occupe du projet et des issues (quoique depuis quelques temps il semble avoir quelques problèmes personnels et cherche à recruter de nouveaux contributeurs).

La version 2.5 de Fabric est la plus récente (au moment de la publication de cet article), et c'est dont elle que nous allons étudier.

Comment ça marche ?

Le principe de fonctionnement est assez simple ; une fois le paquet installé nous allons devoir créer un fichier nommé fabfile.py et comprenant des fonctions, et surtout une ou des tasks (c'est un décorateur de fabric à ajouter aux fonctions). Nous allons ensuite pouvoir lancer la tâche directement en ligne de commande.

Comment est-ce que ça s'installe ?

Pour installer Fabric, nous allons passer par pip et simplement lancer la commande suivante :

python3 -m pip install fabric

Il s'agit de la manière recommandée d'installer des packages Python aujourd'hui.

Comment est-ce que ça se lance ?

Fabric s'installe d'une manière particulière, puisqu'il tente d'ajouter un fichier nommé "fab" au path, afin que l'on puisse le lancer directement via la commande suivante :

fab task arg(s)

Le problème que j'ai rencontré plusieurs fois, c'est qu'il ne s'ajoutait pas au path, et donc que cet appel ne fonctionnait pas. J'ai donc utilisé la manière recommandée de lancer le module, qui a toujours fonctionné pour moi :

python3 -m fabric task arg(s)

Il y a de nombreux arguments et options pour lancer des tasks avec Fabric, et je vous invite donc à lire la partie de la doc qui en parle pour avoir plus de détails.

Sachez également que l'on n'est pas obligé d'utiliser l'outil CLI, on peut également lancer des tasks depuis d'autres scripts, ce qui fait de Fabric un outil vraiment très puissant.


Merci d'avoir lu cet article, le prochain post traitera de la créations et de l'exécution de tâches en local avec Fabric 2.5.