2012-05-29 21 views
5

Cuando administro docenas de servidores con Fabric, a menudo no me importan los detalles de los comandos que se ejecutan en cada servidor, en su lugar quiero recopilar pequeños bits de información de cada host y presentarlos en resumen en el fin.¿Hay alguna manera de hacer que Fabric resuma los resultados en una serie de hosts?

¿Admite Fabric esta funcionalidad en sí misma? (He buscado la documentación sin ningún resultado, pero tal vez me haya perdido algo).

De lo contrario, supongo que se podría agregar esta información manualmente y luego agregar un controlador de salida, pero esto se siente como algo que podría ser un caso de uso común.

Como ejemplo, tengo algunas secuencias de comandos que hacen algunas comprobaciones de seguridad básicas en una serie de servidores, y me gustaría crear un informe al final en lugar de desplazarse por la salida de cada servidor. No quiero restringir la salida de Fabric, ya que si hay un problema, quiero desplazarme hacia atrás para localizarlo.

Respuesta

1

Es solo python, por lo que puede imprimir lo que desee, así como también hacer su propio decorador para envolver la tarea y escupirla. Tal como está, no hay nada en el núcleo ni contrib que haga eso.

2

Probablemente este sea un poco anticuado, y Fabric ciertamente ha evolucionado mucho desde que hizo esta pregunta ... aunque, como dijo Morgan, básicamente solo necesita un script de envoltura para contener el caballo de batalla, y entonces es " solo Python "desde allí. Esto se aborda brevemente en la documentación execution model.

Por ejemplo, una forma en que podría pensar de envolver algo así como "tiempo de actividad" (aunque, obviamente, esto se puede conseguir mucho más complicado):

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

Esto hace que la tarea uptime_sorted entrada. y _get_uptime hacen todo el trabajo de obtener los datos y devolverlos.

Cuestiones relacionadas