Fabric – env.hosts et -H pour choisir l’adresse du serveur

Il existe une multitude de solution avec fabric pour indiquer sur quel serveur nous souhaitons exécuter les tâches.

La plus commune est le passage par argument en ligne de commande.

$ fab -H my-server.com my_task

La seconde, plus pratique, est d’utiliser la variable env.hosts dans le fabfile.py

from fabric.api import *
 
env.hosts = ['my-server.com']
 
def my_task():
    # ...

que l’on executera simplement comme cela

$ fab my_task

Le problème ?
En utilisant env.hosts de cette facon, vous ne pourrez plus utiliser l’option -H pour indiquer manuellement une adresse. En effet, l’adresse passée en paramètre de la ligne de commande avec -H sera ignorée et c’est env.hosts qui sera utilisé.

La solution est simple, il faut utiliser env.hosts.extend

from fabric.api import *
 
env.hosts.extend(['my-server.com'])
 
def my_task():
    # ...

Dans ce cas,

$ fab my_task # exécute sur my-server.com
$ fab -H my-other-server.com my_task # exécute sur my-other-server.com et sur my-server.com

Écraser la liste déjà existante par celle de -H

Si vous souhaitez que l’option -H écrase la liste des serveurs de env.hosts il suffit de faire une petite vérification

from fabric.api import *
 
if len(env.hosts) == 0:
    env.hosts.extend(['my-server.com'])
 
def my_task():
    # ...

Et dans ce cas,

$ fab my_task # exécute sur my-server.com
$ fab -H my-other-server.com my_task # exécute sur my-other-server.com

Amusez-vous bien avec Fabric 🙂

Aymeric DERBOIS

J'ai 27 ans et je suis développeur. Je travail la plupart du temps sur des techno web, mais pas que. Étant à l'affût des nouveautés, j'adore découvrir tout et n'importe quoi dans l'informatique. Je suis amoureux de CakePHP et j'utilise au quotidien Django. Je suis très ouvert d'esprit :). J'aime bien utiliser AngularJS aussi de temps à autre pour faire du front. Au quotidien j'utilise Fedora/Ubuntu pour le desktop et CentOS pour mes serveurs. Par ailleurs je maîtrise le C/C++/Python/PHP/...

More Posts - Website

Follow Me:
Twitter

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.