12
有沒有辦法在多個並行任務之間動態修改主機?這是我迄今爲止所擁有的。帶有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
的主機列表在啓動時初始化,因爲它在init_hosts()
中定義的初始env.hosts
列表中的所有主機上運行。我也嘗試過動態修改和構建roledefs,但結果相同。
編輯:另外,有沒有辦法設置一個並行執行隊列,使多個並行任務並行執行而不是按順序執行?
編輯:我設法讓每個任務返回的輸出,並解析輸出,以建立一個新的主機列表,讓我期望的最終結果傳遞到執行():
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)
這工作,但它的總數有很多原因。有沒有更好的辦法?