厨师食谱 - 如何为 ::File.exists 添加超时?在 ruby_block
chef recipe - how to add a timeout to ::File.exists? in 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 秒后继续(并失败)?
仅使用 ruby(未经测试,我可能忘记了一些东西):
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:您试图编写状态更改代码而不是描述结果状态,这违背了配置管理理念。
考虑这段代码:
ruby_block 'wait for tomcat' do
block do
true until ::File.exists?('/usr/share/tomcat/webapps/system/WEB-INF')
end
end
我如何添加 timeout
,以便在部署出错(并且文件永远不存在)的情况下,我的食谱可以在(比方说)30 秒后继续(并失败)?
仅使用 ruby(未经测试,我可能忘记了一些东西):
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:您试图编写状态更改代码而不是描述结果状态,这违背了配置管理理念。