Gibt es eine Möglichkeit, Hosts dynamisch zwischen mehreren parallelen Tasks zu ändern? Das habe ich bisher.Dynamische Hosts und parallele Tasks mit Fabric-Bibliothek
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')
Offensichtlich fehlt mir einige env
paramenters, aber ich will nur task_2
auf Hosts ausgeführt werden, die die Bedingung in task_1
befriedigen. Es scheint task_2
Host-Liste wird beim Start initialisiert, weil es auf allen Hosts in der ursprünglichen env.hosts
Liste ausgeführt in init_hosts()
definiert ausgeführt wird. Ich habe auch versucht, rootdefs dynamisch zu modifizieren und zu erstellen, hatte aber das gleiche Ergebnis.
Edit: Gibt es auch eine Möglichkeit, eine parallele Ausführungswarteschlange einzurichten, so dass mehrere parallele Tasks parallel statt nacheinander ausgeführt werden?
Edit: konnte ich meine gewünschte Endergebnis erhalten, indem jede Aufgabe Rückkehr Ausgang, und Analysieren der Ausgabe eines neuen Host-Liste erstellen auszuführen() übergeben:
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)
Dies funktioniert, aber es ist grob aus vielen Gründen. Gibt es einen besseren Weg?