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

时间:2016-10-31 01:59:53

标签: ruby chef chef-recipe

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

1 个答案:

答案 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就会排队所有通知并执行它们(也就是重启服务)一次在厨师运行结束时。