1

すべてのサーバー負荷を収集し、後で値を処理するためのツールとしてファブリックを使用したいのですが、次のように考えました。

from fabric.api import run

for servername in servernames:
    load_str = run('cat /proc/loadavg | cut -d' ' -f1', host=servername)

しかし、ファブリックではこの方法でホスト名を指定することはできません。私はこの IMO 醜い方法を見つけました:

from fabric.api import env, run

for servername in servernames:
    env.host_string = servername
    load_str = run('cat /proc/loadavg | cut -d' ' -f1')

もっとエレガントな方法はありますか?

ここで提案されているように、paramiko を直接使用すると、それを抽象化する独自のモジュールを作成する必要があります。fabric の Web サイトからの引用です。

ファブ フールを介して使用することに加えて、Fabric のコンポーネントを他の Python コードにインポートして、Paramiko (Fabric 自体が利用する) などによって提供されるものよりも高いレベルで SSH プロトコル スイートへの Python インターフェイスを提供することができます。

4

3 に答える 3

1

ファブリックは、そのための間違ったツールのようです。上記の主張は、おそらく以前のバージョンのものです。コードを見ると、run()私の目的に使用できるモジュールがファブリックにないことが明らかです。

paramiko の周りには小さな抽象化レイヤーがあります

于 2010-08-27T09:07:43.740 に答える
1
from fabric.api import settings

for servername in servernames:
    with settings(host_string=servername):
        load_str = run('cat /proc/loadavg | cut -d' ' -f1')

または実行を使用してより良い

from fabric.tasks import execute

data = execute(load_str , hosts = servernames)

def load_str():
    return run('cat /proc/loadavg | cut -d' ' -f1') 

到達できないホストをスキップするように設定することをお勧めします

env.skip_bad_hosts = True
于 2014-11-27T22:32:12.887 に答える
1

この質問は解決策を提供します:

Fabric ファイルでターゲット ホストを設定する方法

于 2011-06-17T07:36:28.503 に答える