Пример #1
0
    def delete(self, project_id):
        """Reset a project's quotas to the default values."""
        context = pecan_request.context.get('octavia_context')

        if not project_id:
            raise exceptions.MissingAPIProjectID()

        self._auth_validate_action(context, project_id, constants.RBAC_DELETE)

        self.repositories.quotas.delete(context.session, project_id)
        db_quotas = self._get_db_quotas(context.session, project_id)
        return self._convert_db_to_type(db_quotas, quota_types.QuotaResponse)
Пример #2
0
    def get(self):
        """Get a project's default quota details."""
        context = pecan_request.context.get('octavia_context')

        if not self.project_id:
            raise exceptions.MissingAPIProjectID()

        self._auth_validate_action(context, self.project_id,
                                   constants.RBAC_GET_DEFAULTS)

        quotas = self._get_default_quotas(self.project_id)
        return self._convert_db_to_type(quotas, quota_types.QuotaResponse)
Пример #3
0
    def put(self, project_id, quotas):
        """Update any or all quotas for a project."""
        context = pecan_request.context.get('octavia_context')

        if not project_id:
            raise exceptions.MissingAPIProjectID()

        self._auth_validate_action(context, project_id, constants.RBAC_PUT)

        quotas_dict = quotas.to_dict()
        self.repositories.quotas.update(context.session, project_id,
                                        **quotas_dict)
        db_quotas = self._get_db_quotas(context.session, project_id)
        return self._convert_db_to_type(db_quotas, quota_types.QuotaResponse)
Пример #4
0
    def put(self, project_id, quotas):
        """Update any or all quotas for a project."""
        context = pecan.request.context.get('octavia_context')

        new_project_id = context.project_id
        if context.is_admin or CONF.auth_strategy == constants.NOAUTH:
            if project_id:
                new_project_id = project_id

        if not new_project_id:
            raise exceptions.MissingAPIProjectID()

        project_id = new_project_id

        quotas_dict = quotas.to_dict()
        self.repositories.quotas.update(context.session, project_id,
                                        **quotas_dict)
        db_quotas = self._get_db_quotas(context.session, project_id)
        return self._convert_db_to_type(db_quotas, quota_types.QuotaResponse)
Пример #5
0
    def post(self, load_balancer):
        """Creates a load balancer."""
        context = pecan.request.context.get('octavia_context')

        project_id = context.project_id
        if context.is_admin or CONF.auth_strategy == constants.NOAUTH:
            if load_balancer.project_id:
                project_id = load_balancer.project_id

        if not project_id:
            raise exceptions.MissingAPIProjectID()

        load_balancer.project_id = project_id

        # Validate the subnet id
        if load_balancer.vip.subnet_id:
            if not validate.subnet_exists(load_balancer.vip.subnet_id):
                raise exceptions.NotFound(resource='Subnet',
                                          id=load_balancer.vip.subnet_id)

        lock_session = db_api.get_session(autocommit=False)
        if self.repositories.check_quota_met(context.session, lock_session,
                                             data_models.LoadBalancer,
                                             load_balancer.project_id):
            lock_session.rollback()
            raise exceptions.QuotaException

        if load_balancer.listeners:
            try:
                db_lb = self._create_load_balancer_graph_db(
                    lock_session, load_balancer)
                lock_session.commit()
            except Exception:
                with excutils.save_and_reraise_exception():
                    lock_session.rollback()

            return self._load_balancer_graph_to_handler(context, db_lb)

        try:
            lb_dict = db_prepare.create_load_balancer(
                load_balancer.to_dict(render_unsets=True))
            vip_dict = lb_dict.pop('vip', {})

            db_lb = self.repositories.create_load_balancer_and_vip(
                lock_session, lb_dict, vip_dict)
            lock_session.commit()
        except odb_exceptions.DBDuplicateEntry:
            lock_session.rollback()
            raise exceptions.IDAlreadyExists()
        except Exception:
            with excutils.save_and_reraise_exception():
                lock_session.rollback()

        # Handler will be responsible for sending to controller
        try:
            LOG.info(_LI("Sending created Load Balancer %s to the handler"),
                     db_lb.id)
            self.handler.create(db_lb)
        except Exception:
            with excutils.save_and_reraise_exception(reraise=False):
                self.repositories.load_balancer.update(
                    context.session,
                    db_lb.id,
                    provisioning_status=constants.ERROR)
        return self._convert_db_to_type(db_lb, lb_types.LoadBalancerResponse)