def test_network_view_management(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) # should be no network views db_network_views = infoblox_db.get_network_views(self.ctx.session) self.assertEqual(0, len(db_network_views)) # test network view additions netview_dict = { 'default': gm_member.member_id, 'hs-view-1': gm_member.member_id, 'hs-view-2': gm_member.member_id, 'hs-view-3': gm_member.member_id } self._create_network_views(netview_dict) db_network_views = infoblox_db.get_network_views(self.ctx.session) actual_rows = utils.get_values_from_records('network_view', db_network_views) self.assertEqual(netview_dict.keys(), actual_rows) # test network view removals # - remove 'hs-view-1', 'hs-view-2' removing_list = [netview_dict['hs-view-1'], netview_dict['hs-view-2']] infoblox_db.remove_network_views_by_names(self.ctx.session, removing_list, self.grid_id) db_network_views = infoblox_db.get_network_views(self.ctx.session) actual_rows = utils.get_values_from_records('network_view', db_network_views) actual_set = set(actual_rows) expected_set = set(netview_dict.keys()).difference(removing_list) self.assertEqual(expected_set, actual_set) # - remove 'hs-view-3' removing_netview_name = 'hs-view-3' removing_netview = utils.find_one_in_list('network_view', removing_netview_name, db_network_views) removing_netview_id = removing_netview.id infoblox_db.remove_network_views(self.ctx.session, [removing_netview_id]) actual_network_views = infoblox_db.get_network_views( self.ctx.session, network_view=removing_netview_name) self.assertEqual([], actual_network_views)
def test_network_view_management(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) # should be no network views db_network_views = infoblox_db.get_network_views(self.ctx.session) self.assertEqual(0, len(db_network_views)) # test network view additions netview_dict = {'default': gm_member.member_id, 'hs-view-1': gm_member.member_id, 'hs-view-2': gm_member.member_id, 'hs-view-3': gm_member.member_id} self._create_network_views(netview_dict) db_network_views = infoblox_db.get_network_views(self.ctx.session) actual_rows = utils.get_values_from_records('network_view', db_network_views) self.assertEqual(netview_dict.keys(), actual_rows) # test network view removals # - remove 'hs-view-1', 'hs-view-2' removing_list = [netview_dict['hs-view-1'], netview_dict['hs-view-2']] infoblox_db.remove_network_views_by_names(self.ctx.session, removing_list, self.grid_id) db_network_views = infoblox_db.get_network_views(self.ctx.session) actual_rows = utils.get_values_from_records('network_view', db_network_views) actual_set = set(actual_rows) expected_set = set(netview_dict.keys()).difference(removing_list) self.assertEqual(expected_set, actual_set) # - remove 'hs-view-3' removing_netview_name = 'hs-view-3' removing_netview = utils.find_one_in_list('network_view', removing_netview_name, db_network_views) removing_netview_id = removing_netview.id infoblox_db.remove_network_views(self.ctx.session, [removing_netview_id]) actual_network_views = infoblox_db.get_network_views( self.ctx.session, network_view=removing_netview_name) self.assertEqual([], actual_network_views)
def _remove_network_view(self): session = self.ib_cxt.context.session network_view = self.ib_cxt.mapping.network_view if (self.grid_config.default_network_view_scope == const.NETWORK_VIEW_SCOPE_SINGLE and network_view == self.grid_config.default_network_view): return # remove ib network view self.ib_cxt.ibom.delete_network_view(network_view) # release authority member dbi.remove_mapping_member( session, self.ib_cxt.mapping.network_view, self.ib_cxt.mapping.authority_member.member_id) # remove network view dbi.remove_network_views(session, [self.ib_cxt.mapping.network_view_id])
def _remove_network_view(self): session = self.ib_cxt.context.session network_view = self.ib_cxt.mapping.network_view if (self.grid_config.default_network_view_scope == const.NETWORK_VIEW_SCOPE_SINGLE and network_view == self.grid_config.default_network_view): return # remove ib network view self.ib_cxt.ibom.delete_network_view(network_view) # release authority member dbi.remove_mapping_member( session, self.ib_cxt.mapping.network_view, self.ib_cxt.mapping.authority_member.member_id) # remove network view dbi.remove_network_views(session, [self.ib_cxt.mapping.network_view_id])
def _sync_network_views(self, discovered_netviews, dns_views): """Discover network views and sync with db. The discovered network view json contains the following data: - network view - cloud_info for delegated member if cloud platform is supported - mapping conditional EAs So discovered information will be updated in tables such as infoblox_network_views and infoblox_mapping_conditions. :param discovered_netviews: discovered network view json :return: None """ session = self._context.session self._load_persisted_mappings() discovered_delegations = dict() persisted_netview_ids = utils.get_values_from_records( 'id', self.db_network_views) discovered_netview_ids = [] for netview in discovered_netviews: netview_name = netview['name'] is_default = netview[const.IS_DEFAULT] netview_id = utils.get_network_view_id(self._grid_id, netview['_ref']) cloud_adapter_id_vals = utils.get_ea_value( const.EA_CLOUD_ADAPTER_ID, netview, True) if cloud_adapter_id_vals is None: participated = False else: cloud_adapter_ids = [ gid for gid in cloud_adapter_id_vals if int(gid) == self._grid_id ] participated = True if cloud_adapter_ids else False if not participated: continue shared_val = utils.get_ea_value(const.EA_IS_SHARED, netview) is_shared = types.Boolean()(shared_val) if shared_val else False # authority member is default to GM gm_row = utils.find_one_in_list('member_type', const.MEMBER_TYPE_GRID_MASTER, self.db_members) authority_member_id = gm_row.member_id # get delegation member if cloud platform is supported delegated_member = self._get_delegated_member(netview) if delegated_member: authority_member_id = delegated_member.member_id discovered_delegations[netview_name] = ( delegated_member.member_id) dns_view = (dns_views[netview_name] if dns_views.get(netview_name) else None) # see if the network view already exists in db netview_row = utils.find_one_in_list('id', netview_id, self.db_network_views) if netview_row: dbi.update_network_view(session, netview_id, netview_name, authority_member_id, is_shared, dns_view, participated, is_default) else: internal_netview = (const.DEFAULT_NETWORK_VIEW if is_default else netview_name) internal_dnsview = (const.DEFAULT_DNS_VIEW if is_default else dns_view) dbi.add_network_view(session, netview_id, netview_name, self._grid_id, authority_member_id, is_shared, dns_view, internal_netview, internal_dnsview, participated, is_default) discovered_netview_ids.append(netview_id) # update mapping conditions for the current network view self._update_mapping_conditions(netview, netview_id, participated) # we have added new network views. now let's remove persisted # network views not found from discovery persisted_set = set(persisted_netview_ids) removable_set = persisted_set.difference(discovered_netview_ids) removable_netviews = list(removable_set) if removable_netviews: dbi.remove_network_views(session, removable_netviews) session.flush() return discovered_delegations
def _sync_network_views(self, discovered_netviews, dns_views): """Discover network views and sync with db. The discovered network view json contains the following data: - network view - cloud_info for delegated member if cloud platform is supported - mapping conditional EAs So discovered information will be updated in tables such as infoblox_network_views and infoblox_mapping_conditions. :param discovered_netviews: discovered network view json :return: None """ session = self._context.session self._load_persisted_mappings() discovered_delegations = dict() persisted_netview_ids = utils.get_values_from_records( 'id', self.db_network_views) discovered_netview_ids = [] for netview in discovered_netviews: netview_name = netview['name'] is_default = netview[const.IS_DEFAULT] netview_id = utils.get_network_view_id(self._grid_id, netview['_ref']) cloud_adapter_id_vals = utils.get_ea_value( const.EA_CLOUD_ADAPTER_ID, netview, True) if cloud_adapter_id_vals is None: participated = False else: cloud_adapter_ids = [gid for gid in cloud_adapter_id_vals if int(gid) == self._grid_id] participated = True if cloud_adapter_ids else False if not participated: continue shared_val = utils.get_ea_value(const.EA_IS_SHARED, netview) is_shared = types.Boolean()(shared_val) if shared_val else False # authority member is default to GM gm_row = utils.find_one_in_list('member_type', const.MEMBER_TYPE_GRID_MASTER, self.db_members) authority_member_id = gm_row.member_id # get delegation member if cloud platform is supported delegated_member = self._get_delegated_member(netview) if delegated_member: authority_member_id = delegated_member.member_id discovered_delegations[netview_name] = ( delegated_member.member_id) dns_view = (dns_views[netview_name] if dns_views.get(netview_name) else None) # see if the network view already exists in db netview_row = utils.find_one_in_list('id', netview_id, self.db_network_views) if netview_row: dbi.update_network_view(session, netview_id, netview_name, authority_member_id, is_shared, dns_view, participated, is_default) else: internal_netview = (const.DEFAULT_NETWORK_VIEW if is_default else netview_name) internal_dnsview = (const.DEFAULT_DNS_VIEW if is_default else dns_view) dbi.add_network_view(session, netview_id, netview_name, self._grid_id, authority_member_id, is_shared, dns_view, internal_netview, internal_dnsview, participated, is_default) discovered_netview_ids.append(netview_id) # update mapping conditions for the current network view self._update_mapping_conditions(netview, netview_id, participated) # we have added new network views. now let's remove persisted # network views not found from discovery persisted_set = set(persisted_netview_ids) removable_set = persisted_set.difference(discovered_netview_ids) removable_netviews = list(removable_set) if removable_netviews: dbi.remove_network_views(session, removable_netviews) session.flush() return discovered_delegations