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

我正在CFEngine上工作,但我是这个概念的新手。 为我的要求我使用单个服务器,我使用10个客户端,现在所有的十个客户端从服务器拉政策和执行政策。

但是我的要求是,这个策略只适用于10个客户端,那么这个客户端怎么才能把这些策略拉出来执行。

请给我提个build议,我很困惑。

谢谢

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

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

  1. 在任何地方都有相同的承诺(默认实现),并使用类,控制哪个主机做什么(为此我把你的maciejmrowiec的答案,这是非常全面的话题)
  2. 在不同的系统上有不同的承诺。 为什么你不希望所有的系统都有同样的箴言:你不希望分享的秘密,testing/预制/产品环境(与testing承诺混为一谈不应该打破生产)。 因此,您可以拥有不同的承诺组,并将其存储在策略服务器上的不同文件夹上(如/ var / cfengine / masterfiles / folder1和/ var / cfengine / masterfiles / folder2)。 并将cf-serverconfiguration为仅将这些文件夹共享到正确的主机

    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)"); 

据我了解正确,你想控制哪个政策应该去特定节点得到执行?

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系统上创build/ tmp / file1,在所有的redhat系统上创build/ tmp / file2。

你可以使用像ipv4_192_168_122_116.cpu_high这样的逻辑expression式,这个expression式在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'

我希望这会帮助你。