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

bso*_*ell 5 python fabric

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

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

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

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

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

Ond*_*ták 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))
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢。遗憾的是没有更好的机制——如果您想在不同的主机上运行相同的脚本,这种方法似乎不太有效。 (2认同)