Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
    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
Exemple #4
0
    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