0

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

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

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

注意:我不想每次有更改时都必须修改文件然后上传食谱。我需要其他管理员能够修改配置文件,而无需深入的 Chef 知识。

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

4

2 回答 2

1

I don't use subversion, so apologies in advance.

The subversion resource in chef supports 4 actions. The documentation is not entirely clear but I wonder if one of these could be used to trigger a notification when the code changes:

subversion "My Project" do
  repository "http://svn.myorg/repos/myproject/trunk"
  revision "HEAD"
  destination "/opt/myproject"
  action :checkout
  notifies :restart, "service[helloworld]", :delayed
end
于 2013-09-04T23:04:38.540 回答
0

因此,在处理了一段时间后,我发现我无法为此使用颠覆资源。颠覆资源总是会触发通知或覆盖文件。

我必须使用 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 资源的总体思路很重要。

于 2014-01-06T16:18:08.743 回答