plazo de llamada () para un anfitrión explícita: Tela
-
01-10-2019 - |
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.)
Solución
Esta pregunta ofrece una 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