2012-05-29 5 views
5

Fabricで数十台のサーバを管理しているときに、各サーバで実行されているコマンドの詳細については気にしませんが、各ホストからの小さな情報を照合し、終わり。ファブリックが多数のホストにまたがって結果を要約する方法はありますか?

Fabricはこの機能自体をサポートしていますか? (私は無駄にドキュメントを検索したが、おそらく私は何かを逃した)。

そうでなければ、この情報を手動で集計して終了ハンドラを追加することができますが、これは一般的な使用例である可能性があります。

例として、いくつかの基本的なセキュリティチェックをいくつかのサーバーで行うスクリプトがありますが、各サーバーの出力をスクロールせずに最後にレポートを作成したいとします。 Fabricの出力を制限したくないのです。問題がある場合は、それを特定するためにスクロールして戻したいからです。

答えて

1

これはちょうどpythonなので、好きなものを印刷したり、自分のデコレータを作成してタスクを包み込み、吐き出すことができます。それが立つにつれ、コアには何もありませんし、貢献することもありません。

2

これは少し日付が変わっていますが、この質問をしてからFabricは確かに進化しています...しかし、Morgan氏によれば、基本的には作業用の鞄を入れるためのラッパースクリプトが必要です。ちょうどPython "があります。これについては、execution modelのドキュメントで簡単に説明します。

たとえば、あなたが「稼働時間」のようなものを包むと考えるかもしれない一つの方法は、(ただし、明らかに、これは多くの複雑な取得することができますが):

@parallel 
def _get_uptime(): 
    '''Retrieve and return uptime for each host''' 
    with hide('stdout'): 
    up = run('uptime') 
    return(up.rstrip()) 

@runs_once 
def uptime_sorted(): 
    '''System: System uptime (sorted) - Use parallel for best effect''' 
    print(cyan("[%(host)s] Executing on %(host)s as %(user)s" % env)) 
    system_uptimes = execute(_get_uptime) 
    for sys,up in sorted(system_uptimes.iteritems()): 
    print "%s: %s" % (sys, up) 

これはあなたのエントリのタスクをuptime_sortedます。 _get_uptimeはデータを取得して返すすべての作業を行います。