以下代码可以设置动态主机:
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,输入两次。 如何将两个工作定义为一个?
答案 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
希望这有帮助