2014-09-22 27 views
1

我想讓我的主人發送一個腳本給備份數據庫和一些文件的僕從。然後,我希望我的主服務器rsync從備份腳本創建的文件,以便我將備份完成的事件發送給主服務器。主人在Reactor中處理事件並啓動執行rsync的Runner。讓僕從等待,直到主賽跑手完成

我希望我的僕從在報告狀態'backup-complete'成功之前等待Runner完成並返回。目前,僕從只是簡單地報告說,狀態成功執行沒有等待亞軍的反應。

我目前的設置是這樣的:

運行備份腳本的僕從從主

salt 'minion' state.sls backup 

附庸觸發一個事件,備份完成(和immedieately返回)

backup-complete: 
    module.run: 
    - name: 'event.fire_master' 
    - fun: fire_master 
    - tag: backup/complete 
    - data: {"status":"Backup complete"} 

主人有一個反應器,捕捉事件並呼籲跑步者

backup_complete: 
    runner.sync-backup.sync: 
    - status: {{ data['data']['status'] }} 

的亞軍然後執行一個rsync命令同步的文件和目錄,並返回退出代碼

def sync(status): 
    command = "myrsyncscript.sh arg0 arg1" 
    result = os.system(command) >> 8 
    return result 

我一直在想有僕從等待和傾聽的「rsync的/完整的」事件由主人觸發,但我無法找到如何創建事件偵聽器的奴才,也沒有如何讓它等待。我看過的另一個解決方案是'salt.modules.cp.push',雖然文檔出於安全原因再次使用它。

該解決方案似乎對我來說過於複雜,所以也許我正在接近這個錯誤的方式。歡迎所有的想法。

回答

0

你可以在僕從上運行一個反應堆,但我很確定它只能監聽它自己的事件總線。我不相信有命令通過事件總線將信息從主人發送給Minion。

我認爲你最好的選擇是讓你的主人在主人身上通過Salt的正常執行模塊執行一次Minion呼叫。