Domanda

Mi piacerebbe usare tessuto come uno strumento per raccogliere tutti i carichi dei server ed elaborare i valori dopo, ho pensato a qualcosa di simile:

from fabric.api import run

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

, ma il tessuto non mi permette di specificare il nome host in questo modo, ho trovato questo modo IMO brutta:

from fabric.api import env, run

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

ci sono modi più eleganti?

Utilizzando paramiko direttamente, come suggerito spinte qui me di scrivere un proprio modulo che astrae che - citando dal sito tessuti, che è esattamente ciò che il tessuto dovrebbe fare per me:

  

Oltre all'uso tramite il folle fab, componenti di tessuto può avvenire in altro codice Python, fornendo un'interfaccia Pythonic alla suite protocollo SSH ad un livello superiore a quello previsto per esempio Paramiko (che in tessuto per sé sfrutta.)

È stato utile?

Soluzione

Altri suggerimenti

Sembra che il tessuto è in realtà lo strumento sbagliato per questo. L'affermazione sopra citato è probabilmente da una versione precedente. Guardando il codice run() è chiaro non c'è modulo in tessuto che potrebbe essere utilizzato per il mio scopo.

Ci sono piccoli livelli di astrazione intorno paramiko, per esempio questo

from fabric.api import settings

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

o meglio usando eseguire

from fabric.tasks import execute

data = execute(load_str , hosts = servernames)

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

mi piacerebbe consiglia di impostare per saltare gli host che non sono raggiungibili

env.skip_bad_hosts = True
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top