Deployment

從 Chef 食譜返回而不引發異常

  • August 16, 2016

有沒有辦法從廚師食譜返回而不會引發異常?

說我有一個很長的食譜。我想在它的開頭添加一個 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頁面的剖析。

引用自:https://serverfault.com/questions/400907