Example #1
0
    def delete_replica_disks(self, ctxt, replica_id):
        replica = self._get_replica(ctxt, replica_id)
        self._check_replica_running_executions(ctxt, replica)

        execution = models.TasksExecution()
        execution.id = str(uuid.uuid4())
        execution.status = constants.EXECUTION_STATUS_RUNNING
        execution.action = replica

        has_tasks = False
        for instance in replica.instances:
            if (instance in replica.info
                    and "volumes_info" in replica.info[instance]):
                self._create_task(instance,
                                  constants.TASK_TYPE_DELETE_REPLICA_DISKS,
                                  execution)
                has_tasks = True

        if not has_tasks:
            raise exception.InvalidReplicaState(
                "This replica does not have volumes information for any "
                "instance. Ensure that the replica has been executed "
                "successfully priorly")

        db_api.add_replica_tasks_execution(ctxt, execution)
        LOG.info("Replica tasks execution created: %s", execution.id)

        self._begin_tasks(ctxt, execution, replica.info)
        return self.get_replica_tasks_execution(ctxt, replica_id, execution.id)
Example #2
0
    def update_replica(self, ctxt, replica_id, properties):
        replica = self._get_replica(ctxt, replica_id)
        self._check_replica_running_executions(ctxt, replica)
        execution = models.TasksExecution()
        execution.id = str(uuid.uuid4())
        execution.status = constants.EXECUTION_STATUS_RUNNING
        execution.action = replica

        for instance in execution.action.instances:
            replica.info[instance] = properties
            self._create_task(instance, constants.TASK_TYPE_UPDATE_REPLICA,
                              execution)
        db_api.add_replica_tasks_execution(ctxt, execution)
        LOG.info("Replica tasks execution created: %s", execution.id)
        self._begin_tasks(ctxt, execution, replica.info)
        return self.get_replica_tasks_execution(ctxt, replica_id, execution.id)
Example #3
0
    def execute_replica_tasks(self, ctxt, replica_id, shutdown_instances):
        replica = self._get_replica(ctxt, replica_id)
        self._check_replica_running_executions(ctxt, replica)
        execution = models.TasksExecution()
        execution.id = str(uuid.uuid4())
        execution.status = constants.EXECUTION_STATUS_RUNNING
        execution.action = replica

        for instance in execution.action.instances:
            validate_replica_inputs_task = self._create_task(
                instance, constants.TASK_TYPE_VALIDATE_REPLICA_INPUTS,
                execution)

            get_instance_info_task = self._create_task(
                instance,
                constants.TASK_TYPE_GET_INSTANCE_INFO,
                execution,
                depends_on=[validate_replica_inputs_task.id])

            depends_on = [get_instance_info_task.id]
            if shutdown_instances:
                shutdown_instance_task = self._create_task(
                    instance,
                    constants.TASK_TYPE_SHUTDOWN_INSTANCE,
                    execution,
                    depends_on=depends_on)
                depends_on = [shutdown_instance_task.id]

            deploy_replica_disks_task = self._create_task(
                instance,
                constants.TASK_TYPE_DEPLOY_REPLICA_DISKS,
                execution,
                depends_on=depends_on)

            deploy_replica_source_resources_task = self._create_task(
                instance,
                constants.TASK_TYPE_DEPLOY_REPLICA_SOURCE_RESOURCES,
                execution,
                depends_on=[deploy_replica_disks_task.id])

            deploy_replica_target_resources_task = self._create_task(
                instance,
                constants.TASK_TYPE_DEPLOY_REPLICA_TARGET_RESOURCES,
                execution,
                depends_on=[deploy_replica_disks_task.id])

            replicate_disks_task = self._create_task(
                instance,
                constants.TASK_TYPE_REPLICATE_DISKS,
                execution,
                depends_on=[
                    deploy_replica_source_resources_task.id,
                    deploy_replica_target_resources_task.id
                ])

            self._create_task(
                instance,
                constants.TASK_TYPE_DELETE_REPLICA_SOURCE_RESOURCES,
                execution,
                depends_on=[replicate_disks_task.id],
                on_error=True)

            self._create_task(
                instance,
                constants.TASK_TYPE_DELETE_REPLICA_TARGET_RESOURCES,
                execution,
                depends_on=[replicate_disks_task.id],
                on_error=True)

        db_api.add_replica_tasks_execution(ctxt, execution)
        LOG.info("Replica tasks execution created: %s", execution.id)

        self._begin_tasks(ctxt, execution, replica.info)
        return self.get_replica_tasks_execution(ctxt, replica_id, execution.id)