From 4c941ea3937af717d1c03ba3879774bf20a12e06 Mon Sep 17 00:00:00 2001 From: Marco Yuen Date: Tue, 19 Jun 2012 12:20:34 -0400 Subject: [PATCH] Improve robustness of LXC and libvirt plugins. They will handle more edge cases. Especially during container creation time. --- sliver_libvirt.py | 10 +++++++--- sliver_lxc.py | 16 ++++++++++------ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/sliver_libvirt.py b/sliver_libvirt.py index ce54933..a3578eb 100644 --- a/sliver_libvirt.py +++ b/sliver_libvirt.py @@ -58,11 +58,15 @@ class Sliver_Libvirt(account.Account): self.conn = getConnection(rec['type']) self.xid = bwlimit.get_xid(self.name) + dom = None try: - self.dom = self.conn.lookupByName(self.name) + dom = self.conn.lookupByName(self.name) except: - logger.log('sliver_libvirt: Domain %s does not exist ' \ - 'UNEXPECTED: %s'%(self.name, sys.exc_info()[1])) + logger.log('sliver_libvirt: Domain %s does not exist. ' \ + 'Will try to create it again.' \ % (self.name)) + self.__class__.create(rec['name'], rec) + dom = self.conn.lookupByName(self.name) + self.dom = dom def start(self, delay=0): ''' Just start the sliver ''' diff --git a/sliver_lxc.py b/sliver_lxc.py index d78446e..1b1a20c 100644 --- a/sliver_lxc.py +++ b/sliver_lxc.py @@ -45,13 +45,15 @@ class Sliver_LXC(sliver_libvirt.Sliver_Libvirt): # check the template exists -- there's probably a better way.. if not os.path.isdir(refImgDir): logger.log('sliver_lxc: %s: ERROR Could not create sliver - reference image %s not found' % (name,vref)) - logger.log('sliver_lxc: %s: ERROR ctd expected reference image in %s'%(name,refImgDir)) + logger.log('sliver_lxc: %s: ERROR Expected reference image in %s'%(name,refImgDir)) return # Snapshot the reference image fs (assume the reference image is in its own # subvolume) command = ['btrfs', 'subvolume', 'snapshot', refImgDir, containerDir] - logger.log_call(command, timeout=15*60) + if not logger.log_call(command, timeout=15*60): + logger.log('sliver_lxc: ERROR Could not create BTRFS snapshot at', containDir) + return command = ['chmod', '755', containerDir] logger.log_call(command, timeout=15*60) @@ -134,15 +136,17 @@ class Sliver_LXC(sliver_libvirt.Sliver_Libvirt): # Destroy libvirt domain dom = conn.lookupByName(name) except: - logger.verbose('sliver_lxc: Domain %s does not exist! UNEXPECTED'%name) - return + logger.verbose('sliver_lxc: Domain %s does not exist!' % name) try: dom.destroy() except: - logger.verbose('sliver_lxc: Domain %s not running... continuing.'%name) + logger.verbose('sliver_lxc: Domain %s not running... continuing.' % name) - dom.undefine() + try: + dom.undefine() + except: + logger.verbose('sliver_lxc: Domain %s is not defined... continuing.' % name) # Remove user after destroy domain to force logout command = ['/usr/sbin/userdel', '-f', '-r', name] -- 2.43.0