def _create_ib_network_view(self): session = self.ib_cxt.context.session ea_network_view = eam.get_ea_for_network_view(self.ib_cxt.tenant_id, self.ib_cxt.tenant_name, self.grid_id) ib_network_view, obj_created = ( ib_objects.NetworkView.create_check_exists( self.ib_cxt.connector, name=self.ib_cxt.mapping.network_view, extattrs=ea_network_view)) network_view_id = utils.get_network_view_id(self.grid_id, ib_network_view._ref) dbi.update_network_view_id(session, self.ib_cxt.mapping.network_view_id, network_view_id) self.ib_cxt.mapping.network_view_id = network_view_id LOG.info(_LI("Created a network view: %s"), ib_network_view) return ib_network_view, obj_created
def _create_ib_network_view(self): session = self.ib_cxt.context.session ea_network_view = eam.get_ea_for_network_view( self.ib_cxt.tenant_id, self.ib_cxt.tenant_name, self.grid_id) ib_network_view = self.ib_cxt.ibom.create_network_view( self.ib_cxt.mapping.network_view, ea_network_view) network_view_id = utils.get_network_view_id(self.grid_id, ib_network_view._ref) dbi.update_network_view_id(session, self.ib_cxt.mapping.network_view_id, network_view_id) self.ib_cxt.mapping.network_view_id = network_view_id LOG.info(_LI("Created a network view: %s"), ib_network_view) return ib_network_view
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