Deployment
從 Chef 食譜返回而不引發異常
有沒有辦法從廚師食譜返回而不會引發異常?
說我有一個很長的食譜。我想在它的開頭添加一個 ruby 塊,它將檢查某些條件(例如目錄存在)並停止處理此配方(但繼續執行 run_list 的其餘部分),如果條件成功,則不會引發異常。
條件執行(only_if/not_if)並不能解決問題,因為我必須將條件添加到配方中的每個資源呼叫中,而它們可能有很多。
Opscode 的 wiki 中有一條評論,評論者詢問相同但沒有答案。
中止配方執行的方法(例如由於某些條件)是使用“return”語句。jtimberman 對並行 StackOverflow 問題的回答中出現了徹底的討論。
我會將該配方分成兩部分並
include_recipe
在 if 語句中使用。例如在cookbooks/foo/default.rb
:some_condition = File.exists?("/etc/whatever") # Your specific check here if some_condition include_recipe "foo::conditional_bit" end
將您的條件配方放入
cookbooks/foo/recipes/conditional_bit.rb
並添加recipe[foo]
到相應節點的執行列表中。請注意,如果您指定了 ruby 塊,執行順序將略有不同。將在廚師客戶端執行的“編譯”階段檢查條件,而不是“執行”階段。有關詳細資訊,請參閱Chef Run頁面的剖析。