Esempio n. 1
0
    def resize_flavor(self, new_flavor_id):
        self.validate_can_perform_action()
        LOG.debug("resizing instance %s flavor to %s" %
                  (self.id, new_flavor_id))
        # Validate that the flavor can be found and that it isn't the same size
        # as the current one.
        client = create_nova_client(self.context)
        try:
            new_flavor = client.flavors.get(new_flavor_id)
        except nova_exceptions.NotFound:
            raise exception.FlavorNotFound(uuid=new_flavor_id)
        old_flavor = client.flavors.get(self.flavor_id)
        new_flavor_size = new_flavor.ram
        old_flavor_size = old_flavor.ram
        if CONF.reddwarf_volume_support:
            if new_flavor.ephemeral != 0:
                raise exception.LocalStorageNotSupported()
            if new_flavor_size == old_flavor_size:
                raise exception.CannotResizeToSameSize()
        elif CONF.device_path is not None:
            # ephemeral support enabled
            if new_flavor.ephemeral == 0:
                raise exception.LocalStorageNotSpecified(flavor=new_flavor_id)
            if (new_flavor_size == old_flavor_size
                    and new_flavor.ephemeral == new_flavor.ephemeral):
                raise exception.CannotResizeToSameSize()

        # Set the task to RESIZING and begin the async call before returning.
        self.update_db(task_status=InstanceTasks.RESIZING)
        LOG.debug("Instance %s set to RESIZING." % self.id)
        task_api.API(self.context).resize_flavor(self.id, new_flavor_id,
                                                 old_flavor_size,
                                                 new_flavor_size)
Esempio n. 2
0
    def create(cls, context, name, flavor_id, image_id, databases, users,
               service_type, volume_size):
        client = create_nova_client(context)
        try:
            flavor = client.flavors.get(flavor_id)
        except nova_exceptions.NotFound:
            raise exception.FlavorNotFound(uuid=flavor_id)

        db_info = DBInstance.create(name=name,
                                    flavor_id=flavor_id,
                                    tenant_id=context.tenant,
                                    volume_size=volume_size,
                                    task_status=InstanceTasks.BUILDING)
        LOG.debug(
            _("Tenant %s created new Reddwarf instance %s...") %
            (context.tenant, db_info.id))

        service_status = InstanceServiceStatus.create(
            instance_id=db_info.id, status=ServiceStatuses.NEW)

        dns_support = config.Config.get("reddwarf_dns_support", 'False')
        if utils.bool_from_string(dns_support):
            dns_client = create_dns_client(context)
            hostname = dns_client.determine_hostname(db_info.id)
            db_info.hostname = hostname
            db_info.save()

        task_api.API(context).create_instance(db_info.id, name, flavor_id,
                                              flavor.ram, image_id, databases,
                                              users, service_type, volume_size)

        return SimpleInstance(context, db_info, service_status)
Esempio n. 3
0
 def _delete_resources():
     backup = cls.get_by_id(backup_id)
     if backup.is_running:
         msg = ("Backup %s cannot be delete because it is running." %
                backup_id)
         raise exception.UnprocessableEntity(msg)
     cls.verify_swift_auth_token(context)
     api.API(context).delete_backup(backup_id)
Esempio n. 4
0
 def _delete_resources():
     if self.is_building:
         raise exception.UnprocessableEntity("Instance %s is not ready."
                                             % self.id)
     LOG.debug(_("  ... deleting compute id = %s") %
               self.db_info.compute_instance_id)
     LOG.debug(_(" ... setting status to DELETING."))
     self.update_db(task_status=InstanceTasks.DELETING)
     task_api.API(self.context).delete_instance(self.id)
Esempio n. 5
0
 def restart(self):
     self._validate_can_perform_action()
     LOG.info("Restarting MySQL on instance %s..." % self.id)
     # Set our local status since Nova might not change it quick enough.
     #TODO(tim.simpson): Possible bad stuff can happen if this service
     #                   shuts down before it can set status to NONE.
     #                   We need a last updated time to mitigate this;
     #                   after some period of tolerance, we'll assume the
     #                   status is no longer in effect.
     self.update_db(task_status=InstanceTasks.REBOOTING)
     task_api.API(self.context).restart(self.id)
Esempio n. 6
0
 def delete(self):
     if (self.db_info.server_status in ["BUILD"]
             and not self.db_info.task_status.is_error):
         raise exception.UnprocessableEntity("Instance %s is not ready." %
                                             self.id)
     LOG.debug(
         _("  ... deleting compute id = %s") %
         self.db_info.compute_instance_id)
     LOG.debug(_(" ... setting status to DELETING."))
     self.update_db(task_status=InstanceTasks.DELETING)
     task_api.API(self.context).delete_instance(self.id)
Esempio n. 7
0
 def resize_volume(self, new_size):
     self._validate_can_perform_action()
     LOG.info("Resizing volume of instance %s..." % self.id)
     if not self.volume_size:
         raise exception.BadRequest("Instance %s has no volume." % self.id)
     old_size = self.volume_size
     if int(new_size) <= old_size:
         msg = ("The new volume 'size' must be larger than the current "
                "volume size of '%s'")
         raise exception.BadRequest(msg % old_size)
     # Set the task to Resizing before sending off to the taskmanager
     self.update_db(task_status=InstanceTasks.RESIZING)
     task_api.API(self.context).resize_volume(new_size, self.id)
