0

以下のコードは、動的ホストを設定できます。

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

def mytask():
    run('ls /var/www')

しかし、これはシェルでしか実行できず、ジョブは並行ではなく順次に機能します。

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 を 2 回入力します。2 つのジョブを 1 つに定義する方法

4

1 に答える 1

0

あなたが正しく理解している場合、複数のホストでタスクを実行しようとしています。

その場合は、この方法で行うことができます

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 docs を見ながら、次のアプローチを使用することをお勧めします。

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

お役に立てれば

于 2013-02-08T12:46:12.303 に答える