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 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)