2012-05-29 11 views
5

Wenn ich Dutzende von Servern mit Fabric verwalte, sind mir die Details der Befehle, die auf jedem Server ausgeführt werden, oft egal, stattdessen möchte ich kleine Informationen von jedem Host sammeln und sie zusammenfassend im Ende.Gibt es eine Möglichkeit, Fabric Ergebnisse über mehrere Hosts zusammenzufassen?

Unterstützt Fabric diese Funktionalität selbst? (Ich habe die Dokumentation vergeblich durchsucht, aber vielleicht habe ich etwas verpasst).

Andernfalls könnte man diese Informationen manuell aggregieren und dann einen Exit-Handler hinzufügen, aber das fühlt sich an wie etwas, das ein häufiger Anwendungsfall sein könnte.

Als Beispiel habe ich ein paar Skripte, die einige grundlegende Sicherheitsüberprüfungen auf einer Reihe von Servern durchführen, und ich möchte am Ende einen Bericht erstellen, anstatt für jeden Server durch die Ausgabe zu scrollen. Ich möchte die Ausgabe von Fabric nicht einschränken, denn wenn ein Problem auftritt, möchte ich zurückscrollen, um es genau zu bestimmen.

Antwort

1

Es ist nur Python, so dass Sie drucken können, was auch immer Sie möchten, sowie Ihre eigenen Dekorateur zu machen, um die Aufgabe zu wickeln und es auszuspucken. So wie es steht, gibt es weder im Kern noch im Beitrag etwas, das das tut.

2

Dies ist wahrscheinlich ein wenig altmodisch, jetzt, und Fabric hat sicherlich eine Menge entwickelt, seit Sie diese Frage gestellt ... obwohl, wie Morgan sagte, Sie brauchen im Grunde nur ein Wrapper-Skript, um das Arbeitspferd zu enthalten, und dann ist es " nur Python "von dort. Dies wird in der Dokumentation execution model kurz angesprochen.

zum Beispiel eine Möglichkeit, Sie so etwas wie „uptime“ von Verpackungs denken könnte (obwohl, natürlich, kann dies viel komplizierter):

@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) 

Dies macht uptime_sorted Ihren Eintrag Aufgabe. und _get_uptime erledigen alle Arbeit, um die Daten zu erhalten und sie zurückzugeben.

Verwandte Themen