# An example cfengine file that does simple maintenance and # configures a web server if the class 'web_server' is defined. control: any:: # the list of things to do: actionsequence = ( links packages shellcommands editfiles tidy disable files copy processes ) # we use RPMs for our packages: DefaultPkgMgr = ( rpm ) # Email me, and don't try to use any local SMTP servers! sysadm = ( hostmaster@example.com ) smtpserver = ( mx1.example.com ) classes: # If the class host1 is defined, then define the class 'web_server' web_server = ( host1 ) packages: web_server:: "httpd" elsedefine=no_rpm_httpd processes: web_server:: # if you don't see any matches, restart with the 'restart' script. # you don't have to parse the restart script in a subshell. # also, if no matches then define 'http_chkconfig'. matches>0 restart "/etc/init.d/httpd start" useshell=false elsedefine=httpd_chkconfig shellcommands: # on the first pass, no_rpm_httpd is defined (from 'packages'). no_rpm_httpd:: "/usr/sbin/up2date --solvedeps=httpd" # on the first cfengine pass, 'processes' hasn't run yet. # on the second (internal) cfengine pass, 'httpd_chkconfig' is defined. # this statement is *below* 'processes' in this file so cfengine # knows that we might need the value of all the classes # that could be defined in the 'processes' section. # See the article's "POTENTIAL PROBLEMS" section for more information. httpd_chkconfig:: "/sbin/chkconfig httpd on" editfiles: any:: # Autocreate means create the file if it doesn't exist. # AppendIfNoSuchLine is whitespace-sensitive. { /etc/hosts AppendIfNoSuchLine "127.0.0.1 localhost.localdomain localhost" Autocreate } links: any:: # create this relative link *from* /etc/init.d to rc.d/init.d /etc/init.d -> rc.d/init.d tidy: web_server.redhat:: # both Red Hat and a web server # delete the annoying configuration file immediately (age=0) /etc/httpd/conf.d/welcome.conf age=0 disable: any:: /etc/hosts.equiv files: any:: # put files you find in the MD5 checksum database. cfengine # will start complaining if the checksums change, unless you # set the control variables 'ChecksumPurge' and 'ChecksumUpdates' # to 'on'. /bin checksum=md5 owner=root,rpm recurse=inf web_server:: # make sure the group permissions are correct. act=fixall # means actually fix the problem rather than just warning about it. /etc/httpd/conf group=apache act=fixall mode=0664 recurse=inf copy: web_server:: # copy # cfserver.example.com:/cfserver/config/server/web_server/conf.d # to '/etc/httpd/conf.d' # using cfengine's cfservd to get the files. /cfserver/config/server/web_server/conf.d dest=/etc/httpd/conf.d recurse=inf ignore=CVS mode=0644 server=cfserver.example.com alerts: # Alerts do not have to be specified in the actionsequence. # If the condition is true, then cfengine will notify you with the # message you provide. httpd_chkconfig:: "I turned on chkconfig for you."