コード例 #1
0
    def _reserve_dhcp_member(self):
        # for CPM, the authority member itself serves DHCP
        if (self.mapping.authority_member.member_type ==
                const.MEMBER_TYPE_CP_MEMBER):
            return self.mapping.authority_member

        # for GM,
        # check if a network view is already serving dhcp.
        #   if true, then use the same dhcp member.
        #   if false, see if gm itself is serving dhcp for other network view.
        #     if true, then try to get the next available dhcp member.
        #     if false, use gm for dhcp
        session = self.context.session
        dhcp_member = None

        dhcp_service_members = dbi.get_service_members(
            session,
            network_view_id=self.mapping.network_view_id,
            service=const.SERVICE_TYPE_DHCP)
        if dhcp_service_members:
            dhcp_member = utils.find_one_in_list(
                'member_id',
                dhcp_service_members[0].member_id,
                self.discovered_grid_members)
        else:
            if self.grid_config.use_grid_master_for_dhcp:
                dhcp_service_members = dbi.get_service_members(
                    session,
                    member_id=self.mapping.authority_member.member_id,
                    service=const.SERVICE_TYPE_DHCP)
                if dhcp_service_members:
                    # authority is GM, a dhcp member needs to be selected.
                    dhcp_member = dbi.get_next_dhcp_member(session,
                                                           self.grid_id, True)
                    if not dhcp_member:
                        raise exc.InfobloxDHCPMemberNotReserved(
                            network_view=self.mapping.network_view,
                            cidr=self.subnet.get('cidr'))
                else:
                    dhcp_member = self.mapping.authority_member
            else:
                dhcp_member = dbi.get_next_dhcp_member(session,
                                                       self.grid_id, False)
                if not dhcp_member:
                    raise exc.InfobloxDHCPMemberNotReserved(
                        network_view=self.mapping.network_view,
                        cidr=self.subnet.get('cidr'))

        return dhcp_member
コード例 #2
0
    def _reserve_dhcp_member(self):
        # for CPM, the authority member itself serves DHCP
        if (self.mapping.authority_member.member_type ==
                const.MEMBER_TYPE_CP_MEMBER):
            return self.mapping.authority_member

        # for GM,
        # check if a network view is already serving dhcp.
        #   if true, then use the same dhcp member.
        #   if false, see if gm itself is serving dhcp for other network view.
        #     if true, then try to get the next available dhcp member.
        #     if false, use gm for dhcp
        session = self.context.session
        dhcp_member = None

        dhcp_service_members = dbi.get_service_members(
            session,
            network_view_id=self.mapping.network_view_id,
            service=const.SERVICE_TYPE_DHCP)
        if dhcp_service_members:
            dhcp_member = utils.find_one_in_list(
                'member_id',
                dhcp_service_members[0].member_id,
                self.discovered_grid_members)
        else:
            if self.grid_config.use_grid_master_for_dhcp:
                dhcp_service_members = dbi.get_service_members(
                    session,
                    member_id=self.mapping.authority_member.member_id,
                    service=const.SERVICE_TYPE_DHCP)
                if dhcp_service_members:
                    # authority is GM, a dhcp member needs to be selected.
                    dhcp_member = dbi.get_next_dhcp_member(session,
                                                           self.grid_id, True)
                    if not dhcp_member:
                        raise exc.InfobloxDHCPMemberNotReserved(
                            network_view=self.mapping.network_view,
                            cidr=self.subnet.get('cidr'))
                else:
                    dhcp_member = self.mapping.authority_member
            else:
                dhcp_member = dbi.get_next_dhcp_member(session,
                                                       self.grid_id, False)
                if not dhcp_member:
                    raise exc.InfobloxDHCPMemberNotReserved(
                        network_view=self.mapping.network_view,
                        cidr=self.subnet.get('cidr'))

        return dhcp_member
