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

Était-ce utile?

La solution

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top