Назад | Перейти на главную страницу

CFEngine - применение отдельных политик к разным серверам

Я собираюсь использовать CFEngine на некоторых серверах Linux.
Моя проблема в том, что мне нужно иметь возможность применять отдельные политики в зависимости от сервера. Я просмотрел всю их документацию и не нашел нигде, где говорится, что это можно или нельзя сделать.
Возможно ли это с помощью CFEngine? Или мне стоит поискать в другом месте.

Вы можете использовать классы, чтобы определить, где будут применяться политики, и по умолчанию Cfengine создает класс с именем хоста каждого запущенного сервера.

Например, в следующем обещании, если имя хоста сервера - server01, Cfengine сообщит «Hello master» (проверьте системный журнал, чтобы прочитать отчеты), если имя хоста - server02, Cfengine сообщит «Hello slave»:

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

Вы можете найти больше информации о классах и операциях с их использованием в официальные документы.

Давненько мы не использовали 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)",
    };
}