JBoss ApplicationServerを管理するためのカスタムパペットモジュールを開発しています。 appserverにデプロイされた各アプリケーションは、自己完結型のリソースと見なします。ただし、一部のアプリケーションでは、JBossの設定ファイルで専用の設定変更が必要です。
各アプリケーションはパペットリソースでもありますが、ほとんどのアプリケーションはお互いを認識していません。
現時点では、augeasを使用してJBossの設定ファイルに変更を加えています。これは、多くのリソースでその構成ファイルの変更が必要な場合でも機能しますが、非常に複雑で、エラーが発生しやすく、低速です。
実際には、構成ファイルにテンプレートを使用したいのですが、問題は、man configアーティファクトがどのようにあるかを知らなくても、テンプレートメカニズムをトリガーする前に、さまざまな(サブ)モジュールからの必要なアーティファクトをすべて集約する方法です。
例:
define jboss_config($config) {
# do something with the config
}
jboss_config {
config => 'some configuration for app 1'
}
jboss_config {
config => 'some configuration for app 2'
}
jboss_config {
config => 'some configuration for app 3'
}
jboss_config {
config => 'some configuration for app 4'
}
jboss_config {
config => 'some configuration for app 5'
}
#now, as all calls to "jboss_config" are done,
#perform templating of the configuration file.
「jboss_config」のすべての呼び出しが完了した後にテンプレートを1回トリガーする依存関係を定義するにはどうすればよいですか? Notifyは、各構成ステップの後にテンプレートをトリガーするため、機能していないようです。
このようなことに対する私の頼りになるアプローチは、 concat モジュールを使用することです。このモジュールは、構成ファイル自体を構築するためのすべての通知を処理し、アプリケーション固有のリソース定義でラップします。その最後の部分が意味するのは、次のようなものです。
class jboss {
concat { '/path/to/jboss/config/file':
owner => 'whoever',
group => 'whoever',
mode => 'whatever',
}
concat::fragment { 'jboss header':
target => '/path/to/jboss/config/file',
content => template('jboss/config.header.erb'),
order => 00,
}
concat::fragment { 'jboss footer':
target => '/path/to/jboss/config/file',
content => template('jboss/config.footer.erb'),
order => 99,
}
}
define jboss_config ($config) {
concat::fragment { "jboss config ${title}":
target => '/path/to/jboss/config/file',
content => template('jboss/config.item.erb'),
# Alternately, if your needs are simple enough:
#content => "${config}\n",
}
}
ファイルの連結をラップしているため、クライアントモジュールは、構成に使用している正確なメカニズムを知る必要はありません。また、必要に応じてリソースにパラメーターを追加して、自然な方法で説明することができます(つまり、構成ファイルの構文に一致する文字列を記述する必要がありますが、必要な構成データのみを指定します。)