Prechádzať zdrojové kódy

Replaces base exceptions with domain ones

Alessandro Pilotti 10 rokov pred
rodič
commit
60fc81407f

+ 3 - 1
coriolis/api/__init__.py

@@ -24,6 +24,7 @@ from paste import urlmap
 import routes
 
 from coriolis.api import wsgi
+from coriolis import exception
 from coriolis.i18n import _, _LW
 
 
@@ -80,7 +81,8 @@ class APIRouter(base_wsgi.Router):
             if self.ExtensionManager:
                 ext_mgr = self.ExtensionManager()
             else:
-                raise Exception(_("Must specify an ExtensionManager class"))
+                raise exception.CoriolisException(
+                    _("Must specify an ExtensionManager class"))
 
         mapper = ProjectMapper()
         self.resources = {}

+ 3 - 2
coriolis/api/v1/migrations.py

@@ -1,6 +1,7 @@
 from coriolis.api import wsgi as api_wsgi
 from coriolis.api.v1.views import migration_view
 from coriolis import constants
+from coriolis import exception
 from coriolis.migrations import api
 from coriolis.providers import factory
 
@@ -35,14 +36,14 @@ class MigrationController(object):
         if not export_provider.validate_connection_info(
                 origin["connection_info"]):
             # TODO: use a decent exception
-            raise Exception("Invalid connection info")
+            raise exception.CoriolisException("Invalid connection info")
 
         import_provider = factory.get_provider(
             destination["type"], constants.PROVIDER_TYPE_IMPORT)
         if not import_provider.validate_connection_info(
                 destination["connection_info"]):
             # TODO: use a decent exception
-            raise Exception("Invalid connection info")
+            raise exception.CoriolisException("Invalid connection info")
 
         return origin, destination, migration["instances"]
 

+ 3 - 1
coriolis/db/sqlalchemy/api.py

@@ -5,6 +5,7 @@ from oslo_db import options as db_options
 from oslo_db.sqlalchemy import session as db_session
 
 from coriolis.db.sqlalchemy import migration
+from coriolis import exception
 from coriolis.i18n import _
 
 CONF = cfg.CONF
@@ -40,7 +41,8 @@ def get_backend():
 def db_sync(engine, version=None):
     """Migrate the database to `version` or the most recent version."""
     if version is not None and int(version) < db_version(engine):
-        raise Exception(_("Cannot migrate to lower schema version."))
+        raise exception.CoriolisException(
+            _("Cannot migrate to lower schema version."))
 
     return migration.db_sync(engine, version=version)
 

+ 3 - 1
coriolis/osmorphing/factory.py

@@ -1,3 +1,4 @@
+from coriolis import exception
 from coriolis.osmorphing import debian
 from coriolis.osmorphing import redhat
 from coriolis.osmorphing import ubuntu
@@ -14,4 +15,5 @@ def get_os_morphing_tools(ssh, os_root_dir, target_hypervisor,
         os_info = tools.check_os()
         if os_info:
             return (tools, os_info)
-    raise Exception("Cannot find the morphing tools for this OS image")
+    raise exception.CoriolisException(
+        "Cannot find the morphing tools for this OS image")

+ 2 - 1
coriolis/osmorphing/osmount/factory.py

@@ -1,3 +1,4 @@
+from coriolis import exception
 from coriolis.osmorphing.osmount import ubuntu
 
 
@@ -7,4 +8,4 @@ def get_os_mount_tools(ssh):
     for cls in os_mount_tools:
         if cls.check_os(ssh):
             return cls()
-    raise Exception("OS mount tools not found")
+    raise exception.CoriolisException("OS mount tools not found")

+ 2 - 1
coriolis/osmorphing/osmount/ubuntu.py

@@ -1,6 +1,7 @@
 import os
 import re
 
+from coriolis import exception
 from coriolis import utils
 
 
@@ -80,7 +81,7 @@ class UbuntuOSMountTools(object):
                 break
 
         if not os_root_dir:
-            raise Exception("root partition not found")
+            raise exception.CoriolisException("root partition not found")
 
         for dir in set(dirs).intersection(['proc', 'sys', 'dev', 'run']):
             mount_dir = os.path.join(os_root_dir, dir)

+ 3 - 2
coriolis/osmorphing/redhat.py

@@ -6,6 +6,7 @@ from oslo_log import log as logging
 import yaml
 
 from coriolis import constants
+from coriolis import exception
 from coriolis.osmorphing import base
 from coriolis import utils
 
@@ -147,8 +148,8 @@ class RedHatMorphingTools(base.BaseOSMorphingTools):
     def _get_default_cloud_user(self):
         cloud_cfg_path = os.path.join(self._os_root_dir, 'etc/cloud/cloud.cfg')
         if not self._test_path(cloud_cfg_path):
-            raise Exception("cloud-init config file not found: %s" %
-                            cloud_cfg_path)
+            raise exception.CoriolisException(
+                "cloud-init config file not found: %s" % cloud_cfg_path)
         cloud_cfg_content = self._read_file(cloud_cfg_path)
         cloud_cfg = yaml.load(cloud_cfg_content)
         return cloud_cfg.get('system_info', {}).get('default_user', {}).get(

+ 9 - 4
coriolis/providers/openstack/__init__.py

@@ -13,6 +13,7 @@ from oslo_utils import units
 import paramiko
 
 from coriolis import constants
+from coriolis import exception
 from coriolis.osmorphing import manager as osmorphing_manager
 from coriolis.providers import base
 from coriolis import utils
@@ -66,7 +67,8 @@ class _MigrationResources(object):
             time.sleep(2)
             instances = self._nova.servers.findall(id=instance_id)
         if instances:
-            raise Exception("VM is in status: %s" % instances[0].status)
+            raise exception.CoriolisException(
+                "VM is in status: %s" % instances[0].status)
 
     def get_instance(self):
         return self._instance
@@ -147,7 +149,8 @@ class ImportProvider(base.BaseExportProvider):
             time.sleep(2)
             volume = nova.volumes.get(volume.id)
         if volume.status != expected_status:
-            raise Exception("Volume is in status: %s" % volume.status)
+            raise exception.CoriolisException(
+                "Volume is in status: %s" % volume.status)
 
     @utils.retry_on_error()
     def _wait_for_instance(self, nova, instance, expected_status='ACTIVE'):
@@ -156,7 +159,8 @@ class ImportProvider(base.BaseExportProvider):
             time.sleep(2)
             instance = nova.servers.get(instance.id)
         if instance.status != expected_status:
-            raise Exception("VM is in status: %s" % instance.status)
+            raise exception.CoriolisException(
+                "VM is in status: %s" % instance.status)
 
     def _get_unique_name(self):
         return MIGRATION_TMP_FORMAT % str(uuid.uuid4())
@@ -193,7 +197,8 @@ class ImportProvider(base.BaseExportProvider):
                                     migr_image_name, migr_flavor_name,
                                     migr_network_name, migr_fip_pool_name):
         if not glance.images.findall(name=migr_image_name):
-            raise Exception("Glance image \"%s\" not found" % migr_image_name)
+            raise exception.CoriolisException(
+                "Glance image \"%s\" not found" % migr_image_name)
 
         image = nova.images.find(name=migr_image_name)
         flavor = nova.flavors.find(name=migr_flavor_name)

+ 3 - 2
coriolis/providers/vmware_vsphere/__init__.py

@@ -10,6 +10,7 @@ from pyVim import connect
 from pyVmomi import vim
 
 from coriolis import constants
+from coriolis import exception
 from coriolis.providers import base
 from coriolis import utils
 
@@ -40,7 +41,7 @@ class ExportProvider(base.BaseExportProvider):
                                       vim.TaskInfo.State.error]:
             time.sleep(.1)
         if task.info.state == vim.TaskInfo.State.error:
