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
我最近开始研究 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