将不同的参数传递给Fabric中的不同主机

时间:2012-07-22 16:41:10

标签: python fabric

我正在编写一个脚本,以便在多个主机上启动负载生成实验。我可以写一个bash脚本来启动多个ssh会话,但我希望使用更结构化的东西。由于我在大部分脚本中使用Python,我认为Fabric看起来是个不错的选择。

唯一的问题是我需要为每个命令传递少量主机特定数据(实际上只是一个id或计数器),我想并行运行它们。

换句话说,我想做类似以下的事情,其中​​host_num对于每个主机是不同的(可能只是递增)。

@parallel
def launch():
    with cd('/working/dir'):
        run("./start/script -id=%d", host_num)

Fabric中有可能吗?如果没有,是否还有其他工具可以用来完成同样的事情?

2 个答案:

答案 0 :(得分:3)

您可以检查用户/主机。每个任务都知道他们当前运行的环境:

env.hosts = ['user@host1.com', 'user@host2.com']

@task
def test():
    print '%(user)s@%(host)s' % (env)

    if env.host == 'host1.com':
        id = 1
    elif ...

    run('echo "%s"' % (id))

随意以更优雅的方式编写:)(一个建议是字典使用类似于id查找的case语句)

答案 1 :(得分:2)

如果你想对你在任务中运行的主机进行一些内省,我建议你引用env.host变量。每个任务都知道它的env状态,虽然它们并不共享这个状态,因为它们都是以forks运行的。您也可以使用number of other env vars