2014-01-10 58 views
0

如何混合Fabric中的@task和@runs_once裝飾器?如何混合任務和runs_once裝飾器

我有一個任務(check_for_updates)檢查每個主機上已安裝的Python軟件包並記錄哪些需要更新。然後我有一個任務(report_pending_updates)顯示一個報告,顯示哪些主機需要更新。所以我做:

fab production check_for_updates report_pending_updates 

然而,因爲我有多個主機,它運行的每臺主機report_pending_updates,顯示報告多次。

我試圖構建我的任務,如:

@runs_once 
@task 
def report_pending_updates(): 
    ... 

但這會導致織物不檢測任務。切換裝飾器順序導致相同的問題。

回答

1

首先放置@task,否則它不會識別它。至於runs_once,你是否並行運行它,它不會在叉中共享這個runs_once狀態?

如果是這樣或類似,你應該看看使用execute()來處理這個工作。更類似這樣的:

def report_pending_updates(): 
    execute(check_for_updates, hosts=hosts) 

    #everything else 
    ...