Make '*' the default ml2 flat_networks configuration

Update the ml2 flat_networks configuration to set '*' as the
default because that has been effectively the default behavior due
to a bug with the empty list.

Also, fix the empty list configuration for disabling flat networks.

DocImpact
UpgradeImpact

Change-Id: I13eb22afd7c0d011154b58a1bd218fd4fa82a8d9
Closes-bug: #1437745
Co-Authored-By: Martin Hickey <martin.hickey@ie.ibm.com>
This commit is contained in:
Martin Hickey 2015-11-04 21:37:21 +00:00
parent 00f5fedab0
commit cb712c5a9e
3 changed files with 39 additions and 15 deletions

View File

@ -61,12 +61,12 @@
[ml2_type_flat] [ml2_type_flat]
# (ListOpt) List of physical_network names with which flat networks # (ListOpt) List of physical_network names with which flat networks
# can be created. Use * to allow flat networks with arbitrary # can be created. Use default '*' to allow flat networks with arbitrary
# physical_network names. # physical_network names. Use an empty list to disable flat networks.
# #
# flat_networks = # flat_networks = *
# Example:flat_networks = physnet1,physnet2 # Example:flat_networks = physnet1,physnet2
# Example:flat_networks = * # Example:flat_networks =
[ml2_type_vlan] [ml2_type_vlan]
# (ListOpt) List of <physical_network>[:<vlan_min>:<vlan_max>] tuples # (ListOpt) List of <physical_network>[:<vlan_min>:<vlan_max>] tuples

View File

@ -30,10 +30,11 @@ LOG = log.getLogger(__name__)
flat_opts = [ flat_opts = [
cfg.ListOpt('flat_networks', cfg.ListOpt('flat_networks',
default=[], default='*',
help=_("List of physical_network names with which flat " help=_("List of physical_network names with which flat "
"networks can be created. Use * to allow flat " "networks can be created. Use default '*' to allow "
"networks with arbitrary physical_network names.")) "flat networks with arbitrary physical_network names. "
"Use an empty list to disable flat networks."))
] ]
cfg.CONF.register_opts(flat_opts, "ml2_type_flat") cfg.CONF.register_opts(flat_opts, "ml2_type_flat")
@ -72,9 +73,8 @@ class FlatTypeDriver(helpers.BaseTypeDriver):
if '*' in self.flat_networks: if '*' in self.flat_networks:
LOG.info(_LI("Arbitrary flat physical_network names allowed")) LOG.info(_LI("Arbitrary flat physical_network names allowed"))
self.flat_networks = None self.flat_networks = None
elif not all(self.flat_networks): elif not self.flat_networks:
msg = _("physical network name is empty") LOG.info(_LI("Flat networks are disabled"))
raise exc.InvalidInput(error_message=msg)
else: else:
LOG.info(_LI("Allowable flat physical_network names: %s"), LOG.info(_LI("Allowable flat physical_network names: %s"),
self.flat_networks) self.flat_networks)
@ -93,6 +93,9 @@ class FlatTypeDriver(helpers.BaseTypeDriver):
if not physical_network: if not physical_network:
msg = _("physical_network required for flat provider network") msg = _("physical_network required for flat provider network")
raise exc.InvalidInput(error_message=msg) raise exc.InvalidInput(error_message=msg)
if self.flat_networks is not None and not self.flat_networks:
msg = _("Flat provider networks are disabled")
raise exc.InvalidInput(error_message=msg)
if self.flat_networks and physical_network not in self.flat_networks: if self.flat_networks and physical_network not in self.flat_networks:
msg = (_("physical_network '%s' unknown for flat provider network") msg = (_("physical_network '%s' unknown for flat provider network")
% physical_network) % physical_network)

View File

@ -19,6 +19,7 @@ from neutron.plugins.common import constants as p_const
from neutron.plugins.ml2 import config from neutron.plugins.ml2 import config
from neutron.plugins.ml2 import driver_api as api from neutron.plugins.ml2 import driver_api as api
from neutron.plugins.ml2.drivers import type_flat from neutron.plugins.ml2.drivers import type_flat
from neutron.tests import base
from neutron.tests.unit import testlib_api from neutron.tests.unit import testlib_api
@ -50,14 +51,21 @@ class FlatTypeTest(testlib_api.SqlTestCase):
self.driver.validate_provider_segment(segment) self.driver.validate_provider_segment(segment)
def test_validate_provider_phynet_name(self): def test_validate_provider_phynet_name(self):
self.driver._parse_networks([])
segment = {api.NETWORK_TYPE: p_const.TYPE_FLAT,
api.PHYSICAL_NETWORK: 'flat_net1'}
self.assertRaises(exc.InvalidInput, self.assertRaises(exc.InvalidInput,
self.driver._parse_networks, self.driver.validate_provider_segment,
entries=['']) segment=segment)
def test_validate_provider_phynet_name_multiple(self): def test_validate_provider_phynet_name_multiple(self):
self.assertRaises(exc.InvalidInput, self.driver._parse_networks(['flat_net1', 'flat_net2'])
self.driver._parse_networks, segment = {api.NETWORK_TYPE: p_const.TYPE_FLAT,
entries=['flat_net1', '']) api.PHYSICAL_NETWORK: 'flat_net1'}
self.driver.validate_provider_segment(segment)
segment = {api.NETWORK_TYPE: p_const.TYPE_FLAT,
api.PHYSICAL_NETWORK: 'flat_net2'}
self.driver.validate_provider_segment(segment)
def test_validate_provider_segment_without_physnet_restriction(self): def test_validate_provider_segment_without_physnet_restriction(self):
self.driver._parse_networks('*') self.driver._parse_networks('*')
@ -133,3 +141,16 @@ class FlatTypeTest(testlib_api.SqlTestCase):
config.cfg.CONF.set_override('path_mtu', 0, group='ml2') config.cfg.CONF.set_override('path_mtu', 0, group='ml2')
self.driver.physnet_mtus = {} self.driver.physnet_mtus = {}
self.assertEqual(0, self.driver.get_mtu('physnet1')) self.assertEqual(0, self.driver.get_mtu('physnet1'))
class FlatTypeDefaultTest(base.BaseTestCase):
def setUp(self):
super(FlatTypeDefaultTest, self).setUp()
self.driver = type_flat.FlatTypeDriver()
self.driver.physnet_mtus = []
def test_validate_provider_segment_default(self):
segment = {api.NETWORK_TYPE: p_const.TYPE_FLAT,
api.PHYSICAL_NETWORK: 'other_flat_net'}
self.driver.validate_provider_segment(segment)