d35c8e627a
Fixes bug 1045142. This patch adds 'local' as a new value for provider:network_type, supported by the openvswitch and linuxbridge plugins. Networks of this type provide connectivity through a bridge for VMs and agents local to the host, but no external connectivity. They do not require provider:physical_network or provider:segmentation_id values. These local networks are intended mainly to support single-box zero-configuration testing (including quantum gating), but may have other uses as well. For openvswitch, the new OVS.tenant_network_type configuration variable selects what type of networks are allocated as tenant (i.e. non-provider) networks. It defaults to 'local', but must be changed to 'vlan' or 'gre' for openvswitch tenant networks to have external connectivity. The default value is intended to support single-box zero-configuration testing without any need to allocate physical network resources or configure bridges, and without requiring the operating system to support OVS GRE tunneling. It can also be set to 'none' to completely disable creation of tenant networks. For linuxbridge, the new VLANS.tenant_network_type configuration variable works similarly, with a value of 'vlan' supporting tenant networks with external connectivity. With either plugin, administrators can create provider local networks by specifying "--provider:network_type local". Additionally, with openvswitch, provider GRE networks can now be created by specifying "--provider:network_type gre --provider:segmentation_id <tunnel-id>". A corresponding devstack patch is available at https://review.openstack.org/#/c/12456/. With this patch, the openvswitch and linuxbridge plugins are by default configured to support only local networks. A set of shell variables, documented in stack.sh, can be set in localrc to configure remote connectivity, including bridges/interfaces available for provider networks. Change-Id: I2812548326141d2212d04f34d5448fb974d298e0
60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
# Copyright (c) 2012 OpenStack, LLC.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
# implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
import sqlalchemy as sa
|
|
|
|
from quantum.db import model_base
|
|
|
|
|
|
class NetworkState(model_base.BASEV2):
|
|
"""Represents state of vlan_id on physical network"""
|
|
__tablename__ = 'network_states'
|
|
|
|
physical_network = sa.Column(sa.String(64), nullable=False,
|
|
primary_key=True)
|
|
vlan_id = sa.Column(sa.Integer, nullable=False, primary_key=True,
|
|
autoincrement=False)
|
|
allocated = sa.Column(sa.Boolean, nullable=False)
|
|
|
|
def __init__(self, physical_network, vlan_id):
|
|
self.physical_network = physical_network
|
|
self.vlan_id = vlan_id
|
|
self.allocated = False
|
|
|
|
def __repr__(self):
|
|
return "<NetworkState(%s,%d,%s)>" % (self.physical_network,
|
|
self.vlan_id, self.allocated)
|
|
|
|
|
|
class NetworkBinding(model_base.BASEV2):
|
|
"""Represents binding of virtual network to physical_network and vlan_id"""
|
|
__tablename__ = 'network_bindings'
|
|
|
|
network_id = sa.Column(sa.String(36),
|
|
sa.ForeignKey('networks.id', ondelete="CASCADE"),
|
|
primary_key=True)
|
|
physical_network = sa.Column(sa.String(64))
|
|
vlan_id = sa.Column(sa.Integer, nullable=False)
|
|
|
|
def __init__(self, network_id, physical_network, vlan_id):
|
|
self.network_id = network_id
|
|
self.physical_network = physical_network
|
|
self.vlan_id = vlan_id
|
|
|
|
def __repr__(self):
|
|
return "<NetworkBinding(%s,%s,%d)>" % (self.network_id,
|
|
self.physical_network,
|
|
self.vlan_id)
|