2013-01-09 25 views
0

我想在不同的pc組上運行不同的命令。 我的布文件中像下面:如何在使用fabric的不同組中運行自動化任務

env.hosts = ['125.221.225.31','125.221.225.36','125.221.225.33','125.221.225.34','125.221.225.35'] 
env.roledefs = { 
    'master':['125.221.225.31'], 
    'slave':['125.221.225.33','125.221.225.34','125.221.225.35','125.221.225.36']} 

@roles('master') 
def get_last_hosts(): 
    with cd('/etc'): 
     get('hosts','/tmp/hosts') 

@roles('slave') 
def upload_hosts(): 
    with lcd('/tmp'): 
     put('hosts','/etc/hosts',use_sudo=True) 

def update_hosts(): 
    get_last_hosts() 
    upload_hosts() 

我可以運行:

fab get_last_hosts, 

,然後運行:

fab upload_hosts 

我想這些步驟合併成一個步驟,可以這麼說:

update_hosts

但是不行,它會在env.hosts中的每臺電腦上運行update_hosts,這不是我想要的。

回答

1

您可以使用execute命令解決此問題。在這樣的事情:

def update_hosts(): 
    execute(get_last_hosts) 
    execute(upload_hosts) 
相關問題