如何在Fabric中设置动态主机
下面的代码可以设置动态主机:
def set_hosts():
env.hosts = ['host1', 'host2']
def mytask():
run('ls /var/www')
但是我只能在命令行中运行这个,工作是一个接一个地进行,而不是同时进行:
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,需要输入两次。如何把这两个任务合并成一个呢?
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 runTask
这个命令会在所有主机上执行你定义的任务。我建议你使用这种方法,特别是当你想在不同主机上运行不同命令的时候。
在查看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
希望这对你有帮助。