0

Chef レシピで Subversion リソースを使用して、既存のファイルをリポジトリの HEAD リビジョンと比較する方法を見つけようとしています。

現在、Subversion リソースはファイルをエクスポートし、既存のファイルを上書きしているようです。サービス構成ファイルにこれを使用し、ファイルが異なる場合は再起動を発行したいので、これはうまくいきません。

現在、現在のバージョンをレポから一時ファイルにエクスポートしています。次に、ファイルを比較するように bash リソースに通知します。異なる場合は、既存のファイルを置き換えて、サービスを再起動します。これは、既存のリソース (つまり、cookbook_file とテンプレート) の機能を複製するためだけに、多くの余分なオーバーヘッドになります。

注: 変更があるたびにファイルを変更してクックブックをアップロードする必要はありません。Chef の深い知識がなくても、他の管理者が構成ファイルを変更できるようにする必要があります。

これは Subversion リソースを使用しても可能ですか? そうでない場合、これを行うために使用できる別のリソース/方法はありますか?

4

2 に答える 2

1

私はSubversionを使用していないので、事前にお詫び申し上げます。

シェフのSubversionリソースは 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
于 2013-09-04T23:04:38.540 に答える
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 リソースを使用するという一般的な考え方は重要です。

于 2014-01-06T16:18:08.743 に答える