Forum: CFEngine Help
Subject: Using the new services promise types with Linux's chkconfig
Author: [email protected]
Link to topic: https://cfengine.com/forum/read.php?3,26785,26785#msg-26785
I'm converting UNIX services over from a policy that I had written that
utilized "process" and "commands" promise types over to the "services"
framework that was introduced in Cfengine 3.3.X.
Here's an example in a policy:
services:
cfengine_administrated_nfs_servers::
"nfs"
service_policy => "start",
service_method => bootstart;
In my standard_services.cf bundle that shows how to start / stop the NFS
process:
$ cat standard_services.cf
bundle agent standard_services(service, state)
{
vars:
linux::
"startcommand" string => "/etc/init.d/httpd
start";
"stopcommand" string => "/etc/init.d/httpd
stop";
"processname" string => "httpd";
"startcommand" string => "/etc/init.d/nfs start";
"stopcommand" string => "/etc/init.d/nfs stop";
"processname" string => "nfsd";
classes:
"start" expression => strcmp("start","$(state)");
"stop" expression => strcmp("stop","$(state)");
processes:
start::
".*$(processname[$(service)]).*"
comment => "Verify that the service appears in the
process table",
restart_class => "restart_$(service)";
stop::
".*$(processname[$(service)]).*"
comment => "Verify that the service does not appear in
the process table",
process_stop => "$(stopcommand[$(service)])",
signals => { "term", "kill"};
commands:
"$(startcommand[$(service)])"
comment => "Execute command to restart the $(service) service",
ifvarclass => "restart_$(service)";
}
And finally my cfengine_stdlib.cf which shows the "service_method" body promise
for bootstart.
############################################
body service_method bootstart
{
service_autostart_policy => "boot_time";
service_dependence_chain => "start_parent_services";
}
So, my question is -- how do we define the "service_method boostart" body to
actually configure chkconfig to start this service at boot time? Is this
hard-coded in the Cfengine code to "chkconfig --add " and "chkconfig on" or
does this need to be manually defined somewhere?
My policy works on bringing the service online, but chkconfig still shows it
disabled at boot time.
Shutting down NFSD and verifying that the promise brings NFSD back up.
# /etc/init.d/nfs stop
Shutting down NFS mountd: [ OK ]
Shutting down NFS daemon: [ OK ]
Shutting down NFS quotas: [ OK ]
Shutting down NFS services: [ OK ]
# /var/cfengine/bin/cf-agent -I -K -b manage_linux_nfs_servers
>> Using command line specified bundlesequence
-> Making a one-time restart promise for .*nfsd.*
-> Executing '/etc/init.d/nfs start' ...(timeout=-678,owner=-1,group=-1)
Q: "...init.d/nfs star": Starting NFS services: [ OK ]
Q: "...init.d/nfs star": Starting NFS quotas: [ OK ]
Q: "...init.d/nfs star": Starting NFS daemon: [ OK ]
Q: "...init.d/nfs star": Starting NFS mountd: [ OK ]
I: Last 4 quoted lines were generated by promiser "/etc/init.d/nfs start"
-> Completed execution of /etc/init.d/nfs start
# /var/cfengine/bin/cf-agent -I -K -b manage_linux_nfs_servers
>> Using command line specified bundlesequence
But chkconfig still shows the service not starting at boot
# chkconfig --list | grep nfs
nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
Any suggestions?
Thanks!
Mike
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine