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 __init__(self): super(BaseV2Controller, self).__init__() self.loadbalancers = load_balancer.LoadBalancersController() self.listeners = listener.ListenersController() self.pools = pool.PoolsController() self.l7policies = l7policy.L7PolicyController() self.healthmonitors = health_monitor.HealthMonitorController() self.quotas = quotas.QuotasController()
def __init__(self): super().__init__() self.loadbalancers = load_balancer.LoadBalancersController() self.listeners = listener.ListenersController() self.pools = pool.PoolsController() self.l7policies = l7policy.L7PolicyController() self.healthmonitors = health_monitor.HealthMonitorController() self.quotas = quotas.QuotasController() self.providers = provider.ProviderController() self.flavors = flavors.FlavorsController() self.flavorprofiles = flavor_profiles.FlavorProfileController() self.availabilityzones = ( availability_zones.AvailabilityZonesController()) self.availabilityzoneprofiles = ( availability_zone_profiles.AvailabilityZoneProfileController())
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' or remainder[0] == 'healthmonitor'): controller = remainder[0] 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 controller == 'members': return member.MembersController(pool_id=db_pool.id), remainder elif controller == 'healthmonitor': return health_monitor.HealthMonitorController( load_balancer_id=db_pool.load_balancer_id, 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