Pregunta

Me gustaría utilizar la tela como una herramienta para recopilar todas las cargas del servidor y procesar los valores después, pensé en algo como esto:

from fabric.api import run

for servername in servernames:
    load_str = run('cat /proc/loadavg | cut -d' ' -f1', host=servername)

tela, pero no me permite para especificar el nombre de host de esta manera, he encontrado de esta manera la OMI fea:

from fabric.api import env, run

for servername in servernames:
    env.host_string = servername
    load_str = run('cat /proc/loadavg | cut -d' ' -f1')

¿Hay maneras más elegantes?

El uso de paramiko directamente, como se sugiere empujones aquí mí para escribir un módulo propio que abstrae - citando página web telas, eso es exactamente lo que la tela debe hacer por mí:

  

Además de su uso a través el tonto Fab, los componentes del tejido puede ser importado a otro código Python, que proporciona una interfaz Pythonic a la suite de protocolos SSH en un nivel superior que la proporcionada por, por ejemplo, Paramiko (que en sí Tela aprovecha.)

¿Fue útil?

Solución

Otros consejos

Parece que la tela es realmente la herramienta equivocada para eso. La afirmación citada anteriormente es, probablemente, de una versión anterior. Si examina el código run() está claro que no hay módulo en la tela que se podría utilizar para mi propósito.

Hay pequeñas capas de abstracción alrededor paramiko, por ejemplo éste

from fabric.api import settings

for servername in servernames:
    with settings(host_string=servername):
        load_str = run('cat /proc/loadavg | cut -d' ' -f1')

o mejor usando ejecutar

from fabric.tasks import execute

data = execute(load_str , hosts = servernames)

def load_str():
    return run('cat /proc/loadavg | cut -d' ' -f1') 

Me gustaría recomendar el establecimiento para saltar anfitriones que no son accesibles

env.skip_bad_hosts = True
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top