У меня есть рецепт, который выглядит так:
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
Как вы можете видеть, отложенное уведомление - это хороший способ убедиться, что перезапуск запускается только один раз и только при изменениях, но моя проблема заключается в том, что уведомления с задержкой запускаются в конце запуска шеф-клиента, у меня есть рецепты, следующие за этим, которые нуждаются в служба перезапущена, есть ли способ выполнить перезапуск в конце рецепта?
Сейчас я смотрю, возможно, исследую run_context.delayed_notification_collection
чтобы узнать, получает ли служба уведомление и использует ли это в охране.
так что в конце рецепта я могу сделать:
service "xyz" do
action :restart
only_if notification_for("service_restart")
end
Есть ли у кого-нибудь идеи получше?
Я завершил использование node.run_state, чтобы установить флаг для перезапуска. Мои ресурсы, изменившие конфигурацию, будут уведомлять рубиновый блок, который в основном устанавливает флаг, например node.run_state [: SVC_restart] = true. И затем, в конце, служба будет создана с действием: перезапуск и охраной, чтобы проверить, существует ли и установлен ли этот флаг.