Есть ли способ динамически изменять хосты между несколькими параллельными задачами? Это то, что у меня есть до сих пор.
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
параметров, но я хочу, чтобы task_2
запускался только на хостах, которые удовлетворяют условию в task_1
. Похоже, что список хостов task_2
инициализируется при запуске, потому что он работает на всех хостах в начальном списке env.hosts
, определенном в init_hosts()
. Я также пробовал динамически изменять и создавать определения ролей, но получил тот же результат.
Изменить: Кроме того, есть ли способ настроить очередь параллельного выполнения, чтобы несколько параллельных задач выполнялись параллельно, а не последовательно?
Редактировать: мне удалось получить желаемый конечный результат, заставив каждую задачу возвращать вывод и анализируя вывод для создания нового списка хостов, чтобы передать его в execute():
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)
Это работает, но это грубо по многим причинам. Есть ли лучший способ?