2015-07-29 16 views
5

Kumaşta, ana makine bazında bir şey toplayan bir görevim var (küçük örnek).Kumaş görevi çıktılarını nasıl toplayabilirim ve birden çok ana bilgisayar için bir özet yazdırabilir miyim?

fab info 

ile

from fabric.api import task, run, hide 
env.hosts['h1', 'h2', 'h3'] 

@task 
def info(): 
    with hide('everything'): 
     info = run("who | tail -n 1") 
     print("On host {0} last user was {1}".format(env.host_string, info)) 

çalıştırın bu 3 ya da 5 ana bilgisayarları için iyi olsa da o 20 veya daha fazla konaklar için görmek çok zor olur,

[h1] Executing task 'info' 
On host h1 last user was userXX pts/29  2015-07-29 15:57 (:0) 
[h2] Executing task 'info' 
On host h2 last user was userXX pts/29  2015-07-29 16:57 (:0) 
[h3] Executing task 'info' 
On host h3 last user was userXX pts/29  2015-07-29 17:57 (:0) 

gibi bir şey vermek (ya da olacak daha karmaşık çıktı). Yapmak istediğim, her bir ana bilgisayar için tüm çıktıları biriktirmek ve bunu, her ana bilgisayarda görev yürütüldükten sonra, sonunda bir özet/genel bakış oluşturmak için kullanmaktır.

Bunu nasıl yaparım?

cevap

5

... Bu soruyu yazarken ve farklı ifadeler googleing en az bir saat sonra, nihayet buldum: Ben bu site aracılığıyla Kaçırdığım birkaç kez taranmış olsa

http://docs.fabfile.org/en/latest/usage/execution.html#leveraging-execute-to-access-multi-host-results

bölüm, ilgili ve bu nedenle bir google ifadenin tamamını aramak etmezse bulmak için umutla buraya onun daha kolay göndermeye düşündüm:

from fabric.api import task, execute, run, runs_once 

@task 
def workhorse(): 
    return run("get my infos") 

@task 
@runs_once 
def go(): 
    results = execute(workhorse) 
    print results 

sorunun örnek ile çözülebilir:

from fabric.api import task, run, hide, execute, runs_once 
env.hosts['h1', 'h2', 'h3'] 

@task 
def collect_info(): 
    with hide('everything'): 
     info = run("who | tail -n 1") 
     return info 

@task 
@runs_once 
def info(): 
    collected_output = execute(collect_info) 
    for host, info in collected_output.iteritems(): 
     print("On host {0} last user was {1}".format(host, info)) 
İlgili konular