예제 #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()
예제 #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_reset_ea_for_network(self):
        network_ea = {'CMP Type': {'value': 'OpenStack'},
                      'Cloud API Owned': {'value': 'True'},
                      'Tenant ID': {'value': 'test-id'},
                      'Tenant Name': {'value': 'tenant-name'},
                      'Account': {'value': 'admin'},
                      'Is External': {'value': 'False'},
                      'Is Shared': {'value': 'True'},
                      'Network ID': {'value': 'True'},
                      'Network Name': {'value': 'True'},
                      'Subnet ID': {'value': 'True'},
                      'Subnet Name': {'value': 'True'},
                      'Network Encap': {'value': 'gre'},
                      'Segmentation ID': {'value': 'segmentation-id'},
                      'Physical Network Name': {'value': 'physical-network'}}
        ib_network_ea = ib_objects.EA.from_dict(network_ea)
        ib_network_mock = mock.Mock(extattrs=ib_network_ea)

        ea_manager.reset_ea_for_network(ib_network_mock)

        expected_ea = {'Cloud API Owned': {'value': 'N/A'},
                       'CMP Type': {'value': 'N/A'},
                       'Tenant ID': {'value': 'N/A'}}
        ib_network_mock.extattrs.ea_dict == expected_ea
    def test_reset_ea_for_network(self):
        network_ea = {
            'CMP Type': {
                'value': 'OpenStack'
            },
            'Cloud API Owned': {
                'value': 'True'
            },
            'Tenant ID': {
                'value': 'test-id'
            },
            'Tenant Name': {
                'value': 'tenant-name'
            },
            'Account': {
                'value': 'admin'
            },
            'Is External': {
                'value': 'False'
            },
            'Is Shared': {
                'value': 'True'
            },
            'Network ID': {
                'value': 'True'
            },
            'Network Name': {
                'value': 'True'
            },
            'Subnet ID': {
                'value': 'True'
            },
            'Subnet Name': {
                'value': 'True'
            },
            'Network Encap': {
                'value': 'gre'
            },
            'Segmentation ID': {
                'value': 'segmentation-id'
            },
            'Physical Network Name': {
                'value': 'physical-network'
            }
        }
        ib_network_ea = ib_objects.EA.from_dict(network_ea)
        ib_network_mock = mock.Mock(extattrs=ib_network_ea)

        ea_manager.reset_ea_for_network(ib_network_mock)

        expected_ea = {
            'Cloud API Owned': {
                'value': 'N/A'
            },
            'CMP Type': {
                'value': 'N/A'
            },
            'Tenant ID': {
                'value': 'N/A'
            }
        }
        ib_network_mock.extattrs.ea_dict == expected_ea