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)
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)
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)
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)
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)