我正在尝试找出一种方法来使用Chef配方中的Subversion资源来将现有文件与存储库中的HEAD修订版进行比较。
现在看起来Subversion资源只会导出文件,覆盖现有文件。这对我不起作用,因为我想将它用于服务配置文件,如果文件不同则发出重启。
目前我正在将当前版本从repo导出到临时文件。然后我通知bash资源来区分文件 - 如果不同,则替换现有文件并重新启动服务。这是一个额外的开销,只是为了复制现有资源的功能(即cookbook_file和模板)。
注意:我不想修改文件,然后在每次更改时上传菜谱。我需要其他管理员才能修改配置文件,而无需深入了解Chef。
甚至可以使用Subversion资源吗?如果没有,我可以使用另一种资源/方法吗?
答案 0 :(得分:1)
我不使用颠覆,所以请提前道歉。
chef中的subversion资源支持4个操作。文档并不完全清楚,但我想知道在代码更改时是否可以使用其中一个来触发notification:
subversion "My Project" do
repository "http://svn.myorg/repos/myproject/trunk"
revision "HEAD"
destination "/opt/myproject"
action :checkout
notifies :restart, "service[helloworld]", :delayed
end
答案 1 :(得分:0)
因此,在使用了一段时间之后,我发现我无法使用subversion资源。 subversion资源总是会触发通知或覆盖文件。
我必须使用SVN HTTP凭证来使用remote_file资源。
我的解决方案看起来像这样:
execute "service_restart" do
command "restorecon /etc/path/configFile; service serviceName restart"
action :nothing
end
remote_file "/etc/path/configFile" do
source "http://svnUser:svnPath@subversion.domain.net/repo/path/configFile"
owner "root"
group "root"
mode 0444
notifies :run, "execute[service_restart]", :immediately
end
注意:我知道这不是重启服务的最佳方式,但我必须以这种方式为此服务执行此操作。使用remote_file资源的一般想法是重要的。