fab-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Fab-user] How do I combine "local" with "remote" tasks in fabric 2?


From: Michel Albert
Subject: [Fab-user] How do I combine "local" with "remote" tasks in fabric 2?
Date: Mon, 1 Apr 2019 11:55:11 +0200

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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]