【问题标题】:how to set dynamic hosts in fabric如何在结构中设置动态主机
【发布时间】:2013-02-08 20:57:40
【问题描述】:

下面的代码可以设置动态主机:

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 in shell,输入两次。 如何将两种工作合二为一?

【问题讨论】:

    标签: python fabric


    【解决方案1】:

    如果我理解正确,您正在尝试在多个主机上运行任务。

    如果是这样,你可以这样做

    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
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-30
      • 2021-06-25
      相关资源
      最近更新 更多