如何在Fabric中设置动态主机

时间:2013-02-06 16:27:16

标签: python fabric

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

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,输入两次。 如何将两个工作定义为一个?

1 个答案:

答案 0 :(得分: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')

runing:fab runTask

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

在查看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

希望这有帮助