как получить хост, обрабатываемый из группы fabric2 - PullRequest
0 голосов
/ 06 декабря 2018

Я хотел попробовать fabric2 для некоторых из моих задач, которые требовали выполнения нескольких команд на нескольких хостах.Поэтому я использовал threadingGroup, так как хотел сделать это одновременно.Ниже приведен код

 with fabric.ThreadingGroup(*hosts) as tg:    
    try:                                     
        tg.run('uptime')
        tg.run('last -xF| grep boot')

Теперь мне нужно в какой-то момент узнать, какой хост обрабатывается за один раз фабрикой, потому что мне нужно выполнить некоторую обработку на хосте на основе результата секунды runкоманда.Я много пытался изумиться, но не смог найти много.Даже в документации на ткань очень мало информации о группах в целом.

Я могу достичь этого, если я готов пожертвовать параллелизмом, как показано ниже.threadingGroup, поскольку это не выполняется параллельно и выполняется последовательно.

Так есть ли способ достичь этого с помощью fabric2 или я должен придерживаться только fabric1.

1 Ответ

0 голосов
/ 08 декабря 2018

GroupResult из операции run сообщит вам вывод команды на каждом хосте.

, например:


with fabric.ThreadingGroup(*hosts) as tg:    
    try:                                     
        tg.run('uptime')
        results = tg.run('last -xF| grep boot')
        for connection, result in results.items():
            if connection.host == 'host1':
                # do some stuff here
...