Преглед на файлове

Implement `get_shared_libs_for_providers` method in base TaskRunner class.

Nashwan Azhari преди 7 години
родител
ревизия
80ef18cd88
променени са 1 файла, в които са добавени 29 реда и са изтрити 0 реда
  1. 29 0
      coriolis/tasks/base.py

+ 29 - 0
coriolis/tasks/base.py

@@ -7,7 +7,9 @@ from oslo_config import cfg
 from oslo_log import log as logging
 from oslo_log import log as logging
 from six import with_metaclass
 from six import with_metaclass
 
 
+from coriolis import constants
 from coriolis import utils
 from coriolis import utils
+from coriolis.providers import factory as providers_factory
 
 
 serialization_opts = [
 serialization_opts = [
     cfg.StrOpt('temp_keypair_password',
     cfg.StrOpt('temp_keypair_password',
@@ -21,6 +23,33 @@ LOG = logging.getLogger(__name__)
 
 
 
 
 class TaskRunner(with_metaclass(abc.ABCMeta)):
 class TaskRunner(with_metaclass(abc.ABCMeta)):
+
+    def get_shared_libs_for_providers(
+            self, ctxt, origin, destination, event_handler):
+        """ Returns a list of directories containing libraries needed
+        for both the source and destination providers. """
+        required_libs = []
+
+        origin_provider = providers_factory.get_provider(
+            origin["type"], constants.PROVIDER_TYPE_SETUP_LIBS, event_handler,
+            raise_if_not_found=False)
+        if origin_provider:
+            conn_info = get_connection_info(ctxt, origin)
+            required_libs.extend(
+                origin_provider.get_shared_library_directories(
+                    ctxt, conn_info))
+
+        destination_provider = providers_factory.get_provider(
+            destination["type"], constants.PROVIDER_TYPE_SETUP_LIBS,
+            event_handler, raise_if_not_found=False)
+        if destination_provider:
+            conn_info = get_connection_info(ctxt, destination)
+            required_libs.extend(
+                destination_provider.get_shared_library_directories(
+                    ctxt, conn_info))
+
+        return required_libs
+
     @abc.abstractmethod
     @abc.abstractmethod
     def run(self, ctxt, instance, origin, destination, task_info,
     def run(self, ctxt, instance, origin, destination, task_info,
             event_handler):
             event_handler):