tags:

views:

47

answers:

1

I'd like to use fabric as a tool to gather all server loads and process the values afterward, I thought of something like this:

from fabric.api import run

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

but fabric doesn't allow me to specify the hostname this way, I found this IMO ugly way:

from fabric.api import env, run

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

are there more elegant ways?

Using paramiko directly, as suggested here pushes me to write an own module that abstracts it - quoting from fabrics website, that's exactly what fabric should do for me:

In addition to use via the fab fool, Fabric’s components may be imported into other Python code, providing a Pythonic interface to the SSH protocol suite at a higher level than that provided by e.g. Paramiko (which Fabric itself leverages.)

A: 

It appears that fabric really is the wrong tool for that. The claim quoted above is probably from an earlier version. Looking at the run() code it's clear there's no module in fabric that could be used for my purpose.

There are small abstraction layers around paramiko, e.g. this one

Philipp Keller