Linux CFEngine上的主机组

Linux CFEngine上的主机组,linux,cfengine,Linux,Cfengine,我必须编写一个用于定义各种主机组的策略,对于特定的事情,它应该根据主机组检查一组参数 例如,我有两个不同的web集群集,在一个集群上,httpd.conf保存在/usr/local/apache/httpd.conf下,在另一个集群上,它保存在/etc/httpd/httpd.conf下 我有一个检查这些配置的文件更改的策略,但我需要一种方法,可以为特定的主机组定义它应该检查的确切位置 任何提示、帮助都是非常可观的。一般的答案是为每个组定义一个类,并根据该类为变量分配适当的路径。例如: vars

我必须编写一个用于定义各种主机组的策略,对于特定的事情,它应该根据主机组检查一组参数

例如,我有两个不同的web集群集,在一个集群上,
httpd.conf
保存在
/usr/local/apache/httpd.conf
下,在另一个集群上,它保存在
/etc/httpd/httpd.conf

我有一个检查这些配置的文件更改的策略,但我需要一种方法,可以为特定的主机组定义它应该检查的确切位置


任何提示、帮助都是非常可观的。

一般的答案是为每个组定义一个类,并根据该类为变量分配适当的路径。例如:

vars:
  group1::
    "httpd_conf" string => "/usr/local/apache/httpd.conf";
  group2::
    "httpd_conf" string => "/etc/httpd/httpd.conf";
然后在文件操作中使用
$(httpd_conf)
,它将根据组具有正确的值

潜在的难题是如何定义这些类。在这种情况下,这取决于您的设置和首选项。例如,您可以通过明确列出每个组中的主机来定义类:

classes:
  "group1" or => { "host1", "host2", "host3" };
  "group2" or => { "host4", "host5", "host6" };
或者通过匹配主机名模式:

classes:
  "group1" expression => classmatch("grp1.*");
  "group2" expression => classmatch("grp2.*");
还有其他的可能性。要得到全面的治疗,请查阅我书的第六章