Пример #1
0
 def update_member(self, context, id, member):
     v = member['member']
     try:
         with context.session.begin(subtransactions=True):
             member_db = self._get_resource(context, Member, id)
             self.assert_modification_allowed(member_db)
             if v:
                 member_db.update(v)
         return self._make_member_dict(member_db)
     except exception.DBDuplicateEntry:
         raise loadbalancer.MemberExists(address=member_db['address'],
                                         port=member_db['protocol_port'],
                                         pool=member_db['pool_id'])
    def update_object(self, member_db, id, pool_id, m):
        try:
            pool = self._api.loadbalancer_pool_read(id=pool_id)
        except NoIdError:
            raise loadbalancer.PoolNotFound(pool_id=pool_id)

        db_props = member_db.get_loadbalancer_member_properties()
        members = pool.get_loadbalancer_members()
        for member in members or []:
            member_obj = self._api.loadbalancer_member_read(id=member['uuid'])
            props = member_obj.get_loadbalancer_member_properties()
            if ((props.get_address() == db_props.get_address()) and
                (props.get_protocol_port() == db_props.get_protocol_port())):
                raise loadbalancer.MemberExists(address=props.get_address(),
                                                port=props.get_protocol_port(),
                                                pool=pool_id)

        return True
Пример #3
0
    def update_object(self, member_db, id, m):
        if 'pool_id' in m and self._get_member_pool_id(
                member_db) != m['pool_id']:
            try:
                pool = self._api.loadbalancer_pool_read(id=m['pool_id'])
            except NoIdError:
                raise loadbalancer.PoolNotFound(pool_id=m['pool_id'])

            db_props = member_db.get_loadbalancer_member_properties()
            members = pool.get_loadbalancer_members()
            for member in members or []:
                member_obj = self._api.loadbalancer_member_read(
                    id=member['uuid'])
                props = member_obj.get_loadbalancer_member_properties()
                if ((props.get_address() == db_props.get_address())
                        and (props.get_protocol_port()
                             == db_props.get_protocol_port())):
                    raise loadbalancer.MemberExists(
                        address=props.get_address(),
                        port=props.get_protocol_port(),
                        pool=m['pool_id'])

            # delete member from old pool
            props = member_db.get_loadbalancer_member_properties()
            obj_uuid = member_db.uuid
            self._api.loadbalancer_member_delete(id=member_db.uuid)

            # create member for the new pool with same uuid and props
            id_perms = IdPermsType(enable=True)
            member_obj = LoadbalancerMember(
                obj_uuid,
                pool,
                loadbalancer_member_properties=props,
                id_perms=id_perms)
            member_obj.uuid = obj_uuid
            self._api.loadbalancer_member_create(member_obj)

            return True

        return False
Пример #4
0
    def create_member(self, context, member):
        v = member['member']
        tenant_id = self._get_tenant_id_for_create(context, v)

        try:
            with context.session.begin(subtransactions=True):
                # ensuring that pool exists
                self._get_resource(context, Pool, v['pool_id'])
                member_db = Member(id=uuidutils.generate_uuid(),
                                   tenant_id=tenant_id,
                                   pool_id=v['pool_id'],
                                   address=v['address'],
                                   protocol_port=v['protocol_port'],
                                   weight=v['weight'],
                                   admin_state_up=v['admin_state_up'],
                                   status=constants.PENDING_CREATE)
                context.session.add(member_db)
                return self._make_member_dict(member_db)
        except exception.DBDuplicateEntry:
            raise loadbalancer.MemberExists(address=v['address'],
                                            port=v['protocol_port'],
                                            pool=v['pool_id'])