[英]how to set dynamic hosts in 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在shell中,輸入兩次。 如何將兩個工作定義為一個?
如果我正確理解您的信息,則您正在嘗試在多個主機中運行任務。
如果是這樣,您可以按照這種方式進行
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
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.