2016-10-10 53 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