def _graph_create(self, session, lock_session, pool_dict): load_balancer_id = pool_dict['load_balancer_id'] pool_dict = db_prepare.create_pool(pool_dict, load_balancer_id) members = pool_dict.pop('members', []) or [] hm = pool_dict.pop('health_monitor', None) db_pool = self._validate_create_pool(lock_session, pool_dict) # Check quotas for healthmonitors if hm and self.repositories.check_quota_met(session, lock_session, data_models.HealthMonitor, db_pool.project_id): raise exceptions.QuotaException( resource=data_models.HealthMonitor._name()) # Now possibly create a healthmonitor if hm: hm[constants.POOL_ID] = db_pool.id hm[constants.PROJECT_ID] = db_pool.project_id new_hm = health_monitor.HealthMonitorController()._graph_create( lock_session, hm) if db_pool.protocol in (constants.PROTOCOL_UDP, lib_consts.PROTOCOL_SCTP): health_monitor.HealthMonitorController( )._validate_healthmonitor_request_for_udp_sctp( new_hm, db_pool) else: if new_hm.type in (constants.HEALTH_MONITOR_UDP_CONNECT, lib_consts.HEALTH_MONITOR_SCTP): raise exceptions.ValidationException( detail=_( "The %(type)s type is only supported for pools of " "type %(protocol)s.") % { 'type': new_hm.type, 'protocol': '/'.join((constants.PROTOCOL_UDP, lib_consts.PROTOCOL_SCTP)) }) db_pool.health_monitor = new_hm # Now check quotas for members if members and self.repositories.check_quota_met(session, lock_session, data_models.Member, db_pool.project_id, count=len(members)): raise exceptions.QuotaException( resource=data_models.Member._name()) # Now create members new_members = [] for m in members: validate.ip_not_reserved(m["ip_address"]) m['project_id'] = db_pool.project_id new_members.append( member.MembersController(db_pool.id)._graph_create( lock_session, m)) db_pool.members = new_members return db_pool
def _graph_create(self, session, lock_session, pool_dict): load_balancer_id = pool_dict['load_balancer_id'] pool_dict = db_prepare.create_pool(pool_dict, load_balancer_id) members = pool_dict.pop('members', []) or [] hm = pool_dict.pop('health_monitor', None) db_pool = self._validate_create_pool(lock_session, pool_dict) # Check cluster quotas for healthmonitors if hm and self.repositories.check_clusterquota_met( lock_session, data_models.HealthMonitor, base_res_id=db_pool.id): raise exceptions.ClusterQuotaException( resource=data_models.HealthMonitor._name()) # Check quotas for healthmonitors if hm and self.repositories.check_quota_met(session, lock_session, data_models.HealthMonitor, db_pool.project_id): raise exceptions.QuotaException( resource=data_models.HealthMonitor._name()) # Now possibly create a healthmonitor new_hm = None if hm: hm['pool_id'] = db_pool.id hm['project_id'] = db_pool.project_id new_hm = health_monitor.HealthMonitorController()._graph_create( lock_session, hm) db_pool.health_monitor = new_hm # Now check cluster quotas for members if members and self.repositories.check_clusterquota_met( lock_session, data_models.Member, base_res_id=db_pool.id, count=len(members)): raise exceptions.ClusterQuotaException( resource=data_models.Member._name()) # Now check quotas for members if members and self.repositories.check_quota_met(session, lock_session, data_models.Member, db_pool.project_id, count=len(members)): raise exceptions.QuotaException( resource=data_models.Member._name()) # Now create members new_members = [] for m in members: validate.ip_not_reserved(m["ip_address"]) m['project_id'] = db_pool.project_id new_members.append( member.MembersController(db_pool.id)._graph_create( lock_session, m)) db_pool.members = new_members return db_pool
def _lookup(self, pool_id, *remainder): """Overridden pecan _lookup method for custom routing. Verifies that the pool passed in the url exists, and if so decides which controller, if any, should control be passed. """ context = pecan.request.context.get('octavia_context') if pool_id and len(remainder) and remainder[0] == 'members': remainder = remainder[1:] db_pool = self.repositories.pool.get(context.session, id=pool_id) if not db_pool: LOG.info("Pool %s not found.", pool_id) raise exceptions.NotFound(resource=data_models.Pool._name(), id=pool_id) if remainder: return member.MemberController(pool_id=db_pool.id), remainder else: return member.MembersController(pool_id=db_pool.id), remainder
def _graph_create(self, session, lock_session, pool_dict): load_balancer_id = pool_dict['load_balancer_id'] pool_dict = db_prepare.create_pool(pool_dict, load_balancer_id) members = pool_dict.pop('members', []) or [] hm = pool_dict.pop('health_monitor', None) db_pool = self._validate_create_pool(lock_session, pool_dict) # Check quotas for healthmonitors if hm and self.repositories.check_quota_met(session, lock_session, data_models.HealthMonitor, db_pool.project_id): raise exceptions.QuotaException # Now possibly create a healthmonitor new_hm = None if hm: hm['pool_id'] = db_pool.id hm['project_id'] = db_pool.project_id new_hm = health_monitor.HealthMonitorController()._graph_create( lock_session, hm) # Now check quotas for members if members and self.repositories.check_quota_met(session, lock_session, data_models.Member, db_pool.project_id, count=len(members)): raise exceptions.QuotaException # Now create members new_members = [] for m in members: m['project_id'] = db_pool.project_id new_members.append( member.MembersController(db_pool.id)._graph_create( lock_session, m)) return db_pool, new_hm, new_members