def __init__(self, plugin, plugin_context, network, original_network=None, segments=None): super(NetworkContext, self).__init__(plugin, plugin_context) self._network = network self._original_network = original_network self._segments = segments_db.get_network_segments( plugin_context, network['id']) if segments is None else segments
def check_for_localnet_legacy_port_name(self): if not self.has_lock: return admin_context = n_context.get_admin_context() cmds = [] for ls in self._nb_idl.ls_list().execute(check_error=True): network_id = ls.name.replace('neutron-', '') legacy_name = utils.ovn_provnet_port_name(network_id) legacy_port = None segment_id = None for lsp in ls.ports: if legacy_name == lsp.name: legacy_port = lsp break else: continue for segment in segments_db.get_network_segments( admin_context, network_id): if (segment.get(segment_def.PHYSICAL_NETWORK) == legacy_port.options['network_name']): segment_id = segment['id'] break if not segment_id: continue new_p_name = utils.ovn_provnet_port_name(segment_id) cmds.append( self._nb_idl.db_set('Logical_Switch_Port', legacy_port.uuid, ('name', new_p_name))) if cmds: with self._nb_idl.transaction(check_error=True) as txn: for cmd in cmds: txn.add(cmd) raise periodics.NeverAgain()
def release_network_segments(self, context, network_id): segments = segments_db.get_network_segments(context.session, network_id, filter_dynamic=None) for segment in segments: self.release_network_segment(context, segment)
def release_network_segments(self, session, network_id): segments = segments_db.get_network_segments(session, network_id, filter_dynamic=None) for segment in segments: self.release_network_segment(session, segment)
def release_network_segments(self, context, network_id): segments = segments_db.get_network_segments(context, network_id, filter_dynamic=None) for segment in segments: self.release_network_segment(context, segment)
def get_network_segments(self, network_id, dynamic=False, context=None): context = context if context is not None else self.admin_ctx segments = segments_db.get_network_segments(context, network_id, filter_dynamic=dynamic) if dynamic: for segment in segments: segment['is_dynamic'] = True return segments
def get_shared_network_owner_id(self, network_id): filters = {'id': [network_id]} nets = self.get_networks(self.admin_ctx, filters=filters) or [] segments = segments_db.get_network_segments(self.admin_ctx, network_id) if not nets or not segments: return if (nets[0]['shared'] and segments[0][driver_api.NETWORK_TYPE] == n_const.TYPE_VLAN): return nets[0]['tenant_id']
def _create_segments(self, segments, is_seg_dynamic=False, network_id="foo-network-id"): self._setup_neutron_network(network_id) for segment in segments: segments_db.add_network_segment(self.ctx.session, network_id, segment, is_dynamic=is_seg_dynamic) net_segments = segments_db.get_network_segments(self.ctx.session, network_id, filter_dynamic=is_seg_dynamic) for segment_index, segment in enumerate(segments): self.assertEqual(segment, net_segments[segment_index]) return net_segments
def release_network_segments(self, session, network_id): segments = segments_db.get_network_segments(session, network_id, filter_dynamic=None) for segment in segments: network_type = segment.get(api.NETWORK_TYPE) driver = self.drivers.get(network_type) if driver: driver.obj.release_segment(session, segment) else: LOG.error(_LE("Failed to release segment '%s' because " "network type is not supported."), segment)
def _create_segments(self, segments, is_seg_dynamic=False, network_id='foo-network-id'): self._setup_neutron_network(network_id) for segment in segments: segments_db.add_network_segment( self.ctx.session, network_id, segment, is_dynamic=is_seg_dynamic) net_segments = segments_db.get_network_segments( self.ctx.session, network_id, filter_dynamic=is_seg_dynamic) for segment_index, segment in enumerate(segments): self.assertEqual(segment, net_segments[segment_index]) return net_segments
def _create_segments(self, segments, is_seg_dynamic=False, network_id=uuidutils.generate_uuid()): self._setup_neutron_network(network_id) for segment in segments: segments_db.add_network_segment( self.ctx, network_id, segment, is_dynamic=is_seg_dynamic) net_segments = segments_db.get_network_segments( self.ctx, network_id, filter_dynamic=is_seg_dynamic) net_segments = self._sort_segments(net_segments) for segment_index, segment in enumerate(segments): self.assertEqual(segment, net_segments[segment_index]) return net_segments
def _create_segments(self, segments, is_seg_dynamic=False, network_id=uuidutils.generate_uuid()): self._setup_neutron_network(network_id) for segment in segments: segments_db.add_network_segment( self.ctx, network_id, segment, is_dynamic=is_seg_dynamic) segment['network_id'] = network_id net_segments = segments_db.get_network_segments( self.ctx, network_id, filter_dynamic=is_seg_dynamic) net_segments = self._sort_segments(net_segments) for segment_index, segment in enumerate(segments): self.assertEqual(segment, net_segments[segment_index]) return net_segments
def external_dns_not_needed(self, context, network): dns_driver = _get_dns_driver() if not dns_driver: return True if network['router:external']: return True segments = segments_db.get_network_segments(context, network['id']) if len(segments) > 1: return False provider_net = segments[0] if provider_net['network_type'] == 'local': return True if provider_net['network_type'] == 'flat': return False if provider_net['network_type'] == 'vlan': return self._is_vlan_tenant_network(provider_net) if provider_net['network_type'] in ['gre', 'vxlan', 'geneve']: return self._is_tunnel_tenant_network(provider_net) return True
def external_dns_not_needed(self, context, network): dns_driver = _get_dns_driver() if not dns_driver: return True if network["router:external"]: return True segments = segments_db.get_network_segments(context.session, network["id"]) if len(segments) > 1: return False provider_net = segments[0] if provider_net["network_type"] == "local": return True if provider_net["network_type"] == "flat": return False if provider_net["network_type"] == "vlan": return self._is_vlan_tenant_network(provider_net) if provider_net["network_type"] in ["gre", "vxlan", "geneve"]: return self._is_tunnel_tenant_network(provider_net) return True
def get_network_segment(self, context, agent_configuration, network): data = None network_segment_physical_network = \ agent_configuration.get('network_segment_physical_network', None) supported_encapsulations = [ x.lower() for x in self.supported_encapsulations + agent_configuration.get('tunnel_types', []) ] # look up segment details in the ml2_network_segments table segments = segments_db.get_network_segments(context, network['id'], filter_dynamic=None) for segment in segments: LOG.debug("F5 disconnected service check segment: %s" % segment) if ((network_segment_physical_network == segment['physical_network']) and (segment['network_type'].lower() in supported_encapsulations)): data = segment break elif (network['provider:network_type'] == 'opflex' and segment['network_type'] == 'vlan'): data = segment LOG.debug("Got OPFLEX segment: %s" % segment) break if not data: LOG.debug('Using default segment for network %s' % (network['id'])) # neutron is expected to provide this data immediately data = { 'segmentation_id': network['provider:segmentation_id'] } if 'provider:network_type' in network: data['network_type'] = network['provider:network_type'] if 'provider:physical_network' in network: data['physical_network'] = network['provider:physical_network'] return data