web-dev-qa-db-ja.com

CFEngine-異なるサーバーに個別のポリシーを適用する

一部のLinuxサーバーでCFEngineを使用することを検討しています。
私の問題は、サーバーに応じて個別のポリシーを適用できる必要があることです。私は彼らのドキュメントを調べましたが、それができる、またはできないと言っているところはどこにも見つかりません。
CFEngineを使用してそれは可能ですか?または私はどこか別の場所を見る必要があります。

2
Azzie Rogers

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)",
    };
}
2
Alvaro

クラスを使用して、ポリシーが適用される場所を定義できます。デフォルトでは、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

クラスとそれらを使用した操作の詳細については、 公式ドキュメント を参照してください。

2
Luiz Viana