Je veux utiliser Fabric et exécuter une commande en local, sans avoir à établir de connexions supplémentaires.
Comment puis-je faire cela dans le tissu 2 ? ... documentation semble manquer de donner un exemple.
La décision de conception de supprimer la commande local
dans la structure 2 est une PITA IMHO, mais j'ai pu la simuler en utilisant Context
d'Invoke au lieu de Connection
.
from fabric import Connection
from invoke.context import Context
@task
def hostname(c):
c.run('hostname')
@task
def test(c):
conn = Connection('user@Host')
hostname(conn)
local_ctx = Context(c.config) # can be passed into @task;
# Connection is a subclass of Context
hostname(local_ctx)
run, Sudo et local se font de la même façon:
from fabric import Connection
cn = Connection('[email protected]') # presumes ssh keys were exchanged
cn.run('ls -al') # assuming ssh to linux server - as scott
cn.Sudo('whoami') # as root
cn.local('echo ---------- now from local')
cn.local('dir /w') # assuming client is windows
J'ajoute le commentaire de @ TheRealChx101 comme réponse car j'ai rencontré des problèmes avec Connection.local
. Toutes les variables env ne sont pas entrées dans le pty, donc certains de mes scripts ne fonctionnaient pas correctement.
Avec le import from invoke run as local
strophe (Invoke's local au lieu de Fabrics) tout a bien fonctionné.