大厨食谱 - 如何为:: File.exists添加超时?在ruby_block中

时间:2016-10-10 10:37:43

标签: ruby chef chef-recipe

考虑以下代码:

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

如何添加timeout,以便在部署出错(并且文件永远不存在)的情况下,我的配方可以在(比方说)30秒后继续(并失败)?

1 个答案:

答案 0 :(得分: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

但是这种结构通常意味着你陷入了融合与编译问题。因此你可能正试图解决XY问题。因为tomcat可能无法在运行结束之前启动。

TL; DR:您尝试编写状态更改而不是描述结果状态,这违反了配置管理理念。