def _graph_create(self, session, lock_session, policy_dict): load_balancer_id = policy_dict.pop('load_balancer_id', None) listener_id = policy_dict['listener_id'] policy_dict = db_prepare.create_l7policy(policy_dict, load_balancer_id, listener_id) rules = policy_dict.pop('l7rules', []) or [] db_policy = self._validate_create_l7policy(lock_session, policy_dict) # Check cluster quotas for l7rules. if rules and self.repositories.check_clusterquota_met( lock_session, data_models.L7Rule, base_res_id=db_policy.id, count=len(rules)): raise exceptions.ClusterQuotaException( resource=data_models.L7Rule._name()) # Check quotas for l7policies. if rules and self.repositories.check_quota_met(session, lock_session, data_models.L7Rule, db_policy.project_id, count=len(rules)): raise exceptions.ClusterQuotaException( resource=data_models.L7Rule._name()) new_rules = [] for r in rules: r['project_id'] = db_policy.project_id new_rules.append( l7rule.L7RuleController(db_policy.id)._graph_create( lock_session, r)) db_policy.l7rules = new_rules return db_policy
def post(self, l7policy_): """Creates a l7policy on a listener.""" l7policy = l7policy_.l7policy context = pecan.request.context.get('octavia_context') # Make sure any pool specified by redirect_pool_id exists if l7policy.redirect_pool_id: db_pool = self._get_db_pool(context.session, l7policy.redirect_pool_id) self._escape_l7policy_udp_pool_request(db_pool) # Verify the parent listener exists listener_id = l7policy.listener_id listener = self._get_db_listener(context.session, listener_id) load_balancer_id = listener.load_balancer_id l7policy.project_id, provider = self._get_lb_project_id_provider( context.session, load_balancer_id) self._auth_validate_action(context, l7policy.project_id, constants.RBAC_POST) # Load the driver early as it also provides validation driver = driver_factory.get_driver(provider) lock_session = db_api.get_session(autocommit=False) try: if self.repositories.check_quota_met(context.session, lock_session, data_models.L7Policy, l7policy.project_id): raise exceptions.QuotaException( resource=data_models.L7Policy._name()) l7policy_dict = db_prepare.create_l7policy( l7policy.to_dict(render_unsets=True), load_balancer_id, listener_id) self._test_lb_and_listener_statuses(lock_session, lb_id=load_balancer_id, listener_ids=[listener_id]) db_l7policy = self._validate_create_l7policy( lock_session, l7policy_dict) # Prepare the data for the driver data model provider_l7policy = ( driver_utils.db_l7policy_to_provider_l7policy(db_l7policy)) # Dispatch to the driver LOG.info("Sending create L7 Policy %s to provider %s", db_l7policy.id, driver.name) driver_utils.call_provider(driver.name, driver.l7policy_create, provider_l7policy) lock_session.commit() except Exception: with excutils.save_and_reraise_exception(): lock_session.rollback() db_l7policy = self._get_db_l7policy(context.session, db_l7policy.id) result = self._convert_db_to_type(db_l7policy, l7policy_types.L7PolicyResponse) return l7policy_types.L7PolicyRootResponse(l7policy=result)
def _graph_create(self, lock_session, policy_dict): load_balancer_id = policy_dict.pop('load_balancer_id', None) listener_id = policy_dict['listener_id'] policy_dict = db_prepare.create_l7policy(policy_dict, load_balancer_id, listener_id) rules = policy_dict.pop('l7rules', []) or [] db_policy = self._validate_create_l7policy(lock_session, policy_dict) new_rules = [] for r in rules: r['project_id'] = db_policy.project_id new_rules.append( l7rule.L7RuleController(db_policy.id)._graph_create( lock_session, r)) return db_policy
def _graph_create(self, lock_session, policy_dict): load_balancer_id = policy_dict.pop('load_balancer_id', None) listener_id = policy_dict['listener_id'] policy_dict = db_prepare.create_l7policy( policy_dict, load_balancer_id, listener_id) rules = policy_dict.pop('l7rules', []) or [] db_policy = self._validate_create_l7policy(lock_session, policy_dict) new_rules = [] for r in rules: r['project_id'] = db_policy.project_id new_rules.append( l7rule.L7RuleController(db_policy.id)._graph_create( lock_session, r)) db_policy.l7rules = new_rules return db_policy
def post(self, l7policy): """Creates a l7policy on a listener.""" context = pecan.request.context.get('octavia_context') l7policy_dict = validate.sanitize_l7policy_api_args( l7policy.to_dict(render_unsets=True), create=True) # Make sure any pool specified by redirect_pool_id exists if l7policy_dict.get('redirect_pool_id'): self._get_db_pool(context.session, l7policy_dict['redirect_pool_id']) l7policy_dict = db_prepare.create_l7policy(l7policy_dict, self.load_balancer_id, self.listener_id) self._test_lb_and_listener_statuses(context.session) try: db_l7policy = self.repositories.l7policy.create( context.session, **l7policy_dict) except oslo_exc.DBDuplicateEntry as de: # Setting LB and Listener back to active because this is just a # validation failure self.repositories.load_balancer.update( context.session, self.load_balancer_id, provisioning_status=constants.ACTIVE) self.repositories.listener.update( context.session, self.listener_id, provisioning_status=constants.ACTIVE) if ['id'] == de.columns: raise exceptions.IDAlreadyExists() try: LOG.info(_LI("Sending Creation of L7Policy %s to handler"), db_l7policy.id) self.handler.create(db_l7policy) except Exception: with excutils.save_and_reraise_exception(reraise=False): self.repositories.listener.update( context.session, self.listener_id, operating_status=constants.ERROR) db_l7policy = self._get_db_l7policy(context.session, db_l7policy.id) return self._convert_db_to_type(db_l7policy, l7policy_types.L7PolicyResponse)
def post(self, l7policy_): """Creates a l7policy on a listener.""" l7policy = l7policy_.l7policy context = pecan.request.context.get('octavia_context') # l7policy_dict = validate.sanitize_l7policy_api_args( # l7policy.to_dict(render_unsets=True), create=True) if l7policy.redirect_pool_id: self._get_db_pool( context.session, l7policy.redirect_pool_id) # Make sure any pool specified by redirect_pool_id exists listener_id = l7policy.listener_id listener = self._get_db_listener( context.session, listener_id) load_balancer_id = listener.load_balancer_id l7policy.project_id = listener.project_id lock_session = db_api.get_session(autocommit=False) if self.repositories.check_quota_met( context.session, lock_session, data_models.L7Policy, l7policy.project_id): lock_session.rollback() raise exceptions.QuotaException l7policy_dict = db_prepare.create_l7policy( l7policy.to_dict(render_unsets=True), load_balancer_id, listener_id) try: self._test_lb_and_listener_statuses( lock_session, lb_id=load_balancer_id, listener_ids=[listener_id]) db_l7policy = self._validate_create_l7policy( lock_session, l7policy_dict) lock_session.commit() except Exception: with excutils.save_and_reraise_exception(): lock_session.rollback() return self._send_l7policy_to_handler(context.session, db_l7policy, lb_id=load_balancer_id)
def post(self, l7policy): """Creates a l7policy on a listener.""" context = pecan.request.context.get('octavia_context') l7policy_dict = validate.sanitize_l7policy_api_args( l7policy.to_dict(render_unsets=True), create=True) # Make sure any pool specified by redirect_pool_id exists if l7policy_dict.get('redirect_pool_id'): self._get_db_pool( context.session, l7policy_dict['redirect_pool_id']) l7policy_dict = db_prepare.create_l7policy(l7policy_dict, self.load_balancer_id, self.listener_id) self._test_lb_and_listener_statuses(context.session) try: db_l7policy = self.repositories.l7policy.create(context.session, **l7policy_dict) except oslo_exc.DBDuplicateEntry as de: # Setting LB and Listener back to active because this is just a # validation failure self.repositories.load_balancer.update( context.session, self.load_balancer_id, provisioning_status=constants.ACTIVE) self.repositories.listener.update( context.session, self.listener_id, provisioning_status=constants.ACTIVE) if ['id'] == de.columns: raise exceptions.IDAlreadyExists() try: LOG.info(_LI("Sending Creation of L7Policy %s to handler"), db_l7policy.id) self.handler.create(db_l7policy) except Exception: with excutils.save_and_reraise_exception(reraise=False): self.repositories.listener.update( context.session, self.listener_id, operating_status=constants.ERROR) db_l7policy = self._get_db_l7policy(context.session, db_l7policy.id) return self._convert_db_to_type(db_l7policy, l7policy_types.L7PolicyResponse)
def post(self, l7policy_): """Creates a l7policy on a listener.""" l7policy = l7policy_.l7policy context = pecan.request.context.get('octavia_context') # Make sure any pool specified by redirect_pool_id exists if l7policy.redirect_pool_id: db_pool = self._get_db_pool( context.session, l7policy.redirect_pool_id) self._escape_l7policy_udp_pool_request(db_pool) # Verify the parent listener exists listener_id = l7policy.listener_id listener = self._get_db_listener( context.session, listener_id) load_balancer_id = listener.load_balancer_id l7policy.project_id, provider = self._get_lb_project_id_provider( context.session, load_balancer_id) self._auth_validate_action(context, l7policy.project_id, constants.RBAC_POST) # Load the driver early as it also provides validation driver = driver_factory.get_driver(provider) lock_session = db_api.get_session(autocommit=False) try: if self.repositories.check_quota_met( context.session, lock_session, data_models.L7Policy, l7policy.project_id): raise exceptions.QuotaException( resource=data_models.L7Policy._name()) l7policy_dict = db_prepare.create_l7policy( l7policy.to_dict(render_unsets=True), load_balancer_id, listener_id) self._test_lb_and_listener_statuses( lock_session, lb_id=load_balancer_id, listener_ids=[listener_id]) db_l7policy = self._validate_create_l7policy( lock_session, l7policy_dict) # Prepare the data for the driver data model provider_l7policy = ( driver_utils.db_l7policy_to_provider_l7policy(db_l7policy)) # Dispatch to the driver LOG.info("Sending create L7 Policy %s to provider %s", db_l7policy.id, driver.name) driver_utils.call_provider( driver.name, driver.l7policy_create, provider_l7policy) lock_session.commit() except Exception: with excutils.save_and_reraise_exception(): lock_session.rollback() db_l7policy = self._get_db_l7policy(context.session, db_l7policy.id) result = self._convert_db_to_type(db_l7policy, l7policy_types.L7PolicyResponse) return l7policy_types.L7PolicyRootResponse(l7policy=result)