Sfoglia il codice sorgente

Merged in aznashwan/coriolis/issubclass (pull request #61)

Moved `get_instances()` method to new, separate subclass of BaseEndpointProvider
Nashwan Azhari 8 anni fa
parent
commit
075417cbe4

+ 2 - 1
coriolis/constants.py

@@ -45,7 +45,8 @@ PROVIDER_TYPE_EXPORT = 2
 PROVIDER_TYPE_REPLICA_IMPORT = 4
 PROVIDER_TYPE_REPLICA_IMPORT = 4
 PROVIDER_TYPE_REPLICA_EXPORT = 8
 PROVIDER_TYPE_REPLICA_EXPORT = 8
 PROVIDER_TYPE_ENDPOINT = 16
 PROVIDER_TYPE_ENDPOINT = 16
-PROVIDER_TYPE_OS_MORPHING = 32
+PROVIDER_TYPE_RESOURCES_ENDPOINT = 32
+PROVIDER_TYPE_OS_MORPHING = 64
 
 
 DISK_FORMAT_VMDK = 'vmdk'
 DISK_FORMAT_VMDK = 'vmdk'
 DISK_FORMAT_RAW = 'raw'
 DISK_FORMAT_RAW = 'raw'

+ 11 - 6
coriolis/providers/base.py

@@ -27,15 +27,20 @@ class BaseEndpointProvider(BaseProvider):
         pass
         pass
 
 
     @abc.abstractmethod
     @abc.abstractmethod
-    def get_instances(self, ctxt, connection_info, limit=None,
-                      last_seen_id=None, instance_name_pattern=None):
-        """ Returns a list of instances
-        """
+    def get_connection_info_schema(self):
         pass
         pass
 
 
+
+class BaseResourcesEndpointProvider(BaseEndpointProvider):
+    """ Defines operations for listing resources off of Endpoints """
+    __metaclass__ = abc.ABCMeta
+
     @abc.abstractmethod
     @abc.abstractmethod
-    def get_connection_info_schema(self):
-        pass
+    def get_instances(self, ctxt, connection_info, limit=None,
+                      last_seen_id=None, instance_name_pattern=None):
+        """ Returns a list of instances """
+        raise NotImplementedError(
+            "The provider does not define an instance list method.")
 
 
 
 
 class BaseInstanceProvider(BaseProvider):
 class BaseInstanceProvider(BaseProvider):

+ 4 - 2
coriolis/providers/factory.py

@@ -23,7 +23,9 @@ PROVIDER_TYPE_MAP = {
     constants.PROVIDER_TYPE_IMPORT: base.BaseImportProvider,
     constants.PROVIDER_TYPE_IMPORT: base.BaseImportProvider,
     constants.PROVIDER_TYPE_REPLICA_IMPORT: base.BaseReplicaImportProvider,
     constants.PROVIDER_TYPE_REPLICA_IMPORT: base.BaseReplicaImportProvider,
     constants.PROVIDER_TYPE_ENDPOINT: base.BaseEndpointProvider,
     constants.PROVIDER_TYPE_ENDPOINT: base.BaseEndpointProvider,
-    constants.PROVIDER_TYPE_OS_MORPHING: base.BaseImportProvider
+    constants.PROVIDER_TYPE_RESOURCES_ENDPOINT:
+        base.BaseResourcesEndpointProvider,
+    constants.PROVIDER_TYPE_OS_MORPHING: base.BaseImportInstanceProvider
 }
 }
 
 
 
 
@@ -48,7 +50,7 @@ def get_provider(platform_name, provider_type, event_handler):
     for provider in CONF.providers:
     for provider in CONF.providers:
         cls = utils.load_class(provider)
         cls = utils.load_class(provider)
         if (cls.platform == platform_name and
         if (cls.platform == platform_name and
-                PROVIDER_TYPE_MAP[provider_type] in cls.__bases__):
+                issubclass(cls, PROVIDER_TYPE_MAP[provider_type])):
             return cls(event_handler)
             return cls(event_handler)
 
 
     raise exception.NotFound(
     raise exception.NotFound(

+ 1 - 1
coriolis/worker/rpc/server.py

@@ -170,7 +170,7 @@ class WorkerServerEndpoint(object):
     def get_endpoint_instances(self, ctxt, platform_name, connection_info,
     def get_endpoint_instances(self, ctxt, platform_name, connection_info,
                                marker, limit, instance_name_pattern):
                                marker, limit, instance_name_pattern):
         export_provider = providers_factory.get_provider(
         export_provider = providers_factory.get_provider(
-            platform_name, constants.PROVIDER_TYPE_ENDPOINT, None)
+            platform_name, constants.PROVIDER_TYPE_RESOURCES_ENDPOINT, None)
 
 
         secret_connection_info = utils.get_secret_connection_info(
         secret_connection_info = utils.get_secret_connection_info(
             ctxt, connection_info)
             ctxt, connection_info)