Tissu: course d'appel () pour un hôte explicite
-
01-10-2019 - |
Question
Je voudrais utiliser le tissu comme un outil pour rassembler toutes les charges de serveur et de traiter les valeurs après, je pensais à quelque chose comme ceci:
from fabric.api import run
for servername in servernames:
load_str = run('cat /proc/loadavg | cut -d' ' -f1', host=servername)
mais le tissu ne me permet pas de spécifier le nom d'hôte de cette façon, je trouve cette façon OMI laid:
from fabric.api import env, run
for servername in servernames:
env.host_string = servername
load_str = run('cat /proc/loadavg | cut -d' ' -f1')
sont là des façons plus élégantes?
Utilisation paramiko directement, comme le suggère me pousse ici pour écrire un propre module résumés il - citant le site web de tissus, qui est exactement ce que le tissu doit faire pour moi:
En plus de l'utilisation via le fou Fab, les composants de tissu peut être importé dans un autre code Python, fournissant une interface Pythonic à la suite de protocoles SSH à un niveau supérieur à celui prévu par exemple Paramiko (qui tire parti de tissu lui-même.)
La solution
Cette offre une solution question:
Autres conseils
Il semble que le tissu est vraiment le mauvais outil pour cela.
La demande citée ci-dessus est probablement d'une version antérieure.
En regardant le code run()
il est clair qu'il n'y a pas de module dans le tissu qui pourrait être utilisé pour mon but.
Il y a de petites couches d'abstraction autour paramiko, par exemple celui-ci
from fabric.api import settings
for servername in servernames:
with settings(host_string=servername):
load_str = run('cat /proc/loadavg | cut -d' ' -f1')
ou mieux exécuter en utilisant
from fabric.tasks import execute
data = execute(load_str , hosts = servernames)
def load_str():
return run('cat /proc/loadavg | cut -d' ' -f1')
Je recommande la mise à sauter les hôtes qui ne sont pas accessibles
env.skip_bad_hosts = True