3

現在使用しているネットワークに応じて、異なるホスト セット (ロール) を使用するタスクを作成したいと考えています。サーバーと同じネットワークにいる場合、ゲートウェイを経由する必要はありません。

ここに私の fabfile.py からのスニペットがあります:

env.use_ssh_config = True
env.roledefs = {
    'rack_machines': ['rack4', 'rack5', 'rack6', 'rack7'],
    'external_rack_machines': ['erack4', 'erack5', 'erack6', 'erack7']
    }

@roles('rack_machines')
def host_type():
    run('uname -s')

したがって、私のタスクhost_type()では、 、 などrack_machinesと同じネットワークにいる場合、その役割を にしたいと考えています。rack4rack5external_rack_machines

ssh config だけでこれを行う方法があるかもしれません。これも私のssh_configファイルのスニペットです:

Host erack4
HostName company-gw.foo.bar.com
Port 2261
User my_user

Host rack4
HostName 10.43.21.61
Port 22
User my_user
4

1 に答える 1

1

モジュールがインポートされた後、役割の定義が考慮されます。したがってfabfile、インポート時に実行され、ネットワークを検出し、適切なroledefs.

目標を達成するための 2 つ目の方法は、「フラグ タスク」を使用することです。これは、適切なロール定義を設定するだけのタスクです。すなわち:

hosts = {
    "rack": ["rack1", "rack2"],
    "external_rack": ["external_rack1", "external_rack2"]
}

env.roledefs = {"rack_machines": hosts["rack"]}

@task
def set_hosts(hostset="rack"):
    if hostset in hosts:
        env.roledefs["rack_machines"] = hosts[hostset]
    else:
        print "Invalid hostset"

@roles("rack_machines")
def business():
    pass

そしてそのように呼び出します:fab set_hosts:external_rack business

于 2012-11-02T19:55:51.413 に答える