2011-06-17

Integración paver fabric

Update: Parece que se viene esto como parte de paver 1.1

Hice un pequeño hack y ahora puedo usar el API de fabric cuando escribo tasks de paver y que la tarea se ejecute una vez para cada host.

Para hacer eso, hice un decorator, que se llama multihost y es así:

from fabric import state, network

def multi_host(f):
"""\
Run the decorated function for each host in options.get("host_strings").

Will use the private key set in options.pk if set.
"""
def decoratee(options):
for host_string in options.get("host_strings"):
network.interpret_host_string(host_string)
pk = options.get("pk", None)
state.env.key_filename = [pk] if pk else None
f(options)

decoratee.func_name = f.func_name

return cmdopts((
("pk=", None, "Private key file"),
))(decoratee)

El uso es así:


from paver.easy import task, needs
from fabric import api

@task
def find_hosts(options):
options["host_strings"] = ["host1", "user@host2", "user2@host3:2222"]

@task
@needs("find_hosts")
@multi_host
def remote_hello_world(options):
api.run("echo hello world")


Happy hacking,
Aureliano.

No hay comentarios.: