Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在结构中设置动态主机_Python_Fabric - Fatal编程技术网

Python 如何在结构中设置动态主机

Python 如何在结构中设置动态主机,python,fabric,Python,Fabric,下面的代码可以设置动态主机: def set_hosts(): env.hosts = ['host1', 'host2'] def mytask(): run('ls /var/www') 但我只能在shell中运行此任务,并且该任务将按顺序而不是并行运行: fab set_hosts mytask 如何在fabfile中运行它?这样我就可以将decorator@parallel设置为并行运行 def set_namehost(): env.hosts = ['n

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

def set_hosts():
    env.hosts = ['host1', 'host2']

def mytask():
    run('ls /var/www')
但我只能在shell中运行此任务,并且该任务将按顺序而不是并行运行:

fab set_hosts mytask
如何在fabfile中运行它?这样我就可以将decorator@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_在shell中承载mytask,输入两次。
如何将两个作业定义为一个?

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

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

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')
运行:晶圆厂运行任务

将在所有主机中运行定义的TAK。我建议采用这种方法,尤其是当您希望在主机上运行的命令不同时

在查看fab文档时,您可能希望使用以下方法:

希望这有帮助

from fabric.api import *

@parallel
def runTask():
    run('ls /var/www')

fab -H host1, host2, host3 runTask