在厨师运行结束时执行任意操作

时间:2014-09-15 12:56:35

标签: chef

有没有办法在厨师运行结束时执行脚本,以及延迟通知(或者,如果可能,甚至在它们之后)?具有:notifies标志的模板资源:delayed允许执行此操作,但如果您要执行的操作未绑定到任何模板更新,则这不适合。当然,可以通过创建一个模板并使用一个总是更改并添加:notifies属性的值填充它来破解它,但这真的很糟糕,我想避免这种情况。这样的事情会很棒:

execute "foobaz" do
  command "runfoobaz.sh"
  action :delayed_run
end

现在执行资源中的action属性没有这样的选项。

1 个答案:

答案 0 :(得分:2)

来自Tomasz评论:

  

由于大厨> = 12.5,使用处理程序变得更加简单。现在可以在特定事件上执行任何ruby代码,并声明内联配方,包括运行结束。见https://docs.chef.io/dsl_handler.html

这是创建处理程序以在特定事件上运行某些事件的首选方法(可以是运行结束)。


作为两个第一段的记录的旧答案。

最佳解决方法是使用ruby_blocklog资源来通知您的执行结束。

所有资源都可以通知它们是否被更改,而不仅仅是模板。所以任何不符合要求的资源都会这样做。

另一个选择是使用在厨师运行结束时运行的Chef :: Handlers,即使它在某个地方失败,你可能希望看一下windows待处理的rebbot处理程序。

请参阅代码HERE

关于处理程序的文档是HERE

编辑备注:听起来您希望与厨师做一些奇怪的事情,知道您想要实现什么或者该命令应该做什么可以帮助理解和提出通知和处理程序之间的正确解决方案。