簡體   English   中英

如何在結構中設置動態主機

[英]how to set dynamic hosts in fabric

下面的代碼可以設置動態主機:

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在shell中,輸入兩次。 如何將兩個工作定義為一個?

如果我正確理解您的信息,則您正在嘗試在多個主機中運行任務。

如果是這樣,您可以按照這種方式進行

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

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM