使用 remote_file 时如何检测文件更新

How to detect file update when using remote_file

我在 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  

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"

只要您不向 notifies 提供 :immediately 参数,chef-client 就会排队所有通知并执行它们(也就是重新启动服务)一次 大厨的最后运行.