Example #1
0
 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
Example #2
0
 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
Example #3
0
    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()
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
    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
Example #8
0
 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']
Example #9
0
    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
Example #10
0
    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)
Example #11
0
    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)
Example #12
0
    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
Example #13
0
    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
Example #14
0
    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
Example #15
0
 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
Example #16
0
 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
Example #17
0
 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
    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