Esempio n. 8
0
        def _create_resources():
            client = create_nova_client(context)
            security_groups = None
            try:
                flavor = client.flavors.get(flavor_id)
            except nova_exceptions.NotFound:
                raise exception.FlavorNotFound(uuid=flavor_id)

            if backup_id is not None:
                backup_info = Backup.get_by_id(backup_id)
                if backup_info.is_running:
                    raise exception.BackupNotCompleteError(backup_id=backup_id)

                location = backup_info.location
                LOG.info(_("Checking if backup exist in '%s'") % location)
                if not Backup.check_object_exist(context, location):
                    raise exception.BackupFileNotFound(location=location)

            db_info = DBInstance.create(name=name,
                                        flavor_id=flavor_id,
                                        tenant_id=context.tenant,
                                        volume_size=volume_size,
                                        task_status=InstanceTasks.BUILDING)
            LOG.debug(
                _("Tenant %s created new Reddwarf instance %s...") %
                (context.tenant, db_info.id))

            service_status = InstanceServiceStatus.create(
                instance_id=db_info.id, status=ServiceStatuses.NEW)

            if CONF.reddwarf_dns_support:
                dns_client = create_dns_client(context)
                hostname = dns_client.determine_hostname(db_info.id)
                db_info.hostname = hostname
                db_info.save()

            if CONF.reddwarf_security_groups_support:
                security_group = SecurityGroup.create_for_instance(
                    db_info.id, context)
                security_groups = [security_group["name"]]

            task_api.API(context).create_instance(db_info.id, name, flavor_id,
                                                  flavor.ram, image_id,
                                                  databases, users,
                                                  service_type, volume_size,
                                                  security_groups, backup_id)

            return SimpleInstance(context, db_info, service_status)
Esempio n. 9
0
        def _create_resources():
            client = create_nova_client(context)
            security_groups = None
            try:
                flavor = client.flavors.get(flavor_id)
            except nova_exceptions.NotFound:
                raise exception.FlavorNotFound(uuid=flavor_id)

            db_info = DBInstance.create(name=name,
                                        flavor_id=flavor_id,
                                        tenant_id=context.tenant,
                                        volume_size=volume_size,
                                        task_status=InstanceTasks.BUILDING)
            LOG.debug(
                _("Tenant %s created new Reddwarf instance %s...") %
                (context.tenant, db_info.id))

            service_status = InstanceServiceStatus.create(
                instance_id=db_info.id, status=ServiceStatuses.NEW)

            if CONF.reddwarf_dns_support:
                dns_client = create_dns_client(context)
                hostname = dns_client.determine_hostname(db_info.id)
                db_info.hostname = hostname
                db_info.save()

            if CONF.reddwarf_security_groups_support:
                security_group = SecurityGroup.create_for_instance(
                    db_info.id, context)
                security_groups = [security_group["name"]]

            task_api.API(context).create_instance(db_info.id, name, flavor_id,
                                                  flavor.ram, image_id,
                                                  databases, users,
                                                  service_type, volume_size,
                                                  security_groups)

            return SimpleInstance(context, db_info, service_status)
Esempio n. 10
0
    def resize_flavor(self, new_flavor_id):
        self._validate_can_perform_action()
        LOG.debug("resizing instance %s flavor to %s" %
                  (self.id, new_flavor_id))
        # Validate that the flavor can be found and that it isn't the same size
        # as the current one.
        client = create_nova_client(self.context)
        try:
            new_flavor = client.flavors.get(new_flavor_id)
        except nova_exceptions.NotFound:
            raise exception.FlavorNotFound(uuid=new_flavor_id)
        old_flavor = client.flavors.get(self.flavor_id)
        new_flavor_size = new_flavor.ram
        old_flavor_size = old_flavor.ram
        if new_flavor_size == old_flavor_size:
            raise exception.CannotResizeToSameSize()

        # Set the task to RESIZING and begin the async call before returning.
        self.update_db(task_status=InstanceTasks.RESIZING)
        LOG.debug("Instance %s set to RESIZING." % self.id)
        task_api.API(self.context).resize_flavor(self.id, new_flavor_id,
                                                 old_flavor_size,
                                                 new_flavor_size)
Esempio n. 11
0
        def _create_resources():
            # parse the ID from the Ref
            instance_id = utils.get_id_from_href(instance)

            # verify that the instance exist and can perform actions
            from reddwarf.instance.models import Instance
            instance_model = Instance.load(context, instance_id)
            instance_model.validate_can_perform_action()

            cls.verify_swift_auth_token(context)

            try:
                db_info = DBBackup.create(name=name,
                                          description=description,
                                          tenant_id=context.tenant,
                                          state=BackupState.NEW,
                                          instance_id=instance_id,
                                          deleted=False)
            except exception.InvalidModelError as ex:
                LOG.exception("Unable to create Backup record:")
                raise exception.BackupCreationError(str(ex))

            api.API(context).create_backup(db_info.id, instance_id)
            return db_info
Esempio n. 12
0
 def reboot(self):
     self._validate_can_perform_action()
     LOG.info("Rebooting instance %s..." % self.id)
     self.update_db(task_status=InstanceTasks.REBOOTING)
     task_api.API(self.context).reboot(self.id)
Esempio n. 13
0
 def migrate(self):
     self._validate_can_perform_action()
     LOG.info("Migrating instance %s..." % self.id)
     self.update_db(task_status=InstanceTasks.MIGRATING)
     task_api.API(self.context).migrate(self.id)