Chef - 使用Subversion资源进行差异/通知

时间:2013-09-04 21:07:47

标签: chef

我正在尝试找出一种方法来使用Chef配方中的Subversion资源来将现有文件与存储库中的HEAD修订版进行比较。

现在看起来Subversion资源只会导出文件,覆盖现有文件。这对我不起作用,因为我想将它用于服务配置文件,如果文件不同则发出重启。

目前我正在将当前版本从repo导出到临时文件。然后我通知bash资源来区分文件 - 如果不同,则替换现有文件并重新启动服务。这是一个额外的开销,只是为了复制现有资源的功能(即cookbook_file和模板)。

注意:我不想修改文件,然后在每次更改时上传菜谱。我需要其他管理员才能修改配置文件,而无需深入了解Chef。

甚至可以使用Subversion资源吗?如果没有,我可以使用另一种资源/方法吗?

2 个答案:

答案 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资源的一般想法是重要的。