コード例 #3
0
    def test_get_next_dhcp_member(self):
        # prepare grid
        self._create_default_grid()

        # prepare grid members
        member_list = [{'member_id': 'm1',
                        'member_name': 'm1.com',
                        'member_ip': '10.10.1.1',
                        'member_ipv6': None,
                        'member_type': const.MEMBER_TYPE_GRID_MASTER,
                        'member_status': 'ON'},
                       {'member_id': 'm2',
                        'member_name': 'm2.com',
                        'member_ip': '10.10.1.2',
                        'member_ipv6': 'fd44:acb:5df6:1083::22',
                        'member_type': const.MEMBER_TYPE_CP_MEMBER,
                        'member_status': 'ON'},
                       {'member_id': 'm3',
                        'member_name': 'm3.com',
                        'member_ip': '10.10.1.3',
                        'member_ipv6': None,
                        'member_type': const.MEMBER_TYPE_CP_MEMBER,
                        'member_status': 'ON'},
                       {'member_id': 'm4',
                        'member_name': 'm4.com',
                        'member_ip': '10.10.1.4',
                        'member_ipv6': None,
                        'member_type': const.MEMBER_TYPE_REGULAR_MEMBER,
                        'member_status': 'ON'}]
        self._create_members(member_list, self.grid_id)

        db_members = infoblox_db.get_members(self.ctx.session,
                                             grid_id=self.grid_id)
        gm_member = utils.find_one_in_list('member_type', 'GM', db_members)
        m2_member = utils.find_one_in_list('member_id', 'm2', db_members)
        m3_member = utils.find_one_in_list('member_id', 'm3', db_members)
        m4_member = utils.find_one_in_list('member_id', 'm4', db_members)

        # create network views
        netview_dict = {'default': gm_member.member_id,
                        'testview': m2_member.member_id}
        self._create_network_views(netview_dict)

        db_network_views = infoblox_db.get_network_views(self.ctx.session)
        netview_default = utils.find_one_in_list('network_view',
                                                 'default',
                                                 db_network_views)
        netview_testview = utils.find_one_in_list('network_view',
                                                  'testview',
                                                  db_network_views)

        # add mapping members
        # - m1 (gm) is the authority member for 'default' view
        # - m2 is the authority member for 'testview' view as CPM
        infoblox_db.add_mapping_member(self.ctx.session,
                                       netview_default.id,
                                       gm_member.member_id,
                                       const.MAPPING_RELATION_GM_OWNED)
        infoblox_db.add_mapping_member(self.ctx.session,
                                       netview_testview.id,
                                       m2_member.member_id,
                                       const.MAPPING_RELATION_DELEGATED)

        # add service members
        # - m4 is a member that serves DHCP/DNS for a network under
        #   the non-delegated view, 'default'
        # - m2 is the delegated member to the network view, 'testview'
        infoblox_db.add_service_member(self.ctx.session,
                                       netview_default.id,
                                       m4_member.member_id,
                                       const.SERVICE_TYPE_DHCP)
        infoblox_db.add_service_member(self.ctx.session,
                                       netview_default.id,
                                       m4_member.member_id,
                                       const.SERVICE_TYPE_DNS)
        infoblox_db.add_service_member(self.ctx.session,
                                       netview_default.id,
                                       m2_member.member_id,
                                       const.SERVICE_TYPE_DHCP)
        infoblox_db.add_service_member(self.ctx.session,
                                       netview_default.id,
                                       m2_member.member_id,
                                       const.SERVICE_TYPE_DNS)

        dhcp_member = infoblox_db.get_next_dhcp_member(self.ctx.session,
                                                       self.grid_id)

        # only available dhcp member should be 'm3'
        self.assertEqual(m3_member.member_id, dhcp_member.member_id)
コード例 #4
0
    def test_get_next_dhcp_member(self):
        # prepare grid
        self._create_default_grid()

        # prepare grid members
        member_list = [{
            'member_id': 'm1',
            'member_name': 'm1.com',
            'member_ip': '10.10.1.1',
            'member_ipv6': None,
            'member_type': const.MEMBER_TYPE_GRID_MASTER,
            'member_status': 'ON'
        }, {
            'member_id': 'm2',
            'member_name': 'm2.com',
            'member_ip': '10.10.1.2',
            'member_ipv6': 'fd44:acb:5df6:1083::22',
            'member_type': const.MEMBER_TYPE_CP_MEMBER,
            'member_status': 'ON'
        }, {
            'member_id': 'm3',
            'member_name': 'm3.com',
            'member_ip': '10.10.1.3',
            'member_ipv6': None,
            'member_type': const.MEMBER_TYPE_CP_MEMBER,
            'member_status': 'ON'
        }, {
            'member_id': 'm4',
            'member_name': 'm4.com',
            'member_ip': '10.10.1.4',
            'member_ipv6': None,
            'member_type': const.MEMBER_TYPE_REGULAR_MEMBER,
            'member_status': 'ON'
        }]
        self._create_members(member_list, self.grid_id)

        db_members = infoblox_db.get_members(self.ctx.session,
                                             grid_id=self.grid_id)
        gm_member = utils.find_one_in_list('member_type', 'GM', db_members)
        m2_member = utils.find_one_in_list('member_id', 'm2', db_members)
        m3_member = utils.find_one_in_list('member_id', 'm3', db_members)
        m4_member = utils.find_one_in_list('member_id', 'm4', db_members)

        # create network views
        netview_dict = {
            'default': gm_member.member_id,
            'testview': m2_member.member_id
        }
        self._create_network_views(netview_dict)

        db_network_views = infoblox_db.get_network_views(self.ctx.session)
        netview_default = utils.find_one_in_list('network_view', 'default',
                                                 db_network_views)
        netview_testview = utils.find_one_in_list('network_view', 'testview',
                                                  db_network_views)

        # add mapping members
        # - m1 (gm) is the authority member for 'default' view
        # - m2 is the authority member for 'testview' view as CPM
        infoblox_db.add_mapping_member(self.ctx.session, netview_default.id,
                                       gm_member.member_id,
                                       const.MAPPING_RELATION_GM_OWNED)
        infoblox_db.add_mapping_member(self.ctx.session, netview_testview.id,
                                       m2_member.member_id,
                                       const.MAPPING_RELATION_DELEGATED)

        # add service members
        # - m4 is a member that serves DHCP/DNS for a network under
        #   the non-delegated view, 'default'
        # - m2 is the delegated member to the network view, 'testview'
        infoblox_db.add_service_member(self.ctx.session, netview_default.id,
                                       m4_member.member_id,
                                       const.SERVICE_TYPE_DHCP)
        infoblox_db.add_service_member(self.ctx.session, netview_default.id,
                                       m4_member.member_id,
                                       const.SERVICE_TYPE_DNS)
        infoblox_db.add_service_member(self.ctx.session, netview_default.id,
                                       m2_member.member_id,
                                       const.SERVICE_TYPE_DHCP)
        infoblox_db.add_service_member(self.ctx.session, netview_default.id,
                                       m2_member.member_id,
                                       const.SERVICE_TYPE_DNS)

        dhcp_member = infoblox_db.get_next_dhcp_member(self.ctx.session,
                                                       self.grid_id)

        # only available dhcp member should be 'm3'
        self.assertEqual(m3_member.member_id, dhcp_member.member_id)