我正在考虑在某些 Linux 服务器上使用 CFEngine。
我的问题是我需要能够根据服务器应用单独的策略。我查看了他们的所有文档,但找不到任何地方说可以或不可以这样做。
使用 CFEngine 可以做到这一点吗?或者我应该去别处看看。
答案1
很久没有使用 CFengine 了,但我们在使用它时也遇到了类似的问题。最后,我们想出了一个解决方案,使用动态 bundlesequence。我正在抢救和修改一段旧的代码,所以语法可能不对,但我想你会明白的。
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
您可以使用类来定义策略的应用位置,默认情况下,Cfengine 会使用其运行的每个服务器的主机名创建一个类。
例如,在以下承诺中,如果服务器主机名是 server01,Cfengine 将报告“Hello master”(检查 syslog 以读取报告),如果主机名是 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
您可以在以下位置找到有关类以及使用它们的操作的更多信息官方文档。