Esiste un modo per modificare dinamicamente gli host tra più attività parallele? Questo è quello che ho finora.Host dinamici e attività parallele con libreria 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')
Ovviamente mi manca qualche env
paramenters, ma voglio solo task_2
per l'esecuzione su host che soddisfano la condizione in task_1
. Appare l'elenco degli host task_2
è inizializzato all'avvio, poiché è in esecuzione su tutti gli host nell'elenco iniziale env.hosts
definito in init_hosts()
. Ho anche provato a modificare e costruire dinamicamente i roledefs, ma ho avuto lo stesso risultato.
Modifica: esiste anche un modo per impostare una coda di esecuzione parallela in modo che più attività parallele vengano eseguite in parallelo anziché in sequenza?
Edit: sono riuscito a ottenere il mio risultato finale desiderato di avere ogni uscita di ritorno compito, e verificando l'output di costruire un nuovo elenco di host di passare a 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)
Questo funziona, ma è lordo per molte ragioni. C'è un modo migliore?