特定客户端如何从 cfengine 服务器获取策略

特定客户端如何从 cfengine 服务器获取策略

我正在研究 CFEngine,但我对这个概念还很陌生。根据我的要求,我使用单个服务器并使用 10 个客户端,现在所有十个客户端都从服务器提取策略并执行策略。

但我的要求是,该策略仅适用于 10 个客户端中的一个,特定客户端如何才能仅提取策略并执行它。

请给我建议,我对此非常困惑。

谢谢

答案1

maciejmrowiec 的答案很好,但不完整;CFEngine 没有义务在所有节点上做出相同的承诺;但这是默认行为

有两种方法可以实现您想要做的事情:

  1. 到处都有相同的承诺(默认实现),并使用类来控制哪个主机做什么(为此,我请您参考 maciejmrowiec 的回答,该回答对这个话题相当全面)
  2. 在不同的系统上有不同的承诺。有理由不希望所有系统都具有相同的承诺:您不想共享的秘密、测试/预生产/生产环境(干扰测试承诺不应破坏生产)。因此,您可以拥有不同的承诺集,并将它们存储在策略服务器上的不同文件夹中(例如 /var/cfengine/masterfiles/folder1 和 /var/cfengine/masterfiles/folder2);并配置 cf-server 以仅将这些文件夹共享给正确的主机

    bundle server access_rules() {
      access:
        "/var/cfengine/masterfiles/share/folder1"
            admit => { "host1", "host2", "host3" };
    
        "/var/cfengine/masterfiles/folder2"
           admit   => { "host55" };
    }
    

并让 update.cf 文件从正确的位置复制承诺

    host55::
      "$(sys.workdir)"
        copy_from =>u_rcp("/var/cfengine/masterfiles/folder2", "$(sys.policy_hub)");


    !host55::
      "$(sys.workdir)"
        copy_from =>u_rcp("/var/cfengine/masterfiles/folder1", "$(sys.policy_hub)");

答案2

正如我正确理解的那样,您想要控制哪个策略应该转到特定节点来执行?

CFEngine 的工作方式是将所有策略分发给所有客户端并执行。为了控制在哪台机器上执行什么,cfengine 策略语言中有一种称为上下文类的机制。

上下文类只是可以具有 2 种状态的系统属性 - 存在或不存在。例如,您的机器是 Debian 系统,那么要在所有 Debian 系统上执行策略,您将使用此类来确定其适用范围。有一些硬类是由 cfengine 自动发现的,您可以自行设置。要指向特定机器,您可以使用 IP、MAC 或主机名,它们也设置为类。

为什么需要将所有策略分发给所有客户端?因为有些系统属性不像操作系统或主机名那样恒定。类别可能取决于正在运行的服务或 CPU 负载、硬盘是否已满等。然后,您需要有完整的策略来了解如何应对不断变化的环境,因为每次您想要运行策略时都会设置类别。

如何使用上下文类?以下是简单策略的示例:

bundle agent my_test
{
 files:
  debian::            #hardclass
   "/tmp/file1"
    create => "true";

  redhat::             #hardclass
   "/tmp/file2"
    create => "true";
}  

此策略将在所有 debian 系统上创建 /tmp/file1,并在所有 redhat 系统上创建 /tmp/file2。

您可以使用逻辑表达式,例如 ipv4_192_168_122_116.cpu_high,表示在 IP 为 192.168.122.116 的主机上运行并且该机器的 CPU 负载很高。

要获取更多有趣的示例,请尝试以下操作:https://github.com/cfengine/design-center/tree/master/examples

参考手册始终是一个很好的参考点:http://cfengine.com/manuals/cf3-Reference#Decisions

要列出当前机器上设置的类,可以使用“cf-promises -v”

我希望这对你有帮助。

相关内容