def update_port_sync(self, port): if not port or not port.get('fixed_ips'): return session = self.ib_cxt.context.session for fip in port['fixed_ips']: subnet_id = fip['subnet_id'] ip_address = fip['ip_address'] netview_mappings = dbi.get_network_view_mappings( session, network_id=port['network_id'], subnet_id=subnet_id) if netview_mappings: netview_row = utils.find_one_in_list( 'id', netview_mappings[0].network_view_id, self.ib_cxt.discovered_network_views) network_view = netview_row.network_view port_tenant_name = self.ib_cxt.get_tenant_name( port['tenant_id']) ea_ip_address = eam.get_ea_for_ip(self.ib_cxt.user_id, port['tenant_id'], port_tenant_name, network_view, port['id'], port['device_id'], port['device_owner']) self.ib_cxt.ibom.update_fixed_address_eas( network_view, ip_address, ea_ip_address)
def update_port_sync(self, port): if not port or not port.get('fixed_ips'): return session = self.ib_cxt.context.session for fip in port['fixed_ips']: subnet_id = fip['subnet_id'] ip_address = fip['ip_address'] netview_mappings = dbi.get_network_view_mappings( session, network_id=port['network_id'], subnet_id=subnet_id) if netview_mappings: netview_row = utils.find_one_in_list( 'id', netview_mappings[0].network_view_id, self.ib_cxt.discovered_network_views) network_view = netview_row.network_view port_tenant_name = self.ib_cxt.get_tenant_name( port['tenant_id']) ea_ip_address = eam.get_ea_for_ip(self.ib_cxt.user_id, port['tenant_id'], port_tenant_name, network_view, port['id'], port['device_id'], port['device_owner']) self.ib_cxt.ibom.update_fixed_address_eas(network_view, ip_address, ea_ip_address)
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)
def update_network_sync(self, need_new_zones=False): """Updates EAs for each subnet that belongs to the updated network.""" session = self.ib_cxt.context.session network = self.ib_cxt.network network_id = network.get('id') subnets = dbi.get_subnets_by_network_id(session, network_id) for subnet in subnets: network_view = None cidr = subnet.get('cidr') subnet_id = subnet.get('id') netview_mappings = dbi.get_network_view_mappings( session, network_id=network_id, subnet_id=subnet_id) if netview_mappings: netview_row = utils.find_one_in_list( 'id', netview_mappings[0].network_view_id, self.ib_cxt.discovered_network_views) network_view = netview_row.network_view ib_network = None if network_view: ib_network = self.ib_cxt.ibom.get_network(network_view, cidr) ea_network = eam.get_ea_for_network(self.ib_cxt.user_id, self.ib_cxt.tenant_id, self.ib_cxt.tenant_name, network, subnet) self.ib_cxt.ibom.update_network_options(ib_network, ea_network) if need_new_zones: # Need context with ib_network to create zones ib_cxt = context.InfobloxContext(self.ib_cxt.context, self.ib_cxt.user_id, network, subnet, self.grid_config, self.ib_cxt.plugin, ib_network=ib_network) dns_controller = dns.DnsController(ib_cxt) rollback_list = [] dns_controller.create_dns_zones(rollback_list) else: self.ib_cxt.subnet = subnet dns_controller = dns.DnsController(self.ib_cxt) dns_controller.update_dns_zones()
def update_network_sync(self, need_new_zones=False): """Updates EAs for each subnet that belongs to the updated network.""" session = self.ib_cxt.context.session network = self.ib_cxt.network network_id = network.get('id') subnets = dbi.get_subnets_by_network_id(session, network_id) for subnet in subnets: network_view = None cidr = subnet.get('cidr') subnet_id = subnet.get('id') netview_mappings = dbi.get_network_view_mappings( session, network_id=network_id, subnet_id=subnet_id) if netview_mappings: netview_row = utils.find_one_in_list( 'id', netview_mappings[0].network_view_id, self.ib_cxt.discovered_network_views) network_view = netview_row.network_view ib_network = None if network_view: ib_network = self.ib_cxt.ibom.get_network(network_view, cidr) ea_network = eam.get_ea_for_network(self.ib_cxt.user_id, self.ib_cxt.tenant_id, self.ib_cxt.tenant_name, network, subnet) self.ib_cxt.ibom.update_network_options(ib_network, ea_network) if need_new_zones: # Need context with ib_network to create zones ib_cxt = context.InfobloxContext( self.ib_cxt.context, self.ib_cxt.user_id, network, subnet, self.grid_config, self.ib_cxt.plugin, ib_network=ib_network) dns_controller = dns.DnsController(ib_cxt) rollback_list = [] dns_controller.create_dns_zones(rollback_list) else: self.ib_cxt.subnet = subnet dns_controller = dns.DnsController(self.ib_cxt) dns_controller.update_dns_zones()
def _find_mapping(self): session = self.context.session netview_id = None netview_name = None netview_shared = False # First check if mapping already exists network_id = self.subnet.get('network_id') subnet_id = self.subnet.get('id') netview_mappings = dbi.get_network_view_mappings(session, network_id=network_id, subnet_id=subnet_id) if netview_mappings: netview_id = netview_mappings[0].network_view_id netview_row = utils.find_one_in_list('id', netview_id, self.discovered_network_views) self.mapping.network_view_id = netview_id self.mapping.network_view = netview_row.network_view self.mapping.authority_member = self._get_authority_member( netview_row.authority_member_id) self.mapping.shared = netview_row.shared self.mapping.dns_view = self._get_dns_view() self._update_service_member_mapping() LOG.info( _LI("Network view %(netview)s mapping found for " "network %(network)s and subnet %(subnet)s"), dict(netview=netview_row.network_view, network=network_id, subnet=subnet_id)) return # No mapping so find mapping mapping_attrs = self._get_mapping_attributes() matching_netviews = [] # find mapping matches on common cases mapping_filters = self._get_mapping_filters(mapping_attrs) for mf in mapping_filters: if list(mf.values())[0] is None: continue matches = utils.find_in_list_by_condition( mf, self.discovered_mapping_conditions) if matches: netview_ids = [m.network_view_id for m in matches] matching_netviews += netview_ids # find network view id and name pair if matching_netviews: # get most matched network view id netview_id = Counter(matching_netviews).most_common(1)[0][0] netview_row = utils.find_one_in_list('id', netview_id, self.discovered_network_views) netview_name = netview_row.network_view netview_shared = netview_row.shared else: # no matching found; use default network view scope netview_scope = self.grid_config.default_network_view_scope netview_name = self._get_network_view_by_scope( netview_scope, mapping_attrs) netview_row = utils.find_one_in_list('network_view', netview_name, self.discovered_network_views) if netview_row: netview_id = netview_row.id netview_shared = netview_row.shared self.mapping.network_view_id = netview_id self.mapping.network_view = netview_name if self.mapping.network_view_id: self.mapping.authority_member = self._get_authority_member() self.mapping.shared = netview_shared self.mapping.dns_view = self._get_dns_view()
def _find_mapping(self): session = self.context.session netview_id = None netview_name = None netview_shared = False # First check if mapping already exists network_id = self.subnet.get('network_id') subnet_id = self.subnet.get('id') netview_mappings = dbi.get_network_view_mappings( session, network_id=network_id, subnet_id=subnet_id) if netview_mappings: netview_id = netview_mappings[0].network_view_id netview_row = utils.find_one_in_list( 'id', netview_id, self.discovered_network_views) self.mapping.network_view_id = netview_id self.mapping.network_view = netview_row.network_view self.mapping.authority_member = self._get_authority_member( netview_row.authority_member_id) self.mapping.shared = netview_row.shared self.mapping.dns_view = self._get_dns_view() self._update_service_member_mapping() LOG.info(_LI("Network view %(netview)s mapping found for " "network %(network)s and subnet %(subnet)s"), dict(netview=netview_row.network_view, network=network_id, subnet=subnet_id)) return # No mapping so find mapping mapping_attrs = self._get_mapping_attributes() matching_netviews = [] # find mapping matches on common cases mapping_filters = self._get_mapping_filters(mapping_attrs) for mf in mapping_filters: if mf.values()[0] is None: continue matches = utils.find_in_list_by_condition( mf, self.discovered_mapping_conditions) if matches: netview_ids = [m.network_view_id for m in matches] matching_netviews += netview_ids # find network view id and name pair if matching_netviews: # get most matched network view id netview_id = Counter(matching_netviews).most_common(1)[0][0] netview_row = utils.find_one_in_list('id', netview_id, self.discovered_network_views) netview_name = netview_row.network_view netview_shared = netview_row.shared else: # no matching found; use default network view scope netview_scope = self.grid_config.default_network_view_scope netview_name = self._get_network_view_by_scope(netview_scope, mapping_attrs) netview_row = utils.find_one_in_list('network_view', netview_name, self.discovered_network_views) if netview_row: netview_id = netview_row.id netview_shared = netview_row.shared self.mapping.network_view_id = netview_id self.mapping.network_view = netview_name if self.mapping.network_view_id: self.mapping.authority_member = self._get_authority_member() self.mapping.shared = netview_shared self.mapping.dns_view = self._get_dns_view()