expect slice initscript to implement stop and restart
authorThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Fri, 18 Mar 2011 09:21:34 +0000 (10:21 +0100)
committerS.Çağlar Onur <caglar@verivue.com>
Fri, 18 Mar 2011 13:43:58 +0000 (09:43 -0400)
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
sliver_vs.py

index 9e0c9b7..003a872 100644 (file)
@@ -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
index e53135a..57de4f9 100644 (file)
@@ -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)