Las documentaciones de Altough Fabric se refieren a una forma de usar la biblioteca para el acceso SSH sin requerir la herramienta de línea de comandos fab y / o las tareas, parece que no puedo manejar una forma de hacerlo.
Quiero ejecutar este archivo ( example.py ) ejecutando solo ‘ python example.py ‘:
env.hosts = [ "example.com" ] def ps(): run("ps") ps()
Gracias.
Terminé haciendo esto:
from fabric.api import env from fabric.api import run class FabricSupport: def __init__ (self): pass def run(self, host, port, command): env.host_string = "%s:%s" % (host, port) run(command) myfab = FabricSupport() myfab.run('example.com', 22, 'uname')
Lo que produce:
[example.com:22] run: uname [example.com:22] out: Linux
#!/usr/bin/env python from fabric.api import hosts, run, task from fabric.tasks import execute @task @hosts(['user@host:port']) def test(): run('hostname -f') if __name__ == '__main__': execute(test)
Más información: http://docs.fabfile.org/en/latest/usage/library.html
Aquí hay tres enfoques diferentes, todos utilizando el método de execute
from fabric.api import env,run,execute,hosts # 1 - Set the (global) host_string env.host_string = "hamiltont@10.0.0.2" def foo(): run("ps") execute(foo) # 2 - Set host string using execute's host param execute(foo, hosts=['hamiltont@10.0.0.2']) # 3 - Annotate the function and call it using execute @hosts('hamiltont@10.0.0.2') def bar(): run("ps -ef") execute(bar)
Para usar los archivos de claves, deberá configurar env.key
o env.key_filename
, así:
env.key_filename = 'path/to/my/id_rsa' # Now calls with execute will use this keyfile execute(foo, hosts=['hamiltont@10.0.0.2'])
También puede suministrar múltiples archivos de claves y cualquiera que inicie sesión en ese host será utilizado
Encontré mi solución. Necesitaba proporcionar mi propia * env.host_string * porque cambiar env.user / env.keyfile / etc no actualiza automáticamente este campo.
Esto es lo que hay que hacer:
en example.py
from fabric.api import settings, run def ps(): with settings(host_string='example.com'): run("ps") ps()
vea los documentos para usar el tejido como una biblioteca: http://docs.fabfile.org/en/1.8/usage/env.html#host-string