2016-10-10 235 views
0

考慮以下代碼:廚師食譜 - 如何添加超時:: File.exists?在ruby_block

ruby_block 'wait for tomcat' do 
    block do 
    true until ::File.exists?('/usr/share/tomcat/webapps/system/WEB-INF') 
    end 
end 

我如何添加一個timeout,以便在部署了錯誤(該文件將永遠存在)的情況下,我的食譜後能繼續(和失敗) (比如說)30秒?

回答

2

剛開始使用紅寶石(未經測試,我可能已經忘了什麼事有):

ruby_block 'wait for tomcat' do 
    block do 
    iter=0 
    until ::File.exists?('/usr/share/tomcat/webapps/system/WEB-INF') || iter > 5 do 
     sleep 6 
     iter++ 
    end 
    raise "Timeout waiting for tomcat startup" unless iter <= 5 
    end 
end 

但這種結構通常意味着你落入了收斂VS編譯問題。因此你可能試圖解決一個XY問題。由於tomcat在運行結束之前可能無法啓動。

TL; DR:您試圖編寫狀態更改而不是描述結果狀態,這違背了配置管理原理。

+0

謝謝!是的,這確實是XY問題。我想我有另一個關於這個問題,因爲我有一個'定義'方法,我需要調用基於'if :: File.exists?(...)'...但由於它不是一個資源它沒有'not_if'警衛支持。 (在這裏的任何指導非常感謝= – vikingsteve

+0

揭露你真正的整體問題呢? – Tensibai

+1

爲了你的定義問題,把它變成一個custom_resource或LWRP,你將有繼承的警衛語法 – Tensibai