Fabric: вызов run () для явного хоста - PullRequest
1 голос
/ 25 августа 2010

Я хотел бы использовать Fabric в качестве инструмента для сбора всех нагрузок на сервер и последующей обработки значений, я подумал о чем-то вроде этого:

from fabric.api import run

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

но фабрика не позволяет мне указывать имя хоста таким образом, я нашел этот IMO безобразный способ:

from fabric.api import env, run

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

Есть ли более элегантные способы?

Использование paramiko напрямую, как это было предложено здесь подталкивает меня к написанию собственного модуля, который абстрагирует его - цитируя сайт фабрики, это именно то, что ткань должна сделать для меня:

В дополнение к использованию через fab fool, компоненты Fabric могут быть импортированы в другой код Python, предоставляя Pythonic интерфейс для набора протоколов SSH на более высоком уровне, чем, например, предоставляемый, например, Парамико (которую сама ткань использует.)

Ответы [ 3 ]

1 голос
/ 17 июня 2011

Этот вопрос предлагает решение:

Как установить целевые хосты в файле Fabric

1 голос
/ 28 ноября 2014
from fabric.api import settings

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

или лучше, используя execute

from fabric.tasks import execute

data = execute(load_str , hosts = servernames)

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

Я бы порекомендовал установить пропуск хостов, которые недоступны

env.skip_bad_hosts = True
1 голос
/ 27 августа 2010

Похоже, что ткань действительно не тот инструмент для этого. Заявление, приведенное выше, возможно, из более ранней версии. Глядя на код run(), становится ясно, что в ткани нет модуля, который можно было бы использовать для моих целей.

Вокруг парамико есть небольшие абстракционные слои, например этот

...