我有一个如下的食谱:
service "xyz" do
:action nothing
end
file "xyz.conf" do
...
notfies :restart, "service[xyz]", delayed
end
file "xyz.props" do
...
notfies :restart, "service[xyz]", delayed
end
如您所见,延迟通知是一种确保重启仅触发一次且仅在发生变化时触发的好方法,但我的问题是延迟通知在 chef-client 运行结束时触发,我有遵循此食谱需要重新启动服务的食谱,有没有办法可以在食谱结束时重新启动?
目前,我正在研究是否正在检查run_context.delayed_notification_collection
某项服务是否已被通知,并在保护中使用它。
所以在菜谱结束时我可以这样做:
service "xyz" do
action :restart
only_if notification_for("service_restart")
end
还有人有更好的想法吗?
答案1
我最终使用 node.run_state 设置了重启标志。修改配置的资源会通知 ruby 块,该块基本上会设置一个标志,例如 node.run_state[:SVC_restart] = true。最后,将使用 :restart 操作和保护程序创建服务,以检查该标志是否存在并已设置。