-            raise Exception(task.info.error.msg)
+            raise exception.CoriolisException(task.info.error.msg)
 
     @utils.retry_on_error()
     def _connect(self, host, username, password, port, context):
@@ -237,7 +238,7 @@ class ExportProvider(base.BaseExportProvider):
                     lease.HttpNfcLeaseAbort()
                     raise
             elif lease.state == vim.HttpNfcLease.State.error:
-                raise Exception(lease.error.msg)
+                raise exception.CoriolisException(lease.error.msg)
             else:
                 time.sleep(.1)
 

+ 8 - 5
coriolis/utils.py

@@ -10,6 +10,7 @@ from oslo_config import cfg
 from oslo_log import log as logging
 
 from coriolis import constants
+from coriolis import exception
 
 opts = [
     cfg.StrOpt('qemu_img_path',
@@ -102,9 +103,10 @@ def exec_ssh_cmd(ssh, cmd):
     std_out = stdout.read()
     std_err = stderr.read()
     if exit_code:
-        raise Exception("Command \"%s\" failed with exit code: %s\n"
-                        "stdout: %s\nstd_err: %s" %
-                        (cmd, exit_code, std_out, std_err))
+        raise exception.CoriolisException(
+            "Command \"%s\" failed with exit code: %s\n"
+            "stdout: %s\nstd_err: %s" %
+            (cmd, exit_code, std_out, std_err))
     return std_out
 
 
@@ -139,14 +141,15 @@ def wait_for_port_connectivity(address, port, max_wait=300):
         time.sleep(1)
         i += 1
     if i == max_wait:
-        raise Exception("Connection failed on port %s" % port)
+        raise exception.CoriolisException("Connection failed on port %s" %
+                                          port)
 
 
 def exec_process(args):
     p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     std_out, std_err = p.communicate()
     if p.returncode:
-        raise Exception(
+        raise exception.CoriolisException(
             "Command \"%s\" failed with exit code: %s\nstdout: %s\nstd_err: %s"
             % (args, p.returncode, std_out, std_err))
     return std_out

+ 4 - 3
coriolis/worker/rpc/server.py

@@ -40,7 +40,7 @@ class WorkerServerEndpoint(object):
             if os.path.exists(export_path):
                 shutil.rmtree(export_path)
         except Exception as ex:
-            # Swallow the exception
+            # Ignore the exception
             LOG.exception(ex)
 
     def stop_task(self, ctxt, process_id):
@@ -63,7 +63,7 @@ class WorkerServerEndpoint(object):
         p.join()
 
         if mp_q.empty():
-            raise Exception("Task process terminated")
+            raise exception.CoriolisException("Task process terminated")
         result = mp_q.get(False)
 
         if isinstance(result, str):
@@ -97,7 +97,8 @@ class WorkerServerEndpoint(object):
                      destination["target_environment"],
                      instance, task_info))
             else:
-                raise Exception("Unknown task type: %s" % task_type)
+                raise exception.CoriolisException("Unknown task type: %s" %
+                                                  task_type)
 
             LOG.info("Task completed: %s", task_id)
             LOG.info("Task info: %s", task_info)