Exemplo n.º 1
0
    def run(self, ctxt, instance, origin, destination, task_info,
            event_handler):
        provider = providers_factory.get_provider(
            origin["type"], constants.PROVIDER_TYPE_REPLICA_EXPORT,
            event_handler)
        connection_info = base.get_connection_info(ctxt, origin)

        volumes_info = _get_volumes_info(task_info)

        migr_source_conn_info = base.unmarshal_migr_conn_info(
            task_info["migr_source_connection_info"])

        migr_target_conn_info = base.unmarshal_migr_conn_info(
            task_info["migr_target_connection_info"])

        incremental = task_info.get("incremental", True)

        source_environment = origin.get('source_environment') or {}

        volumes_info = provider.replicate_disks(ctxt, connection_info,
                                                source_environment, instance,
                                                migr_source_conn_info,
                                                migr_target_conn_info,
                                                volumes_info, incremental)

        task_info["volumes_info"] = volumes_info

        return task_info
Exemplo n.º 2
0
    def _run(self, ctxt, instance, origin, destination, task_info,
             event_handler):

        origin_provider = providers_factory.get_provider(
            origin["type"], constants.PROVIDER_TYPE_REPLICA_EXPORT,
            event_handler)

        destination_provider = providers_factory.get_provider(
            destination["type"], constants.PROVIDER_TYPE_REPLICA_IMPORT,
            event_handler)

        osmorphing_connection_info = base.unmarshal_migr_conn_info(
            task_info['osmorphing_connection_info'])
        osmorphing_info = task_info.get('osmorphing_info', {})

        user_scripts = task_info.get("user_scripts")
        instance_script = None
        if user_scripts:
            instance_script = user_scripts.get("instances", {}).get(instance)
            if not instance_script:
                os_type = osmorphing_info.get("os_type")
                if os_type:
                    instance_script = user_scripts.get("global",
                                                       {}).get(os_type)

        osmorphing_manager.morph_image(origin_provider, destination_provider,
                                       osmorphing_connection_info,
                                       osmorphing_info, instance_script,
                                       event_handler)

        return {}
Exemplo n.º 3
0
    def _run(self, ctxt, instance, origin, destination, task_info,
             event_handler):

        platform_to_target = None
        required_platform = self.get_required_platform()
        if required_platform == constants.TASK_PLATFORM_SOURCE:
            platform_to_target = origin
        elif required_platform == constants.TASK_PLATFORM_DESTINATION:
            platform_to_target = destination
        else:
            raise NotImplementedError(
                "Unknown minion healthcheck platform '%s'" %
                (required_platform))

        connection_info = base.get_connection_info(ctxt, platform_to_target)
        provider_type = self.get_required_provider_types()[
            self.get_required_platform()][0]
        provider = providers_factory.get_provider(platform_to_target["type"],
                                                  provider_type, event_handler)

        minion_properties = task_info['minion_provider_properties']
        minion_connection_info = base.unmarshal_migr_conn_info(
            task_info['minion_connection_info'])

        provider.healthcheck_minion(ctxt, connection_info, minion_properties,
                                    minion_connection_info)

        return {}
