與 Chef Server 實時集成
我們有一組 Chef 伺服器,我們將其節點數據與 Chef 之外的數據集成。目前我們使用批量同步過程從 Chef 中讀取節點,然後將數據推送到數據集成系統中。我們每小時執行一次,到目前為止它執行良好。
我的問題是 Chef 是否支持更實時的機制來獲取這些數據。理想情況下,我希望在它發生後或多或少地立即獲得更改——例如出現或被刪除的新節點,從而減少滯後並消除大批量。Chef 伺服器是否發布通知?(我在這裡什麼都沒看到。)或者有人會處理這個客戶端(廚師-客戶)嗎?還有其他我沒有考慮的方法嗎?
編輯:我專門談論節點數據。我願意
GET /nodes
獲取節點-> URI 雜湊,然後
GET /nodes/:name
獲取單個節點數據。但是,返回的數據量很大,因此如果存在某種推送機制,那就太好了。我這樣做是因為我想將此數據與存在於 Chef 之外的其他服務數據(例如,服務依賴數據、場數據、負載平衡器輪換狀態等)集成。
您可以使用在 chef-client 執行結束時執行的報告處理程序並通知您的其他系統。
run_status 對象包含一些有關執行的有趣資訊,例如,
run_status.updated_resources
這可以使通知依賴於某些資源是否已更改。如果您對節點的屬性感興趣,請run_status.node
包含您可以通過 HTTP 請求發布的新屬性。
我認為 Chef 沒有內置任何此類機制。但是,您應該查看Chef-Guard。Chef-guard 的行為幾乎就像您的節點/工作站和廚師伺服器之間的代理。它實現了整個 chef rest api,所以你可以像你的廚師伺服器一樣點擊它。但是,它會實時維護包含您所有更改的 github 儲存庫。然後它將這些更改轉發給廚師伺服器。你可以做兩件事中的一件,這取決於你的雄心壯志。
- 您可以分叉 chef-guard 並用您自己的自定義操作替換 github 集成。(基本上使用內置的自定義觸發器創建您自己的廚師伺服器代理)
- 您可以直接使用 chef-guard,然後將觸發器放在 github repo 上(它支持開箱即用的自定義觸發器)。
我意識到這兩個答案都比您希望的要多一些努力,但是它們會讓您到達您想去的地方。