一部のLinuxサーバーでCFEngineを使用することを検討しています。
私の問題は、サーバーに応じて個別のポリシーを適用できる必要があることです。私は彼らのドキュメントを調べましたが、それができる、またはできないと言っているところはどこにも見つかりません。
CFEngineを使用してそれは可能ですか?または私はどこか別の場所を見る必要があります。
CFengineを使用しなかったのはかなり前のことですが、CFengineを使用しているときに同様の問題に直面しました。最後に、動的バンドルシーケンスを使用して解決策を考え出しました。古いコードスニペットをレスキューして変更しているので、構文が間違っている可能性がありますが、アイデアは得られると思います。
bundle common g {
classes:
"some_servers" expression => "someserver01|someserver02";
"another_servers" expression => "anotherserver01|anotherserver02";
# Define other classes for your hosts here as needed
vars:
any::
"bs_common" slist => {
"bundle_1"
};
some_servers::
"bs" slist => {
"@(g.bs_common)",
"bundle_2",
"bundle_3",
};
another_servers::
"bs" slist => {
"@(g.bs_common)",
"bundle_3",
};
}
body control common {
bundlesequence => {
"@(g.bs)",
};
}
クラスを使用して、ポリシーが適用される場所を定義できます。デフォルトでは、Cfengineは、実行中のすべてのサーバーのホスト名を使用してクラスを作成します。
たとえば、次の約束では、サーバーのホスト名がserver01の場合、Cfengineは「Hellomaster」を報告し(syslogをチェックしてレポートを読みます)、ホスト名がserver02の場合、Cfengineは「Helloslave」を報告します。
body common control
{
bundlesequence => { "hello" };
}
bundle agent hello
{
reports:
server01::
"Hello master!"
comment => "It's just a dummy report for server01";
server02::
"Hello slave!"
comment => "It's just a dummy report for server02";
}
追伸このサンプルポリシーは、hello.cfという名前のファイルから次のように実行できます。
cf-agent -I -f hello.cf
クラスとそれらを使用した操作の詳細については、 公式ドキュメント を参照してください。