Example #1
0
    def delete_subnet(self, ib_network=None):
        """Frees up resources taken by the subnet and removes the subnet.

        Resources to be released are
        - DHCP/DNS members are freed if not shared by other subnet(s).
        - Network view mapping is removed.
        - Authority member is not freed up for GM but taken care by the agent
          since it is hard to determine at the subnet scope.
        """
        session = self.ib_cxt.context.session
        subnet = self.ib_cxt.subnet
        network = self.ib_cxt.network
        network_view = self.ib_cxt.mapping.network_view

        network_id = network.get('id')
        subnet_id = subnet.get('id')
        cidr = subnet.get('cidr')

        # subnet id is already gone since community plugin already called
        # subnet delete in db level by the time ipam driver reaches here.
        dbi.dissociate_network_view(session, network_id, subnet_id)

        subnet_deletable = (not self.ib_cxt.network_is_shared_or_external or
                            self.grid_config.admin_network_deletion)
        if subnet_deletable:
            ib_ipv4_networks = ib_objects.NetworkV4.search_all(
                self.ib_cxt.connector, network_view=network_view)
            ib_ipv6_networks = ib_objects.NetworkV6.search_all(
                self.ib_cxt.connector, network_view=network_view)
            is_last_subnet_in_netview = (len(ib_ipv4_networks) +
                                         len(ib_ipv6_networks)) == 1

            self._release_service_members(is_last_subnet_in_netview)

            # delete ib network
            self.ib_cxt.ibom.delete_network(network_view, cidr)

            # if no more network exists, remove network view
            if is_last_subnet_in_netview:
                self._remove_network_view()

            self._restart_services()
        else:
            eam.reset_ea_for_network(ib_network)
            ib_network.update()

            ib_ranges = ib_objects.IPRange.search_all(
                self.ib_cxt.connector,
                network_view=network_view,
                network=cidr)
            for ib_range in ib_ranges:
                eam.reset_ea_for_range(ib_range)
                ib_range.update()
Example #2
0
    def delete_subnet(self, ib_network=None):
        """Frees up resources taken by the subnet and removes the subnet.

        Resources to be released are
        - DHCP/DNS members are freed if not shared by other subnet(s).
        - Network view mapping is removed.
        - Authority member is not freed up for GM but taken care by the agent
          since it is hard to determine at the subnet scope.
        """
        session = self.ib_cxt.context.session
        subnet = self.ib_cxt.subnet
        network = self.ib_cxt.network
        network_view = self.ib_cxt.mapping.network_view

        network_id = network.get('id')
        subnet_id = subnet.get('id')
        cidr = subnet.get('cidr')

        # subnet id is already gone since community plugin already called
        # subnet delete in db level by the time ipam driver reaches here.
        dbi.dissociate_network_view(session, network_id, subnet_id)

        subnet_deletable = (not self.ib_cxt.network_is_shared_or_external or
                            self.grid_config.admin_network_deletion)
        if subnet_deletable:
            ib_ipv4_networks = ib_objects.NetworkV4.search_all(
                self.ib_cxt.connector, network_view=network_view)
            ib_ipv6_networks = ib_objects.NetworkV6.search_all(
                self.ib_cxt.connector, network_view=network_view)
            is_last_subnet_in_netview = (len(ib_ipv4_networks) +
                                         len(ib_ipv6_networks)) == 1

            self._release_service_members(is_last_subnet_in_netview)

            # delete ib network
            self.ib_cxt.ibom.delete_network(network_view, cidr)

            # if no more network exists, remove network view
            if is_last_subnet_in_netview:
                self._remove_network_view()

            self._restart_services()
        else:
            eam.reset_ea_for_network(ib_network)
            ib_network.update()

            ib_ranges = ib_objects.IPRange.search_all(
                self.ib_cxt.connector,
                network_view=network_view,
                network=cidr)
            for ib_range in ib_ranges:
                eam.reset_ea_for_range(ib_range)
                ib_range.update()
    def test_network_view_mapping(self):
        # prepare grid
        self._create_default_grid()

        # prepare members
        self._create_simple_members()
        db_members = infoblox_db.get_members(self.ctx.session)
        gm_member = utils.find_one_in_list('member_type', 'GM', db_members)

        # prepare network
        network = models_v2.Network(name="Test Network", status="ON",
                                    admin_state_up=True)
        self.ctx.session.add(network)
        self.ctx.session.flush()

        # prepare network view
        netview_dict = {'hs-view-1': gm_member.member_id}
        self._create_network_views(netview_dict)

        db_network_views = infoblox_db.get_network_views(self.ctx.session)
        network_view_id = db_network_views[0].id

        # test associate network view
        network_id = network.id
        subnet_id = 'test-subnet-id'
        infoblox_db.associate_network_view(self.ctx.session, network_view_id,
                                           network_id, subnet_id)
        db_network_view_mappings = infoblox_db.get_network_view_mappings(
            self.ctx.session)
        self.assertEqual(network_id, db_network_view_mappings[0].network_id)
        self.assertEqual(subnet_id, db_network_view_mappings[0].subnet_id)

        db_network_views = infoblox_db.get_network_view_by_mapping(
            self.ctx.session,
            network_id=network_id,
            subnet_id=subnet_id)
        self.assertEqual(network_view_id, db_network_views[0].id)

        # test dissociate network view
        infoblox_db.dissociate_network_view(self.ctx.session, network_id,
                                            subnet_id)
        db_network_view_mappings = infoblox_db.get_network_view_mappings(
            self.ctx.session, network_id=network_id, subnet_id=subnet_id)
        self.assertEqual([], db_network_view_mappings)
    def test_network_view_mapping(self):
        # prepare grid
        self._create_default_grid()

        # prepare members
        self._create_simple_members()
        db_members = infoblox_db.get_members(self.ctx.session)
        gm_member = utils.find_one_in_list('member_type', 'GM', db_members)

        # prepare network
        network = models_v2.Network(name="Test Network", status="ON",
                                    admin_state_up=True)
        self.ctx.session.add(network)
        self.ctx.session.flush()

        # prepare network view
        netview_dict = {'hs-view-1': gm_member.member_id}
        self._create_network_views(netview_dict)

        db_network_views = infoblox_db.get_network_views(self.ctx.session)
        network_view_id = db_network_views[0].id

        # test associate network view
        network_id = network.id
        subnet_id = 'test-subnet-id'
        infoblox_db.associate_network_view(self.ctx.session, network_view_id,
                                           network_id, subnet_id)
        db_network_view_mappings = infoblox_db.get_network_view_mappings(
            self.ctx.session)
        self.assertEqual(network_id, db_network_view_mappings[0].network_id)
        self.assertEqual(subnet_id, db_network_view_mappings[0].subnet_id)

        db_network_views = infoblox_db.get_network_view_by_mapping(
            self.ctx.session,
            network_id=network_id,
            subnet_id=subnet_id)
        self.assertEqual(network_view_id, db_network_views[0].id)

        # test dissociate network view
        infoblox_db.dissociate_network_view(self.ctx.session, network_id,
                                            subnet_id)
        db_network_view_mappings = infoblox_db.get_network_view_mappings(
            self.ctx.session, network_id=network_id, subnet_id=subnet_id)
        self.assertEqual([], db_network_view_mappings)