厨师:有条件地通知资源

时间:2017-10-30 20:54:26

标签: chef

我有一个案例,我试图在Chef中创建systemd_unit来创建服务。一旦创建了服务(假设它不是最​​新的),我想启动它,然后只有在刚创建服务时我想调用bash脚本来执行一些初始化在它上面。

我从这开始:

systemd_unit 'mysvc.service' do
  content({
   .
   .
   .
  })
  action [ :create ]
  notifies :run, 'bash[mysvc.init]', :delayed
 end

 bash 'mysvc.init' do
   code <<-CODE
     .
     .
     .
   CODE
   action :nothing
 end

 systemd_unit 'mysvc.service' do
   action [ :enable, :start ]
 end

我的期望是,如果:create在systemd_unit上运行,我的bash脚本就会执行。由于bash脚本标记为:nothing,它不会再运行任何时间。

不幸的是,这并不是我得到的行为。实际发生的是,如果执行systemd_unit的:create或[:enable,:start]块,则运行我的bash脚本。如果我已经初始化了我的服务中的数据,尝试重新初始化将失败,这不会起作用。

如何仅在新创建服务时让我的bash脚本运行

1 个答案:

答案 0 :(得分:0)

这不是我们支持的事情。 updated?标志(内部通知功能)有意模糊,对每个资源都意味着不同的东西,但通常在资源采取任何行动时它都会被视为已更新。这看起来好像我们搞砸了systemd_unit的实现,并且直接使用了资源名称而不是名称属性:(我至少会得到一张票来解决这个问题。