From e57f1eed3dbd95226c1febfefb0e78536b23798b Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Fri, 18 Mar 2011 10:21:34 +0100 Subject: [PATCH] expect slice initscript to implement stop and restart generic initscript to call slice initscript with stop/restart rerun now invokes generic script update generic initscript into slices at each cycle too --- sliver-initscripts/vinit | 35 +++++++++++++++++++---------------- sliver_vs.py | 6 ++++-- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/sliver-initscripts/vinit b/sliver-initscripts/vinit index 9e0c9b7..003a872 100644 --- a/sliver-initscripts/vinit +++ b/sliver-initscripts/vinit @@ -1,8 +1,5 @@ #!/bin/bash # -# $Id$ -# $URL$ -# # vinit - trigger the slice-local initscript as installed in /etc/rc.d/vinit.slice # # this is unconditionnally installed and activated in the sliver @@ -12,10 +9,8 @@ # as the slice has not yet started at that point # # historical note -# historically planetlab initscripts have not been required to handle the 'stop' method -# so installing such a script directly as /etc/rc.d/vinit would result in the -# script .. being run a second time at vserver-stop time - +# historically planetlab initscripts were not required to handle the 'stop' and 'restart' method +# as of March 2011 this becomes a requirement though # Source function library. . /etc/init.d/functions @@ -29,26 +24,30 @@ lockfile=/var/lock/subsys/vinit RETVAL=0 -# xxx todo - redirect all stdout, stderr to /var/log/vinit for user access - function start() { - if [ ! -x $slicescript ] ; then - echo "vinit@$slicename: no executable $slicescript - ignored" - return 0 - fi + [ -x $slicescript ] || return 0 echo $"Starting $prog" - $slicescript start $slicename >& /var/log/vinit & + $slicescript start $slicename &>> /var/log/vinit & touch ${lockfile} return 0 } -# the initial model came without a stop function; legacy ... function stop() { + [ -x $slicescript ] && $slicescript stop $slicename &>> /var/log/vinit & + # safe side + sleep 5 echo $"Stopping $prog " killproc $basename rm -f ${lockfile} } +function restart () { + [ -x $slicescript ] || return 0 + echo $"Restarting $prog" + $slicescript restart $slicename &>> /var/log/vinit & + return 0 +} + function status () { if [ -f ${lockfile} ] ; then echo "$prog seems to have run" @@ -68,12 +67,16 @@ case "$1" in stop RETVAL=$? ;; + restart) + restart + RETVAL=$? + ;; status) status RETVAL=$? ;; *) - echo $"Usage: $0 {start|stop|status}" + echo $"Usage: $0 {start|stop|restart|status}" exit 1 ;; esac diff --git a/sliver_vs.py b/sliver_vs.py index e53135a..57de4f9 100644 --- a/sliver_vs.py +++ b/sliver_vs.py @@ -150,6 +150,9 @@ class Sliver_VS(accounts.Account, vserver.VServer): def destroy(name): logger.log_call('/usr/sbin/vuserdel', name) def configure(self, rec): + # in case we update nodemanager.. + self.install_and_enable_vinit() + new_rspec = rec['_rspec'] if new_rspec != self.rspec: self.rspec = new_rspec @@ -185,8 +188,7 @@ class Sliver_VS(accounts.Account, vserver.VServer): logger.log_exc("vsliver_vs: %s: failed to create runlevel3 symlink %s"%rc3_link) def rerun_slice_vinit(self): - command = "/usr/sbin/vserver %s exec /etc/rc.d/init.d/vinit.slice restart %s" % (self.name, self.name) - + command = "/usr/sbin/vserver %s exec /etc/rc.d/init.d/vinit restart" % (self.name) logger.log("vsliver_vs: %s: Rerunning slice initscript: %s" % (self.name, command)) subprocess.call(command + "&", stdin=open('/dev/null', 'r'), stdout=open('/dev/null', 'w'), stderr=subprocess.STDOUT, shell=True) -- 2.43.0