2016-09-13 35 views
0

目前我有一個廚師的食譜,其中我發帖聊天,在循環中:廚師 - 需要重量輕「隊列」(用於配方的壽命)

artifacts.each do |artifactItem| 
    # Deploy the artifact 
    #... 

    # Post to chat 
    chat_post "deployed artifact #{artifact_name}" 
end 

我聊天,結果是像這樣:

chef [BOT] 
deployed artifact A 

chef [BOT] 
deployed artifact B 

chef [BOT] 
deployed artifact C 

我想知道 - 有沒有在廚師,在那裏我可以排隊我部署的消息,並張貼他們一次全部(我的食譜完成時),一個簡單的「排隊」的機制?如果是這樣的代碼看。

回答

3

最簡單的方法是使用延遲通知系統。

artifacts.each do |artifactItem| 
    # Deploy the artifact 
    #... 

    # Post to chat 
    r = chat_post "deployed artifact #{artifact_name}" do 
     action :nothing 
    end 
    ruby_block "notification for #{artifact_name}" do 
     block { } 
     notifies :someaction, r 
    end 
end 

或者類似的東西,一定要檢查的通知用什麼動作(無論在chat_post資源的默認操作爲。另外這個假設chat_post是一種資源,而不是某種輔助方法。如果這不是一個資源,你可能需要兩個ruby_blocks

+0

謝謝。'chat_post'實際上在'chat/definitions/post.rb'下面...我猜這是一個「幫助器方法」(因爲我們沒有完全理解如何實現它作爲資源/提供者/ LWRP的東西......)。雖然基於事件的通知似乎是一種更好的方式... – vikingsteve

+0

您必須將它移植到自定義資源才能做到這一點,但這應該很容易:) – coderanger

+0

好的,謝謝@coderanger。我特別提出了另一個問題,也許你可以幫忙? http://stackoverflow.com/questions/39488843/chef-how-to-write-a-custom-resource-containing-dsl-for-execute – vikingsteve

0

您可以使用node.run_state來保存當前大廚運行時可以訪問的瞬態數據。

+1

是的,但可能不是一個好主意。全局狀態應該只用作最後的手段,特別需要謹慎使用'run_state',因爲它是一個共享的全局命名空間 – coderanger