Просмотр исходного кода

Provider class hierarchy refactoring

Alessandro Pilotti 9 лет назад
Родитель
Сommit
e46ee3950b

+ 6 - 2
coriolis/providers/azure/__init__.py

@@ -24,9 +24,10 @@ from oslo_log import log as logging
 from oslo_utils import units
 
 from coriolis import constants
+from coriolis import events
 from coriolis import exception
 from coriolis.osmorphing import manager as osmorpher
-from coriolis.providers.base import BaseImportProvider
+from coriolis.providers import base
 from coriolis.providers.azure import utils as azutils
 from coriolis.providers.azure import exceptions as azexceptions
 from coriolis import schemas
@@ -153,7 +154,7 @@ AzureWorkerInstance = collections.namedtuple(
     "AzureWorkerInstance", "name ip port username password pkey datadisks")
 
 
-class ImportProvider(BaseImportProvider):
+class ImportProvider(base.BaseImportProvider):
     """ Provides import capabilities. """
     platform = constants.PLATFORM_AZURE_RM
 
@@ -163,6 +164,9 @@ class ImportProvider(BaseImportProvider):
     target_environment_schema = schemas.get_schema(
         __name__, schemas.PROVIDER_TARGET_ENVIRONMENT_SCHEMA_NAME)
 
+    def __init__(self, event_handler):
+        self._event_manager = events.EventManager(event_handler)
+
     def validate_connection_info(self, connection_info):
         """ Validates the provided connection information. """
         LOG.info("Validating connection info: %s", connection_info)

+ 2 - 6
coriolis/providers/base.py

@@ -3,16 +3,12 @@
 
 import abc
 
-from coriolis import events
 from coriolis import schemas
 
 
 class BaseProvider(object):
     __metaclass__ = abc.ABCMeta
 
-    def __init__(self, event_handler):
-        self._event_manager = events.EventManager(event_handler)
-
     @property
     def connection_info_schema(self):
         raise NotImplementedError("Missing connection info schema.")
@@ -55,7 +51,7 @@ class BaseImportProvider(BaseProvider):
         pass
 
 
-class BaseReplicaImportProvider(BaseImportProvider):
+class BaseReplicaImportProvider(BaseProvider):
     __metaclass__ = abc.ABCMeta
 
     @abc.abstractmethod
@@ -111,7 +107,7 @@ class BaseExportProvider(BaseProvider):
         pass
 
 
-class BaseReplicaExportProvider(BaseExportProvider):
+class BaseReplicaExportProvider(BaseProvider):
     __metaclass__ = abc.ABCMeta
 
     @abc.abstractmethod

+ 8 - 1
coriolis/providers/openstack/__init__.py

@@ -18,6 +18,7 @@ from oslo_utils import units
 import paramiko
 
 from coriolis import constants
+from coriolis import events
 from coriolis import exception
 from coriolis import keystone
 from coriolis.osmorphing import manager as osmorphing_manager
@@ -318,7 +319,7 @@ class _MigrationResources(object):
             self._keypair = None
 
 
-class ImportProvider(base.BaseReplicaImportProvider):
+class ImportProvider(base.BaseImportProvider, base.BaseReplicaImportProvider):
 
     platform = constants.PLATFORM_OPENSTACK
 
@@ -328,6 +329,9 @@ class ImportProvider(base.BaseReplicaImportProvider):
     target_environment_schema = schemas.get_schema(
         __name__, schemas.PROVIDER_TARGET_ENVIRONMENT_SCHEMA_NAME)
 
+    def __init__(self, event_handler):
+        self._event_manager = events.EventManager(event_handler)
+
     def _create_image(self, glance, name, disk_path, disk_format,
                       container_format, hypervisor_type):
         properties = {}
@@ -1127,6 +1131,9 @@ class ExportProvider(base.BaseExportProvider):
     connection_info_schema = schemas.get_schema(
         __name__, schemas.PROVIDER_CONNECTION_INFO_SCHEMA_NAME)
 
+    def __init__(self, event_handler):
+        self._event_manager = events.EventManager(event_handler)
+
     @utils.retry_on_error()
     def _get_instance(self, nova, instance_name):
         instances = nova.servers.list(search_opts={'name': instance_name})

+ 5 - 1
coriolis/providers/vmware_vsphere/__init__.py

@@ -22,6 +22,7 @@ from pyVmomi import vim
 
 from coriolis import constants
 from coriolis import data_transfer
+from coriolis import events
 from coriolis import exception
 from coriolis.providers import base
 from coriolis.providers.vmware_vsphere import guestid
@@ -196,13 +197,16 @@ class _SSHBackupWriter(_BaseBackupWriter):
         self._ssh.close()
 
 
-class ExportProvider(base.BaseReplicaExportProvider):
+class ExportProvider(base.BaseExportProvider, base.BaseReplicaExportProvider):
 
     platform = constants.PLATFORM_VMWARE_VSPHERE
 
     connection_info_schema = schemas.get_schema(
         __name__, schemas.PROVIDER_CONNECTION_INFO_SCHEMA_NAME)
 
+    def __init__(self, event_handler):
+        self._event_manager = events.EventManager(event_handler)
+
     @utils.retry_on_error()
     def _convert_disk_type(self, disk_path, target_disk_path, target_type=0):
         utils.exec_process([CONF.vmware_vsphere.vdiskmanager_path, "-r",