我正在使用Puppet进行机器配置。我有一个在Tomcat 6 app服务器上运行的服务,另一个清单依赖于该服务(作为安装的一部分发送一些REST请求)。问题是,使用以下命令启动tomcat后服务不可用:
service {"tomcat6":
ensure => running, enable => true, hasstatus => true, hasrestart => true;
}
因此,我需要一些另一个清单的需求条件,以确保服务真正运行(例如,检查某些URL是否可用)。如果它还没有准备好等待一段时间再次尝试再次尝试重新设置。
是否有一些惯用的Puppet解决方案或其他方法可以实现这一目标?
注意 - 睡眠不是解决方案。
答案 0 :(得分:18)
感谢lzap和Puppet irc频道中的人们是一个解决方案:
exec {"wait for tomcat":
require => Service["tomcat6"],
command => "/usr/bin/wget --spider --tries 10 --retry-connrefused --no-check-certificate https://localhost:8443/service/",
}
使用require =>时在依赖清单中执行[“wait for tomcat”],在服务真正准备好之前它不会运行。
答案 1 :(得分:1)
不是傀儡,而是贝壳......
max=30; while ! wget --spider http://localhost:8080/APP > /dev/null 2>&1; do
max=$(( max - 1 )); [ $max -lt 0 ] && break; sleep 1
done; [ $max -gt 0 ]
这是改进版。
找到应用程序时返回true,达到max时返回false。
答案 2 :(得分:0)
我知道这不是Puppet,而是:
max=30; e=1; while [ $e -ne 0 -a $max -gt 0 ]; do
wget --spider http://localhost:8080/APP > /dev/null 2>&1
e=$?; max=$(( max - 1 )); sleep 1
done; [ $max -ne 0 ]
你可以把它放在一行,只用semicomas连接(除了“do”语句)。