仅当特定目录中的文件已更新时,如何才能告诉Chef上的服务资源重新启动?

时间:2020-08-12 01:12:57

标签: tomcat chef-infra

我正在主厨经营雄猫。在我的食谱中,tomcat首先启动,但后来,在食谱中,我将文件从我的食谱转移到节点上的目录中。更新文件后,仅当文件已更改时,我才需要Tomcat重新启动。我该如何实现?

这是我到目前为止所拥有的:

#tomcat is currently running

cookbook_file "#{run_dir}/run.conf"  do
  source 'run.conf'
  owner 'tomcat'
  mode '0644'
end

tomcat_service 'default' do
  action [:restart]
  only_if # only if "#{run_dir}/run.conf" has been updated as shown above
end

1 个答案:

答案 0 :(得分:2)

您应该使用称为notifications的功能。这样,Chef资源可以通知(notifies)或侦听(subscribes)其他资源进行更改。

在您的情况下,如果cookbook_file资源更改了节点上的run.conf,则应“通知” tomcat_service资源以重新启动。 示例:

# Tomcat is currently running

cookbook_file "#{run_dir}/run.conf" do
  source 'run.conf'
  owner 'tomcat'
  mode '0644'
  notifies :restart, 'tomcat_service[default]', :delayed
end

tomcat_service 'default' do
  action :nothing
end

通知可以触发操作:immediately:delayed。在上面的示例中,服务重启将被触发,但是在Chef-client运行结束时(考虑任何其他:restart动作)。如果要在文件更改后立即重新启动,则应使用:immediately