Chef infra 厨师有条件停止服务
我有两个食谱 web::foo web::bar 酒吧有服务,我们会打电话给buzz 如何在foo cookbook中实现条件依赖性,以便Chef infra 厨师有条件停止服务,chef-infra,Chef Infra,我有两个食谱 web::foo web::bar 酒吧有服务,我们会打电话给buzz 如何在foo cookbook中实现条件依赖性,以便 如果bar::service[buzz]正在运行,它将停止 如果bar::service[buzz]未运行,则跳过通知 像这样的东西应该有用 web::foo powershell "do stuff" do code "echo derp" notifies :stop "service[buzz]" if node.run_list?('re
- 如果bar::service[buzz]正在运行,它将停止
- 如果bar::service[buzz]未运行,则跳过通知
powershell "do stuff" do
code "echo derp"
notifies :stop "service[buzz]" if node.run_list?('recipe[web::bar]')
end
但是,这仅在包含配方的情况下停止buzz服务。它的副作用是,如果buzz服务存在,但尚未启动,它将失败
如果定义了服务,那么停止服务的最佳方式是什么 使用此语法
if node['recipes'].include?('bar::buzz')
(食谱名称前必须有食谱名称栏::
管理buzz的服务需要本质上是幂等的,这样,如果该服务没有运行,并且它无论如何都试图停止它,它仍然会干净地退出
感谢IRC中的coderanger澄清了这一点
使用node['recipes']存在风险。事情可能已经发生了变化,但上一次我看到的只是扩展的run_列表中包含的食谱。由于
include\u recipe
语句,它没有包含任何运行的配方。在您的用例中,这可能是可以的,但我想我应该指出这一点。另外-您是否考虑过使用status\u命令
来查询它?status_command参数允许您在调用服务时指定任意命令。您可以将其存储在一个变量中,以便进行if检查或类似操作