Forum: CFEngine Help
Subject: Dealing with vars changing
Author: jonesy1234
Link to topic: https://cfengine.com/forum/read.php?3,24603,24603#msg-24603

I have a setup that requires a slightly different value for a var depending a 
class. For example most of my systems run standard AIX syslog, two run 
syslog-ng. The following code works ok but is there a better way of dealing 
with situations like this?



bundle agent manage_core_services {

vars:

   "service" slist      => { "ntp", "ssh", "syslog", "inetd" };

methods:

   "any" usebundle      => fix_service("$(service)"),
         comment        => "Make sure the basic application services are 
running";

}

#######################################################################
bundle agent fix_service(service) {

vars:

   #NTP
   "daemon"          string => "xntpd";
   "process"         string => "/usr/sbin/xntpd";
   "argument"        string => " -x";
   "cfg_file"        string => "/etc/ntp.conf";
   "cfg_source"      string => "/etc/ntp.conf";
   "mode"            string => "0664";
   "user"            string => "root";
   "group"           string => "system";

   #SSH
   "daemon"          string => "sshd";
   "process"         string => "/usr/sbin/sshd";
   "argument"        string => "";
   "cfg_file"        string => "/etc/ssh/sshd_config";
   "cfg_source"      string => "/etc/ssh/sshd_config";
   "mode"            string => "0644";
   "user"            string => "root";
   "group"           string => "system";

   #INETD
   #Everthing but the nim servers and vios use the standard inetd.conf file
   "daemon"          string => "inetd";
   "process"         string => "/usr/sbin/inetd";
   "argument"        string => "";
   "cfg_file"        string => "/etc/inetd.conf";
   "mode"            string => "0644";
   "user"            string => "root";
   "group"           string => "system";

   #SYSLOG
   #Everything but the nim servers run the standard syslog daemon
   "mode"         string => "0644";
   "user"         string => "root";
   "group"        string => "system";
   "argument"     string => "";

   !nim_server::

        #SYSLOG
        "daemon"       string => "syslogd";
        "process"      string => "/usr/sbin/syslogd";
        "cfg_file"     string => "/etc/syslog.conf";
        "cfg_source"   string => "/etc/syslog.conf";

        #INETD
        "cfg_source"    string => "/etc/inetd.conf";

   nim_server::

        #SYSLOG Add exception for nim servers as they are running syslog-ng
        "daemon"       string => "syslogng";
        "process"      string => "/sbin/syslog-ng";
        "cfg_file"     string => "/etc/syslog-ng/syslog-ng.conf";
        "cfg_source"   string => "/etc/syslog-ng/syslog-ng.conf";

        #INETD nim server uses different inetd conf file
        "cfg_source"    string => "/etc/inetd.conf.nim_server";

files:

    "$(cfg_file[$(service)])"

        comment    => "Copy standard configuration file from master policy 
server",
        handle     => "sync_standard_config_files",
        copy_from  => 
secure_cp("$(g.master_conf_root)$(cfg_source[$(service)])", 
"$(g.policy_server)"),
        perms      => 
mog("$(mode[$(service)])","$(user[$(service)])","$(group[$(service)])"),
        classes    => if_repaired("$(service)_restart"),
        action     => log_to_syslog("repaired","file_$(cfg_file[$(service)])");

processes:

        "$(process[$(service)])"

                comment         => "Check that the server process is running, 
and start if necessary",
                handle          => "check_daemon_running",
                restart_class   => canonify("$(service)_restart");

commands:

    "/usr/bin/stopsrc -s $(daemon[$(service)])",
      handle     => "stopsrc_daemon",
      action     => log_to_syslog("stop","daemon_$(daemon[$(service)])"),
      ifvarclass => canonify("$(service)_restart");

    "/usr/bin/startsrc -s $(daemon[$(service)]) -a \"$(argument[$(service)])\"",
      handle     => "startsrc_daemon",
      action     => log_to_syslog("start","daemon_$(daemon[$(service)])"),
      ifvarclass => canonify("$(service)_restart");

}


So as you can see I have to set the vars twice, once for the nim_server class 
and once for all others. The logic for this ordering can get very confusing 
when there are multiple classes that need different values. The only other 
option I can think of is putting a policy => "overridable"; on all the vars 
that I want to have another value so they get redefined but that looks ugly in 
the verbose output.

Anyone have any other suggestion?

Cheers

_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to