Improve robustness of LXC and libvirt plugins.
authorMarco Yuen <marcoy@gmail.com>
Tue, 19 Jun 2012 16:20:34 +0000 (12:20 -0400)
committerMarco Yuen <marcoy@gmail.com>
Tue, 19 Jun 2012 16:20:34 +0000 (12:20 -0400)
They will handle more edge cases. Especially during container creation
time.

sliver_libvirt.py
sliver_lxc.py

index ce54933..a3578eb 100644 (file)
@@ -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 '''
index d78446e..1b1a20c 100644 (file)
@@ -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]