it-swarm-ja.com

セルフホストの.NETサービス用のapp.configパーツの一元管理

これらのシナリオが1回限りではなく定期的である場合、これらのシナリオを処理するための最良の方法は何でしょうか。

  • 非常に多くのマシン上のセルフホストサービスは、一元化された方法で別のデータベースに再ポイントする必要があります。そのため、app.configsを変更してサービスを再起動する必要があります。
  • すべてのサービスは、新しいロギング構成(たとえば)を取得する必要があります。たとえば、App.configのセクションを更新して再起動します。

もちろん、これはPowerShellを使用して自動化できますが、そのためのツールは間違いなくあります。一部の企業はそのために構成管理システムを使用していることを知っています SaltAnsibleChef または Puppet 、しかし、それらはこの種のタスクに適していますか。

私も今Javaソリューション Spring cloud config についてですが、.NET用にこのようなものは見つかりませんでした

3
aershov

説明しているタスクは、複数の方法で解決できます。それぞれに長所と短所があるため、「最善」の方法はありません。

業界全体は、スクリプトから構成管理、不変のシステムへと進化してきました。

例として、IIS Webサーバーのweb.configを管理するには、appcmd.exeコマンドを発行します。ChefとIISクックブックを使用して抽象化します) appcmd.exeコマンドのidempotentリソース。

  iis_config "session sql_provider" do
    cfg_cmd "Foobar/#{site} -section:system.web/sessionState /+\"providers.[name='#{session_name}',connectionString='#{session_connection_string}',type='#{session_type}']\""
    action :set
      notifies :restart, 'iis_site[mysite]'
  end

ここで、「#{}」内のすべてはchef変数です。リソースが実行されると、IISサービスの再起動がトリガーされます。

Appcmd.exeを直接使用せずに、リソースに抽象化することの利点は、リソースが変数をパラメーターとして簡単に取得できることです。このようにして、コードを1回記述できますが、複数のデータセンターや環境で使用できます。最終的な目標は、すべてのタイプのサーバーのポリシーを記述し、構成管理でサーバーをポリシーに合わせることができるようにすることです。

Chef内のロギング設定ファイルを管理する別の例。

template "#{node['web']['path']}/log4net.config.xml" do
  source 'wwwroot/log4net.config.erb'
  variables(
    :log_level => node['web']['log4net']['log_level']
  )
  action :create
end

次に、xmlファイルはerbテンプレートとして「テンプレート化」されます。 <%=-%>の間はすべて変数です

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <log4net>
    <root>
      <level value="<%= @log_level -%>"/>

その後、スケジュールに従ってchefを実行できるため、変数が変更された場合に使用できます。構成管理は、ファイルを目的の状態にします。

Ansible、Chef、Puppet、Saltはすべて非常によく似た原則で動作します。

1
spuder