如何使用fabric在不同的组中运行自动化任务

时间:2013-01-09 05:48:57

标签: python fabric

我想在不同的pc组上运行不同的命令。 我的结构文件如下:

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 个答案:

答案 0 :(得分:1)

您可以使用execute命令解决此问题。在这样的事情:

def update_hosts():
    execute(get_last_hosts)
    execute(upload_hosts)