diff --git a/misc/init.d/cfengine3.in b/misc/init.d/cfengine3.in index bb320630a8b..98113d3b2aa 100644 --- a/misc/init.d/cfengine3.in +++ b/misc/init.d/cfengine3.in @@ -53,6 +53,7 @@ fi CFEXECD=${CFTEST_CFEXECD:-$PREFIX/bin/cf-execd} CFSERVD=${CFTEST_CFSERVD:-$PREFIX/bin/cf-serverd} CFMOND=${CFTEST_CFMOND:-$PREFIX/bin/cf-monitord} +CFREACTORD=${CFTEST_CFREACTORD:-$PREFIX/bin/cf-reactor} CFAGENT=${CFTEST_CFAGENT:-$PREFIX/bin/cf-agent} PIDFILE_TEMPLATE=$PREFIX/%s.pid @@ -114,6 +115,7 @@ if [ "$DEBIAN" = "1" ]; then else DEFAULT=/etc/sysconfig/cfengine3 fi +DEFAULT=${CFTEST_DEFAULT:-$DEFAULT} if [ -f $DEFAULT ]; then . $DEFAULT @@ -121,6 +123,7 @@ else RUN_CF_EXECD=1 RUN_CF_SERVERD=1 RUN_CF_MONITORD=1 + RUN_CF_REACTOR=1 fi # Check /sbin/startproc for SUSE @@ -227,7 +230,7 @@ cf_get_matching_pids() for pid in $pids; do # If the last character of the cgroup is not the root directory, # then this is a container process. - if [ -f /proc/$pid/cgroup ] && sed 's_/\(-\|system\|user\).slice__;s_/user-[0-9]*.slice__;s_/session-[0-9]*.scope__;s_/cfengine3.service__;s_/cf-execd.service__;s_/cf-serverd.service__;s_/cf-monitord.service__' /proc/$pid/cgroup | egrep '[0-9]+:devices:/[^:]' > /dev/null; then + if [ -f /proc/$pid/cgroup ] && sed 's_/\(-\|system\|user\).slice__;s_/user-[0-9]*.slice__;s_/session-[0-9]*.scope__;s_/cfengine3.service__;s_/cf-execd.service__;s_/cf-serverd.service__;s_/cf-monitord.service__;s_/cf-reactor.service__' /proc/$pid/cgroup | egrep '[0-9]+:devices:/[^:]' > /dev/null; then if [ $INSIDE_CONTAINER = 1 ]; then echo $pid fi @@ -501,6 +504,11 @@ cf_start_core_daemons() if [ "$RUN_CF_MONITORD" = "1" ]; then cf_start_daemon "$CFMOND" fi + + # start cf-reactor + if [ "$RUN_CF_REACTOR" = "1" ]; then + cf_start_daemon "$CFREACTORD" + fi } cf_stop_core_daemons() @@ -549,6 +557,11 @@ cf_stop_core_daemons() cf_stop_daemon "$CFMOND" && any_process_present=1 fi + # shutdown cf-reactor + if [ "$RUN_CF_REACTOR" = "1" ]; then + cf_stop_daemon "$CFREACTORD" && any_process_present=1 + fi + # In case agents were spawned just as we were trying to kill the # daemons, try killing those too. cf_stop_agents && any_process_present=1 @@ -588,6 +601,14 @@ cf_status_core_daemons() fi fi + # status cf-reactor + if [ "$RUN_CF_REACTOR" = "1" ]; then + cf_status_daemon "$CFREACTORD" + if [ "$?" = "3" ]; then + cf_status_core_daemons_exit=3 + fi + fi + # Return the exit code return $cf_status_core_daemons_exit } diff --git a/tests/unit/init_script_test.sh b/tests/unit/init_script_test.sh index f105ede55d9..b3defb5904a 100755 --- a/tests/unit/init_script_test.sh +++ b/tests/unit/init_script_test.sh @@ -64,7 +64,11 @@ export CFTEST_PREFIX=/tmp/init_script_test.sh.$$ export CFTEST_CFEXECD=$CFTEST_PREFIX/bin/cf-test-execd export CFTEST_CFSERVD=$CFTEST_PREFIX/bin/cf-test-serverd export CFTEST_CFMOND=$CFTEST_PREFIX/bin/cf-test-monitord +export CFTEST_CFREACTORD=$CFTEST_PREFIX/bin/cf-test-reactor export CFTEST_CFAGENT=$CFTEST_PREFIX/bin/cf-test-agent +# Don't pick up the host's /etc/default/cfengine3 or /etc/sysconfig/cfengine3. +# The file is never created, so the init script's built-in defaults apply. +export CFTEST_DEFAULT=$CFTEST_PREFIX/cfengine3 export OUTFILE=$CFTEST_PREFIX/outfile rm -rf $CFTEST_PREFIX @@ -94,6 +98,7 @@ set -e cp init_script_test_helper $CFTEST_PREFIX/bin/cf-test-execd cp init_script_test_helper $CFTEST_PREFIX/bin/cf-test-serverd cp init_script_test_helper $CFTEST_PREFIX/bin/cf-test-monitord +cp init_script_test_helper $CFTEST_PREFIX/bin/cf-test-reactor cp init_script_test_helper $CFTEST_PREFIX/bin/cf-test-agent touch $CFTEST_PREFIX/inputs/promises.cf @@ -150,6 +155,7 @@ verify_none_running() no_matching_pid_exists $CFTEST_PREFIX/bin/cf-test-execd no_matching_pid_exists $CFTEST_PREFIX/bin/cf-test-serverd no_matching_pid_exists $CFTEST_PREFIX/bin/cf-test-monitord + no_matching_pid_exists $CFTEST_PREFIX/bin/cf-test-reactor no_matching_pid_exists $CFTEST_PREFIX/bin/cf-test-agent ) } @@ -172,6 +178,7 @@ echo "TEST: Normal starting" matching_pid_exists $CFTEST_PREFIX/bin/cf-test-execd matching_pid_exists $CFTEST_PREFIX/bin/cf-test-serverd matching_pid_exists $CFTEST_PREFIX/bin/cf-test-monitord +matching_pid_exists $CFTEST_PREFIX/bin/cf-test-reactor echo "TEST: Normal stopping" ../../misc/init.d/cfengine3 stop @@ -184,6 +191,9 @@ verify_none_running $CFTEST_PREFIX/bin/cf-test-monitord ../../misc/init.d/cfengine3 stop verify_none_running +$CFTEST_PREFIX/bin/cf-test-reactor +../../misc/init.d/cfengine3 stop +verify_none_running echo "TEST: Stopping daemons and agents" $CFTEST_PREFIX/bin/cf-test-execd --spawn-process $CFTEST_PREFIX/bin cf-test-agent @@ -302,7 +312,7 @@ verify_none_running $CFTEST_PREFIX/bin/cf-test-execd ../../misc/init.d/cfengine3 status > $OUTFILE \ && retcode=$? || retcode=$? -for i in cf-test-serverd cf-test-monitord +for i in cf-test-serverd cf-test-monitord cf-test-reactor do cat $OUTFILE | grep "$i.*is not running" done @@ -314,9 +324,10 @@ test $retcode = 3 echo "TEST: Verify that status of all daemons works" $CFTEST_PREFIX/bin/cf-test-serverd $CFTEST_PREFIX/bin/cf-test-monitord +$CFTEST_PREFIX/bin/cf-test-reactor ../../misc/init.d/cfengine3 status > $OUTFILE \ && retcode=$? || retcode=$? -for i in cf-test-execd cf-test-serverd cf-test-monitord +for i in cf-test-execd cf-test-serverd cf-test-monitord cf-test-reactor do cat $OUTFILE | egrep "$i.*(\.|is )running" done @@ -329,7 +340,7 @@ echo "TEST: Verify that status of no daemons works" verify_none_running ../../misc/init.d/cfengine3 status > $OUTFILE \ && retcode=$? || retcode=$? -for i in cf-test-execd cf-test-serverd cf-test-monitord +for i in cf-test-execd cf-test-serverd cf-test-monitord cf-test-reactor do cat $OUTFILE | grep "$i.*is not running" done @@ -344,7 +355,7 @@ $CFTEST_PREFIX/bin/cf-test-execd $CFTEST_PREFIX/bin/cf-test-execd ../../misc/init.d/cfengine3 status > $OUTFILE \ && retcode=$? || retcode=$? -for i in cf-test-serverd cf-test-monitord +for i in cf-test-serverd cf-test-monitord cf-test-reactor do cat $OUTFILE | grep "$i.*is not running" done @@ -359,7 +370,7 @@ $CFTEST_PREFIX/bin/cf-test-execd echo 9999999 > $CFTEST_PREFIX/cf-test-execd.pid ../../misc/init.d/cfengine3 status > $OUTFILE \ && retcode=$? || retcode=$? -for i in cf-test-serverd cf-test-monitord +for i in cf-test-serverd cf-test-monitord cf-test-reactor do cat $OUTFILE | grep "$i.*is not running" done