Есть ли способ динамически изменять хосты между несколькими параллельными задачами? Это то, что у меня есть до сих пор.Динамические хосты и параллельные задачи с библиотекой Fabric
def init_hosts():
env.hosts = [host1,host2,host3,host4]
@parallel
def task_1():
if condition is False:
env.hosts.remove(env.host)
@parallel
def task_2():
run('uname -s')
Очевидно, что я пропускаю некоторые env
Paramenters, но я только хочу task_2
работать на хостах, которые удовлетворяют условию task_1
. Похоже, что начальный список task_2
инициализируется при запуске, поскольку он запущен на всех хостах в начальном env.hosts
списке, определенном в init_hosts()
. Я также пытался динамически модифицировать и строить roledefs, но имел тот же результат.
Редактировать: Также есть способ настроить параллельную очередь выполнения таким образом, чтобы несколько параллельных задач выполнялись параллельно, а не последовательно?
Edit: мне удалось получить свой желаемый конечный результат, имея каждую задачу возвратного выхода, и синтаксический анализ вывода, чтобы построить новый список хостов перейти на выполнение():
def init_hosts():
env.hosts = [host1,host2,host3,host4]
@parallel
def task_1():
if condition is False:
return False
else:
return True
@parallel
def task_2():
run('uname -s')
def run_tests():
results = execute(task_1)
successful_hosts = [k for k in results.iterkeys() if results[k]]
execute(test_2, hosts=successful_hosts)
Это работает, но это брутто по многим причинам. Есть ли способ лучше?