我在for循环中使用remote_file来浏览部署文件(在节点属性中指定)。我验证给定的校验和(sha256sum)以查看现有文件是否相同;如果没有,我会更新它们;如果相同,它只是跳过。
我需要在配方中知道是否有任何文件已更新,以便在部署目录下更改任何文件时重新启动应用服务器。
是否有任何我可以使用的默认属性(它告诉所有文件更新都被跳过)或者是什么是完成它的最佳方法?
谢谢,
node['app']['deployments'].each do |file, value|
remote_file "/apps/deployments/#{value['file-name']}" do
source "file:///tmp/deployments/#{value['file-name']}"
checksum value['check-sum']
end
end
答案 0 :(得分:2)
Chef中有notifications的概念,在这种情况下可以帮助您:
node['app']['deployments'].each do |file, value|
remote_file "/apps/deployments/#{value['file-name']}" do
source "file:///tmp/deployments/#{value['file-name']}"
checksum value['check-sum']
notifies :restart, 'service[appserver]'
end
end
service "appserver"
只要您不向:immediately
提供notifies
参数,chef-client就会排队所有通知并执行它们(也就是重启服务)一次在厨师运行结束时。