Blame virtinst-0.400.0-refresh-storage-pool.patch

37b7231
# HG changeset patch
37b7231
# User "Cole Robinson <crobinso@redhat.com>"
37b7231
# Date 1224005406 14400
37b7231
# Node ID f117c8243aa5a616f2112f9906e3fa3330e08f32
37b7231
# Parent  3e2e7db24cb57416eee6f520a691ffe3abd86050
37b7231
Refresh storage pool if trying to lookup a volume.
37b7231
37b7231
diff -r 3e2e7db24cb5 -r f117c8243aa5 virtinst/VirtualDisk.py
37b7231
--- a/virtinst/VirtualDisk.py	Thu Oct 09 12:35:25 2008 -0400
37b7231
+++ b/virtinst/VirtualDisk.py	Tue Oct 14 13:30:06 2008 -0400
37b7231
@@ -300,6 +300,56 @@
37b7231
         """
37b7231
         return (self.vol_object != None or self.vol_install != None)
37b7231
 
37b7231
+    def __check_if_path_managed(self):
37b7231
+        vol = None
37b7231
+        err = None
37b7231
+        pool = util.lookup_pool_by_path(self.conn,
37b7231
+                                        os.path.dirname(self.path))
37b7231
+        if pool:
37b7231
+            try:
37b7231
+                vol = self.conn.storageVolLookupByPath(self.path)
37b7231
+            except Exception, e:
37b7231
+                # Pool may need to be refreshed
37b7231
+                pool.refresh(0)
37b7231
+                try:
37b7231
+                    vol = self.conn.storageVolLookupByPath(self.path)
37b7231
+                except Exception, e:
37b7231
+                    verr = str(e)
37b7231
+
37b7231
+        if not vol:
37b7231
+            # Path wasn't a volume. See if base of path is a managed
37b7231
+            # pool, and if so, setup a StorageVolume object
37b7231
+            if pool:
37b7231
+                if self.size == None:
37b7231
+                    raise ValueError(_("Size must be specified for non "
37b7231
+                                       "existent volume path '%s'" % \
37b7231
+                                        self.path))
37b7231
+                logging.debug("Path '%s' is target for pool '%s'. "
37b7231
+                              "Creating volume '%s'." % \
37b7231
+                              (os.path.dirname(self.path), pool.name(),
37b7231
+                               os.path.basename(self.path)))
37b7231
+                volclass = Storage.StorageVolume.get_volume_for_pool(pool_object=pool)
37b7231
+                cap = (self.size * 1024 * 1024 * 1024)
37b7231
+                if self.sparse:
37b7231
+                    alloc = 0
37b7231
+                else:
37b7231
+                    #alloc = cap
37b7231
+                    # XXX: disable setting managed storage as nonsparse
37b7231
+                    # XXX: since it hoses libvirtd (for now)
37b7231
+                    alloc = 0
37b7231
+                vol = volclass(name=os.path.basename(self.path),
37b7231
+                               capacity=cap, allocation=alloc, pool=pool)
37b7231
+                self._set_vol_install(vol, validate=False)
37b7231
+            elif self._is_remote():
37b7231
+                raise ValueError(_("'%s' is not managed on remote "
37b7231
+                                   "host: %s" % (self.path, verr)))
37b7231
+            else:
37b7231
+                logging.debug("Didn't find path '%s' managed on "
37b7231
+                              "connection: %s" % (self.path, verr))
37b7231
+        else:
37b7231
+            self._set_vol_object(vol, validate=False)
37b7231
+
37b7231
+
37b7231
     def __validate_params(self):
37b7231
         """
37b7231
         function to validate all the complex interaction between the various
37b7231
@@ -314,51 +364,9 @@
37b7231
         if not storage_capable and self._is_remote():
37b7231
             raise ValueError, _("Connection doesn't support remote storage.")
37b7231
 
37b7231
-
37b7231
         if storage_capable and self.path is not None \
37b7231
            and not self.__storage_specified():
37b7231
-            vol = None
37b7231
-            verr = None
37b7231
-            try:
37b7231
-                vol = self.conn.storageVolLookupByPath(self.path)
37b7231
-            except Exception, e:
37b7231
-                verr = str(e)
37b7231
-
37b7231
-            if not vol:
37b7231
-                # Path wasn't a volume. See if base of path is a managed
37b7231
-                # pool, and if so, setup a StorageVolume object
37b7231
-                pool = util.lookup_pool_by_path(self.conn,
37b7231
-                                                os.path.dirname(self.path))
37b7231
-                if pool:
37b7231
-                    if self.size == None:
37b7231
-                        raise ValueError(_("Size must be specified for non "
37b7231
-                                           "existent path '%s'" % self.path))
37b7231
-                    logging.debug("Path '%s' is target for pool '%s'. "
37b7231
-                                  "Creating volume '%s'." % \
37b7231
-                                  (os.path.dirname(self.path), pool.name(),
37b7231
-                                   os.path.basename(self.path)))
37b7231
-                    volclass = Storage.StorageVolume.get_volume_for_pool(pool_object=pool)
37b7231
-                    cap = (self.size * 1024 * 1024 * 1024)
37b7231
-                    if self.sparse:
37b7231
-                        alloc = 0
37b7231
-                    else:
37b7231
-                        #alloc = cap
37b7231
-                        # XXX: disable setting managed storage as nonsparse
37b7231
-                        # XXX: since it hoses libvirtd (for now)
37b7231
-                        alloc = 0
37b7231
-                    vol = volclass(name=os.path.basename(self.path),
37b7231
-                                   capacity=cap, allocation=alloc,
37b7231
-                                   pool=pool)
37b7231
-                    self._set_vol_install(vol, validate=False)
37b7231
-                elif self._is_remote():
37b7231
-                    raise ValueError(_("'%s' is not managed on remote "
37b7231
-                                       "host: %s" % (self.path, verr)))
37b7231
-                else:
37b7231
-                    logging.debug("Didn't find path '%s' managed on "
37b7231
-                                  "connection: %s" % (self.path, verr))
37b7231
-            else:
37b7231
-                self._set_vol_object(vol, validate=False)
37b7231
-
37b7231
+            self.__check_if_path_managed()
37b7231
 
37b7231
         if self._is_remote() and not self.__storage_specified():
37b7231
             raise ValueError, _("Must specify libvirt managed storage if on "