From: Barış Metin Date: Wed, 12 May 2010 16:59:35 +0000 (+0000) Subject: run INITSCRIPTS in vservers X-Git-Tag: util-vserver-pl-0.4-6~2 X-Git-Url: http://git.onelab.eu/?p=util-vserver-pl.git;a=commitdiff_plain;h=9cf83e82fbf706a8e042f4cc2f03e1f03fb41905 run INITSCRIPTS in vservers --- diff --git a/python/vserver.py b/python/vserver.py index 55d78f0..0576bb7 100644 --- a/python/vserver.py +++ b/python/vserver.py @@ -261,13 +261,13 @@ class VServer: os.chroot(self.dir) os.chdir("/") - def chroot_call(self, fn, *args): + def chroot_call(self, fn, *args, **kwargs={}): cwd_fd = os.open(".", os.O_RDONLY) try: root_fd = os.open("/", os.O_RDONLY) try: self.__do_chroot() - result = fn(*args) + result = fn(*args, **kwargs) finally: os.fchdir(root_fd) os.chroot(".") @@ -382,6 +382,23 @@ class VServer: try: subprocess.call("/usr/sbin/vserver %s start" % self.name, shell=True) + + # execute initscripts + for cmd in self.INITSCRIPTS: + try: + # enter vserver context + arg_subst = { 'runlevel': runlevel } + cmd_args = [cmd[0]] + map(lambda x: x % arg_subst, cmd[1:]) + cmd_file = "/vservers/" + self.name + cmd[0] + self.log(cmd_file) + if os.path.isfile(cmd_file): + self.log("executing '%s'" % " ".join(cmd_args)) + self.chroot_call(subprocess.call, " ".join(cmd_args), shell=True) + else: + self.log("WARNING: could not run %s on %s" % (cmd[0], self.name)) + except: + self.log(traceback.format_exc()) + # we get here due to an exception in the top-level child process except Exception, ex: self.log(traceback.format_exc())