Explorar el Código

Fix OSMorphing pool attach/detach tasks.

Nashwan Azhari hace 5 años
padre
commit
4801645c17
Se han modificado 1 ficheros con 57 adiciones y 5 borrados
  1. 57 5
      coriolis/tasks/minion_pool_tasks.py

+ 57 - 5
coriolis/tasks/minion_pool_tasks.py

@@ -359,14 +359,12 @@ class _BaseVolumesMinionMachineAttachmentTask(base.TaskRunner):
     @classmethod
     @classmethod
     def get_required_task_info_properties(cls):
     def get_required_task_info_properties(cls):
         fields = list(cls._get_minion_task_info_field_mappings().keys())
         fields = list(cls._get_minion_task_info_field_mappings().keys())
-        fields.append("volumes_info")
         return fields
         return fields
 
 
     @classmethod
     @classmethod
     def get_returned_task_info_properties(cls):
     def get_returned_task_info_properties(cls):
         fields = list(cls._get_minion_task_info_field_mappings().values())
         fields = list(cls._get_minion_task_info_field_mappings().values())
         fields.append(cls._get_minion_properties_task_info_field())
         fields.append(cls._get_minion_properties_task_info_field())
-        fields.append("volumes_info")
         return fields
         return fields
 
 
     @classmethod
     @classmethod
@@ -374,6 +372,11 @@ class _BaseVolumesMinionMachineAttachmentTask(base.TaskRunner):
         return _get_required_minion_pool_provider_types_for_platform(
         return _get_required_minion_pool_provider_types_for_platform(
             cls.get_required_platform())
             cls.get_required_platform())
 
 
+    @classmethod
+    def _get_volumes_info_from_task_info(cls, task_info):
+        raise NotImplementedError(
+            "No minion volumes info retrieval logic implemented.")
+
     @classmethod
     @classmethod
     def _get_minion_properties_task_info_field(cls):
     def _get_minion_properties_task_info_field(cls):
         raise NotImplementedError(
         raise NotImplementedError(
@@ -409,7 +412,7 @@ class _BaseVolumesMinionMachineAttachmentTask(base.TaskRunner):
         provider = providers_factory.get_provider(
         provider = providers_factory.get_provider(
             platform_to_target["type"], provider_type, event_handler)
             platform_to_target["type"], provider_type, event_handler)
 
 
-        volumes_info = task_info["volumes_info"]
+        volumes_info = self._get_volumes_info_from_task_info(task_info)
         minion_properties = task_info[
         minion_properties = task_info[
             self._get_minion_properties_task_info_field()]
             self._get_minion_properties_task_info_field()]
         res = self._get_provider_disk_operation(provider)(
         res = self._get_provider_disk_operation(provider)(
@@ -442,7 +445,31 @@ class _BaseVolumesMinionMachineAttachmentTask(base.TaskRunner):
         return result
         return result
 
 
 
 
-class AttachVolumesToSourceMinionTask(_BaseVolumesMinionMachineAttachmentTask):
+class _BaseAttachVolumesToTransferMinionTask(
+        _BaseVolumesMinionMachineAttachmentTask):
+
+    @classmethod
+    def _get_volumes_info_from_task_info(cls, task_info):
+        return task_info["volumes_info"]
+
+    @classmethod
+    def get_required_task_info_properties(cls):
+        fields = super(
+            _BaseAttachVolumesToTransferMinionTask,
+            cls).get_required_task_info_properties()
+        fields.append("volumes_info")
+        return fields
+
+    @classmethod
+    def get_returned_task_info_properties(cls):
+        fields = super(
+            _BaseAttachVolumesToTransferMinionTask,
+            cls).get_returned_task_info_properties()
+        fields.append("volumes_info")
+        return fields
+
+
+class AttachVolumesToSourceMinionTask(_BaseAttachVolumesToTransferMinionTask):
 
 
     @classmethod
     @classmethod
     def get_required_platform(cls):
     def get_required_platform(cls):
@@ -452,6 +479,10 @@ class AttachVolumesToSourceMinionTask(_BaseVolumesMinionMachineAttachmentTask):
     def _get_minion_properties_task_info_field(cls):
     def _get_minion_properties_task_info_field(cls):
         return "source_minion_provider_properties"
         return "source_minion_provider_properties"
 
 
+    @classmethod
+    def get_volumes_info_from_task_info(cls, task_info):
+        return task_info["volumes_info"]
+
     @classmethod
     @classmethod
     def _get_minion_task_info_field_mappings(cls):
     def _get_minion_task_info_field_mappings(cls):
         return SOURCE_MINION_TASK_INFO_FIELD_MAPPINGS
         return SOURCE_MINION_TASK_INFO_FIELD_MAPPINGS
@@ -468,7 +499,8 @@ class DetachVolumesFromSourceMinionTask(AttachVolumesToSourceMinionTask):
         return provider.detach_volumes_from_minion
         return provider.detach_volumes_from_minion
 
 
 
 
-class AttachVolumesToDestinationMinionTask(_BaseVolumesMinionMachineAttachmentTask):
+class AttachVolumesToDestinationMinionTask(
+        _BaseAttachVolumesToTransferMinionTask):
 
 
     @classmethod
     @classmethod
     def get_required_platform(cls):
     def get_required_platform(cls):
@@ -497,6 +529,26 @@ class DetachVolumesFromDestinationMinionTask(AttachVolumesToDestinationMinionTas
 class AttachVolumesToOSMorphingMinionTask(
 class AttachVolumesToOSMorphingMinionTask(
         _BaseVolumesMinionMachineAttachmentTask):
         _BaseVolumesMinionMachineAttachmentTask):
 
 
+    @classmethod
+    def _get_volumes_info_from_task_info(cls, task_info):
+        return task_info[
+            "instance_deployment_info"]["volumes_info"]
+
+    @classmethod
+    def get_required_task_info_properties(cls):
+        fields = super(
+            AttachVolumesToOSMorphingMinionTask,
+            cls).get_required_task_info_properties()
+        fields.append("instance_deployment_info")
+        return fields
+
+    @classmethod
+    def get_returned_task_info_properties(cls):
+        fields = super(
+            AttachVolumesToOSMorphingMinionTask,
+            cls).get_returned_task_info_properties()
+        return fields
+
     @classmethod
     @classmethod
     def get_required_platform(cls):
     def get_required_platform(cls):
         return constants.TASK_PLATFORM_DESTINATION
         return constants.TASK_PLATFORM_DESTINATION