厨师:有条件地通知资源



我有一个案例,我正在尝试在 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 脚本仅在新创建服务时运行?

这不是我们真正支持的事情。updated?标志(在内部为通知提供支持)故意含糊不清,对于每个资源意味着不同的东西,但通常每当资源执行任何操作时,它都会计为已更新。这加剧了这样一个事实,即看起来我们在systemd_unit的实现上搞砸了,并直接使用资源名称而不是名称属性:(我至少会得到一张票来解决这个问题,以备将来使用。

最新更新