CFengine可以在单独的系统上运行良好,但它真正的强大的地方在于它多任务及在分层网络结构环境下的集中化管控,为了说明Cfengine客户端及策略服务端的关系,下面将建两台主机,客户机名cfhost,策略服务器为cfhub,对cfhost进行配置,使它从cfhub上下载策略并执行。在开始前,我们先了解一下CFengine是怎样在网络环境下维护一个"配置状态",这有利于理解这个过程。请看下图,其中版本控制系统(Version Control )不是必须的。而你唯一要做的是把你自己的策略文件放置在/var/cfengine/masterfiles目录下,然后根据需要更新一下promises.cf这个文件(因为cf-agent默认只执行这个策略)
1、Cfengine 策略服务器
如果需要,我们可以创建Cfengine策略并保存在版本控制仓库里(但这不是必须的),一般情况,当服务器端的/var/cfengine/masterfiles里的策略改变了,Cfengine客户机将它们下载到本机的/var/cfengine/inputs。
2、在经过一段间隔时间后(默认是5分钟),客户机的cf-execd常驻进程便启动cf-agent进程,它会检查策略服务中心的/var/cfengine/masterfiles/promises.cf并判断是否有更新。如果有,就把更新的内容下载到/var/cfengine/inputs目录,然后执行。而如果没有更新,cf-agent还是会再执行一次inputs里的promies.cf,从而使用系统维持在一种"配置状态"。
这个练习的目标是检查策略服务器及客户机的/tmp目录下是否有具cf_test_file的文件存,如果不存在,我们将指示CFengine去创建它,另外,我们还要求Cfengine要确保文件的权限属性为644,文件的所有者为root,所属组为 sys。下面为具体步骤。
1、登录cfhub(策略服务器),(具体安装cfengine请参考我的上一博文),查找cfhub本机的名字或ip地址,这里假设是172.16.100.134,使用下面的命令让它成为策略服务器:
root@cfhub# /var/cfengine/bin/cf-agent --bootstrap --policy-server 172.16.100.134
2、如果一切正常,你将看到如下信息(已经省略部分,下面这条是最后一条)
-> Bootstrap to 172.16.100.134 completed successfully
3、回到cfhost客户机,启动cf-agent并将它的策略服务器指向172.16.100.134,并确认能正常启动
root@cfhost# /var/cfengine/bin/cf-agent --bootstrap --policy-server 172.16.100.134
4、回到cfhub服务器,切换到/var/cfengine/masterfiles目录,新建 一个名为cftest1.cf的策略文件,并将以下内容复制进去,然后保存。
bundle agent test { files: "/tmp/cf_test_file" comment => "Promise that a plain file exists with stated permissions", perms => mog("644", "root", "sys"), create => "true"; }
5、在cfhub上,打开编辑/var/cfengine/masterfiles/promises.cf,并定位到"body common control"部分:
body common control { bundlesequence => { "main" }; inputs => { "cfengine_stdlib.cf", }; version => "Community Promises.cf 1.0.0"; }
在这部分里加新的"bundle name” ,即test,以下input file (见红色部分)
body common control { bundlesequence => { "main","test" }; inputs => { "cfengine_stdlib.cf", "cftest1.cf", }; version => "Community Promises.cf 1.0.0"; }
保存。
6、这里我们可以等待5分钟或更短的时间,让它自动执行,但为了更快看到效果,我们回到cfhost机,手机执行
root@cfhost#/var/cfengine/bin/cf-agent -Kv #‘-K 可以跳过时间锁,-v 可以看到详细的输出。
执行完这命令后,你可以在cfhost和cfhub的/tmp/看到一个cf_test_file文件,你可以校对一下它的权限。另外,你会在cfhost的/var/cfengine/inputs里看到cftest1.cf文件,而且里的promises.cf已经修改,
cfengine可以运行在更复杂的环境里,如下图: