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 🙂