فهرست منبع

Made provider autodiscovery more robust against import errors.

Nuwan Goonasekera 10 سال پیش
والد
کامیت
9eca29ddc9
2فایلهای تغییر یافته به همراه19 افزوده شده و 7 حذف شده
  1. 17 6
      cloudbridge/cloud/factory.py
  2. 2 1
      cloudbridge/cloud/providers/openstack/services.py

+ 17 - 6
cloudbridge/cloud/factory.py

@@ -71,12 +71,23 @@ class CloudProviderFactory(object):
         cloudbridge.cloud.providers package.
         """
         for _, modname, _ in pkgutil.iter_modules(providers.__path__):
-            module = importlib.import_module(
-                "{0}.{1}".format(providers.__name__,
-                                 modname))
-            classes = inspect.getmembers(module, inspect.isclass)
-            for _, cls in classes:
-                self.register_provider_class(cls)
+            try:
+                self._import_provider(modname)
+            except:
+                log.exception("Could not import providers from module: %s",
+                              modname)
+
+    def _import_provider(self, module_name):
+        """
+        Imports and registers providers from the given module name.
+        Raises an ImportError if the import does not succeed.
+        """
+        module = importlib.import_module(
+            "{0}.{1}".format(providers.__name__,
+                             module_name))
+        classes = inspect.getmembers(module, inspect.isclass)
+        for _, cls in classes:
+            self.register_provider_class(cls)
 
     def list_providers(self):
         """

+ 2 - 1
cloudbridge/cloud/providers/openstack/services.py

@@ -383,7 +383,8 @@ class OpenStackSnapshotService(BaseSnapshotService):
         """
         Creates a new snapshot of a given volume.
         """
-        volume_id = volume.id if isinstance(volume, OpenStackVolume) else volume
+        volume_id = (volume.id if isinstance(volume, OpenStackVolume)
+                     else volume)
 
         os_snap = self.provider.cinder.volume_snapshots.create(
             volume_id, name=name,