Hi,

Consider the following fabric-1 task. For illustration I kept it really
short:
@fab.task
def sample():
    version = fab.local('python setup.py --version')
    fab.run('mkdir -p /snapshots/%s' % version.strip())

This task needs to run a local and remote command. I am now trying to port
this to fabric-2, and I can't figure out how I can implement this. If I
define the "hosts" variable in the task, then the first line will be
executed on the remote host as well, which I don't want. A naive aproach
which won't work:

@task(hosts=PROD)
def sample(ctx):
    version = ctx.run('python setup.py --version').strip()   # <- this
won't work
    ctx.run('mkdir -p /snapshots/%s' % version)

At first I thought I would split the task into two, one for just local
commands and one for remote tasks, but then I am forced to pass in the
context, which will in turn cause it again to be run remotely:

@task
def get_version(ctx):
    version = ctx.run('python setup.py --version').strip()
    return version

@task(hosts=PROD)
def sample(ctx):
    version = get_version(ctx)  # <- this won't work
    ctx.run('mkdir -p /snapshots/%s' % version)

How can I accomplish something like this? And where is it noted in the
docs? In the current example on the "Upgrading from 1.x" page does not have
a single task mixing local with remote commands in any way.


Regards,


Mich
_______________________________________________
Fab-user mailing list
Fab-user@nongnu.org
https://lists.nongnu.org/mailman/listinfo/fab-user

Reply via email to