Chef infra 厨师长-使用Subversion资源区分/通知

Chef infra 厨师长-使用Subversion资源区分/通知,chef-infra,Chef Infra,我试图找到一种方法,使用厨师食谱中的Subversion资源将现有文件与存储库中的HEAD修订版进行比较 现在看起来Subversion资源将只导出文件,覆盖现有文件。这对我不起作用,因为我想将其用于服务配置文件,如果文件不同,则发出重新启动 目前,我正在将当前版本从repo导出到临时文件。然后我通知bash资源来区分文件-如果不同,则替换现有文件并重新启动服务。这是一个很大的额外开销,只是为了复制现有资源(即cookbook_文件和模板)的功能 注意:我不想每次有变化时都要修改一个文件然后上传

我试图找到一种方法,使用厨师食谱中的Subversion资源将现有文件与存储库中的HEAD修订版进行比较

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

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

注意:我不想每次有变化时都要修改一个文件然后上传食谱。我需要其他管理员能够修改配置文件,而不需要深入的厨师知识


使用Subversion资源是否可能做到这一点?如果没有,我是否可以使用其他资源/方法来执行此操作?

我不使用subversion,请提前道歉

chef中的资源支持4个操作。文档并不完全清楚,但我想知道当代码更改时,是否可以使用其中一个来触发:

subversion "My Project" do
  repository "http://svn.myorg/repos/myproject/trunk"
  revision "HEAD"
  destination "/opt/myproject"
  action :checkout
  notifies :restart, "service[helloworld]", :delayed
end

所以在做了一段时间之后,我发现我不能使用subversion资源来做这个。subversion资源将始终触发通知或覆盖文件

我必须使用远程文件资源,使用SVN HTTP凭据

我的解决方案如下所示:

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

注意:我知道这不是重新启动服务的最佳方式,但我必须为这项服务这样做。不过,使用远程文件资源的一般想法很重要。

您找到解决此问题的方法了吗?回答你自己的问题没关系。请不要忘记将答案标记为正确!:)