2010-08-25 17 views
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,作爲建議here推我寫一個自己的模塊,它抽象了 - 從面料網站報價,這也正是我應該做的布料:

除了通過晶圓廠的傻瓜使用,Fabric的組件可能會被導入到其他Python代碼中,爲SSH協議套件提供Pythonic接口,其級別高於例如Paramiko(織物本身利用)

回答

1

看來織物真的是錯誤的工具。 上面引用的索賠可能來自較早的版本。 查看run()代碼很明顯,沒有可用於我的目的的模塊。

在paramiko周圍有小的抽象層, this one

0
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