2011-07-06 56 views
1

我正在尋找一種方法來定義一個具有multirun的任務,該任務將在命令行中定義的一組服務器上運行(通過角色或主機)。未綁定到特定集合的面料並行任務

到目前爲止我見過的所有例子,嘗試做一些事情,如:

env('app-nodes').multirun('some command') 

但我不想硬編碼的角色。我想用fab -R ...來代替它。我在這裏有什麼選擇?

我預計這個工作:

@task 
def some_task(): 
    env().multirun('some command') 

但拋出TypeError: '_AttributeDict' object is not callable

+0

它是否必須是Python函數,還是將GNU並行限定? http://www.youtube.com/watch?v=OpaiGYxkSuQ –

+0

我想將它集成到現有的一組結構腳本中,所以最好不要平行。 – viraptor

回答

0

你會prolly需要使用任務指定參數和它送入TAV的ENV()這種方式: http://docs.fabfile.org/en/1.1.1/usage/fab.html#per-task-arguments

此外,爲什麼你會期望主機工作的空集?

+0

按照:http://tav.espians.com/fabric-python-with-cleaner-api-and-parallel-deployment-support.html(#Contextualised Tasks)上下文可能只是默認的一個......不幸的是它不是(它是從@task參數設置的) – viraptor

+0

是從他的文檔中獲取的,它可以設置爲@task或env.ctx元組中的參數。所以你可以編輯ctx值並使用env()或者只是做一些事情:def t(use_hosts):env(use_hosts).run(..) – Morgan