Subscribes/Notifies 在厨师中

Subscribes/Notifies in Chef

我最近开始研究 CHEF 食谱,并试图在 CHEF

中了解 subscribes/notifies

场景:写了一个安装 sendmail 包的方法,在 CHEF 上有一个 sendmail.mc 的本地副本,我正在节点 [Client] 上部署。

我读到了 notifies/subscribes,我想做的是当 /etc/mail/sendmail 的 sendmail.mc 文件发生变化时。mc sendmail 服务应该被循环。

我正在为其使用订阅。 但是当我手动更改客户端上的 sendmail.mc 以触发 Chef 覆盖文件并等待为 sendmail 重新启动服务时,我看到以下错误

  • service[sendmail] action nothing (skipped due to action :nothing)

package "sendmail"

service "sendmail" do
    action [:enable, :start] 
end 

cookbook_file '/etc/mail/sendmail.mc' do
    action [:create]
    source 'sendmail.mc'
    owner 'root'
    group 'root'
end

service 'sendmail' do
    subscribes :restart, 'file[/etc/mail/sendmail.mc]', :immediately
end

我认为重复的 service 同名定义 ("sendmail") 可能是一个原因。但是您的订阅目标也是错误的资源 file 而不是 cookbook_file!

鉴于大多数用户和 public 食谱使用“notifies”而不是“subscribes”,我会重写它至:

package 'sendmail'

cookbook_file '/etc/mail/sendmail.mc' do
  source 'sendmail.mc'
  owner 'root'
  group 'root'
  action :create
  notifies :restart, 'service[sendmail]', :immediately # not sure about the *:immediately* here, usually at the end of converge is sufficient.
end

service 'sendmail' do
  action [:enable, :start]
end