Exemplo n.º 4
0
    def _run(self, ctxt, instance, origin, destination, task_info,
             event_handler):
        provider = providers_factory.get_provider(
            origin["type"], constants.PROVIDER_TYPE_REPLICA_EXPORT,
            event_handler)
        connection_info = base.get_connection_info(ctxt, origin)
        export_info = task_info["export_info"]

        volumes_info = _get_volumes_info(task_info)
        schemas.validate_value(
            {"volumes_info": volumes_info},
            schemas.CORIOLIS_DISK_SYNC_RESOURCES_INFO_SCHEMA)

        migr_source_conn_info = task_info["source_resources_connection_info"]
        if migr_source_conn_info:
            schemas.validate_value(
                migr_source_conn_info,
                schemas.CORIOLIS_REPLICATION_WORKER_CONN_INFO_SCHEMA)
            migr_source_conn_info = base.unmarshal_migr_conn_info(
                migr_source_conn_info)

        migr_target_conn_info = task_info["target_resources_connection_info"]
        if migr_target_conn_info:
            schemas.validate_value(
                migr_target_conn_info,
                schemas.CORIOLIS_DISK_SYNC_RESOURCES_CONN_INFO_SCHEMA)
            migr_target_conn_info['connection_details'] = (
                base.unmarshal_migr_conn_info(
                    migr_target_conn_info['connection_details']))
        incremental = task_info.get("incremental", True)

        source_environment = task_info['source_environment']

        source_resources = task_info.get('source_resources', {})
        volumes_info = provider.replicate_disks(ctxt, connection_info,
                                                source_environment, instance,
                                                source_resources,
                                                migr_source_conn_info,
                                                migr_target_conn_info,
                                                volumes_info, incremental)
        schemas.validate_value(volumes_info,
                               schemas.CORIOLIS_VOLUMES_INFO_SCHEMA)

        volumes_info = _check_ensure_volumes_info_ordering(
            export_info, volumes_info)

        return {'volumes_info': volumes_info}
Exemplo n.º 5
0
    def run(self, ctxt, instance, origin, destination, task_info,
            event_handler):
        instance_deployment_info = task_info["instance_deployment_info"]
        volumes_info = instance_deployment_info["volumes_info"]
        LOG.info("Volumes info is: %r" % volumes_info)

        image_paths = [i.get("disk_image_uri") for i in volumes_info]
        if None in image_paths:
            raise exception.InvalidActionTasksExecutionState(
                "disk_image_uri must be part of volumes_info for"
                " standard migrations")

        target_conn_info = base.unmarshal_migr_conn_info(
            instance_deployment_info["disk_sync_connection_info"])
        manager.copy_disk_data(target_conn_info, volumes_info, event_handler)

        return task_info
Exemplo n.º 6
0
    def run(self, ctxt, instance, origin, destination, task_info,
            event_handler):

        origin_provider_type = task_info["origin_provider_type"]
        destination_provider_type = task_info["destination_provider_type"]

        origin_provider = providers_factory.get_provider(
            origin["type"], origin_provider_type, event_handler)

        destination_provider = providers_factory.get_provider(
            destination["type"], destination_provider_type, event_handler)

        osmorphing_connection_info = base.unmarshal_migr_conn_info(
            task_info['osmorphing_connection_info'])
        osmorphing_info = task_info.get('osmorphing_info', {})

        osmorphing_manager.morph_image(origin_provider, destination_provider,
                                       osmorphing_connection_info,
                                       osmorphing_info, event_handler)

        return task_info
Exemplo n.º 7
0
    def run(self, ctxt, instance, origin, destination, task_info,
            event_handler):
        instance_deployment_info = task_info["instance_deployment_info"]
        schemas.validate_value(
            instance_deployment_info['disk_sync_connection_info'],
            schemas.CORIOLIS_DISK_SYNC_RESOURCES_CONN_INFO_SCHEMA)

        volumes_info = instance_deployment_info["volumes_info"]
        schemas.validate_value(
            {"volumes_info": volumes_info},
            schemas.CORIOLIS_DISK_SYNC_RESOURCES_INFO_SCHEMA)
        LOG.info("Volumes info is: %r" % volumes_info)

        image_paths = [i.get("disk_image_uri") for i in volumes_info]
        if None in image_paths:
            raise exception.InvalidActionTasksExecutionState(
                "disk_image_uri must be part of volumes_info for"
                " standard migrations")

        target_conn_info = base.unmarshal_migr_conn_info(
            instance_deployment_info["disk_sync_connection_info"])
        manager.copy_disk_data(target_conn_info, volumes_info, event_handler)

        return task_info