0

下面的代码可以设置动态主机:

def set_hosts():
    env.hosts = ['host1', 'host2']

def mytask():
    run('ls /var/www')

但我只能在 shell 中运行它,并且该作业将按顺序而不是并行工作:

fab set_hosts mytask

如何在fabfile中运行它?这样我就可以为作业设置一个装饰器@parallel 以并行运行。

def set_namehost():
    env.hosts = ['namehost']

def get_namehost():
    run('ls /var/www')

def set_hosts():
    env.hosts = ['host1', 'host2']

def mytask():
    run('ls /var/www')

我只能运行: fab set_namehost get_namehost ;fab set_hosts mytask in shell,输入两次。如何将两个工作定义为一个?

4

1 回答 1

0

如果我理解正确,您正在尝试在多个主机中运行任务。

如果是这样的话,你可以这样做

from fabric.api import *

env.roledefs = {
    'host1'   : ['you@yourFirstHost.com'],
    'host2'   : ['you@yourSecondHost.com'],
    'host3'   : ['you@yourThirdHost.com']
}

@task
def runTask():
    for subtask in (deploy_host1, deploy_host2, deploy_host3):
        execute(subtask)


@roles('host1')
def deploy_host1();
    run('ls /var/www')

@roles('host2')
def deploy_host2();
    run('ls /var/www')


@roles('host3')
def deploy_host3();
    run('ls /var/www')

运行:工厂运行任务

将在所有主机中运行定义的任务。我建议采用这种方法,尤其是当您要在主机上运行的命令不同时。

在查看 fab 文档时,您可能想要使用这种方法:

http://docs.fabfile.org/en/1.5/usage/parallel.html

from fabric.api import *

@parallel
def runTask():
    run('ls /var/www')

fab -H host1, host2, host3 runTask

希望这可以帮助

于 2013-02-08T12:46:12.303 回答