厨师有条件地停止服务

时间:2015-07-07 00:08:06

标签: chef

我有两个食谱。

幅:: foo的 幅::酒吧

吧有服务,我们会打电话给嗡嗡声

如何在foo cookbook中执行条件依赖,以便。

  • 如果bar :: service [buzz]正在运行,则会停止
  • 如果bar :: service [buzz]未运行,则只需跳过通知。

这样的事情应该有效

幅:: foo的

powershell "do stuff" do
  code "echo derp"
  notifies :stop "service[buzz]" if node.run_list?('recipe[web::bar]')
end

但是,如果包含配方,这只会停止播放服务。如果蜂鸣器服务存在但尚未启动,则会产生副作用,但会失败。

如果定义了服务,那么最好只停止服务?

1 个答案:

答案 0 :(得分:0)

使用此语法。

if node['recipes'].include?('bar::buzz')

(您必须在食谱名称bar::前面有食谱名称buzz

管理buzz的服务需要本质上是幂等的,这样如果服务没有运行,并且无论如何都试图阻止它,它仍然会干净地退出。

感谢IRC中的coderanger澄清了这一点。

https://gist.github.com/kwilczynski/c271f251ea7f48ba99b3