¿Existe alguna manera de modificar dinámicamente hosts entre múltiples tareas paralelas? Esto es lo que tengo hasta ahora.Hosts dinámicos y tareas paralelas con la biblioteca 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')
Obviamente me faltan algunos env
paramenters, pero sólo quiero task_2
para ejecutarse en máquinas que cumplen la condición de task_1
. Parece que la lista de hosts de task_2
se inicializa al inicio, porque se ejecuta en todos los hosts en la lista inicial env.hosts
definida en init_hosts()
. También probé modificando y construyendo dinámicamente roledefs, pero obtuve el mismo resultado.
Editar: Además, ¿hay alguna manera de configurar una cola de ejecución paralela de forma que múltiples tareas paralelas se ejecuten en paralelo en lugar de secuencialmente?
Editar: Me las arreglé para conseguir mi resultado final deseado haciendo que cada tarea de salida de retorno, y analizando la salida para construir una nueva lista de hosts para pasar a ejecutar():
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)
Esto funciona, pero es bruto por muchas razones. ¿Hay una mejor manera?