2012-05-29 3 views
5

Когда я управляю десятками серверов с помощью Fabric, мне часто неважно, в какой конкретно форме выполняются команды на каждом сервере, вместо этого я хочу сопоставить небольшие биты информации с каждого хоста и представить ее в резюме на конец.Есть ли способ сделать Fabric суммировать результаты по нескольким хостам?

Поддерживает ли Fabric эту функциональность? (Я искал документацию безрезультатно, но, возможно, я что-то пропустил).

В противном случае я предполагаю, что можно агрегировать эту информацию вручную, а затем добавить обработчик выхода, но это похоже на то, что может быть обычным прецедентом.

В качестве примера у меня есть несколько сценариев, которые выполняют некоторые основные проверки безопасности на нескольких серверах, и я хотел бы создать отчет в конце вместо прокрутки вывода для каждого сервера. Я не хочу ограничивать вывод Fabric, так как если есть проблема, я хочу прокрутить назад, чтобы точно определить ее.

ответ

1

Это просто python, поэтому вы можете печатать все, что захотите, а также сделать свой собственный декоратор, чтобы обернуть задачу и выплюнуть ее. Как бы то ни было, в этом нет ничего, что могло бы помочь.

2

Это, вероятно, немного датировано, и теперь Fabric, безусловно, сильно изменилась с тех пор, как вы задали этот вопрос ... хотя, как сказал Морган, вам просто нужен сценарий-оболочка, чтобы содержать рабочую лошадь, а затем это " просто Python "оттуда. Это кратко рассматривается в документации execution model.

Например, один способ, которым Вы могли бы думать о оберточном что-то вроде «безотказной работы» (хотя, очевидно, что это может стать намного более сложным):

@parallel 
def _get_uptime(): 
    '''Retrieve and return uptime for each host''' 
    with hide('stdout'): 
    up = run('uptime') 
    return(up.rstrip()) 

@runs_once 
def uptime_sorted(): 
    '''System: System uptime (sorted) - Use parallel for best effect''' 
    print(cyan("[%(host)s] Executing on %(host)s as %(user)s" % env)) 
    system_uptimes = execute(_get_uptime) 
    for sys,up in sorted(system_uptimes.iteritems()): 
    print "%s: %s" % (sys, up) 

Это делает uptime_sorted вашей записи задачи. и _get_uptime выполняют всю работу по получению данных и возврату их.