Merge "ovn: support max_tunid option from NB_Global"
This commit is contained in:
commit
164f12349f
|
@ -412,7 +412,15 @@ class OVNMechanismDriver(api.MechanismDriver):
|
||||||
const.TYPE_VXLAN,
|
const.TYPE_VXLAN,
|
||||||
const.TYPE_VLAN])
|
const.TYPE_VLAN])
|
||||||
|
|
||||||
|
def _get_max_tunid(self):
|
||||||
|
try:
|
||||||
|
return int(self._nb_ovn.nb_global.options.get('max_tunid'))
|
||||||
|
except (ValueError, TypeError):
|
||||||
|
# max_tunid may be absent in older OVN versions, return None
|
||||||
|
pass
|
||||||
|
|
||||||
def _validate_network_segments(self, network_segments):
|
def _validate_network_segments(self, network_segments):
|
||||||
|
max_tunid = self._get_max_tunid()
|
||||||
for network_segment in network_segments:
|
for network_segment in network_segments:
|
||||||
network_type = network_segment['network_type']
|
network_type = network_segment['network_type']
|
||||||
segmentation_id = network_segment['segmentation_id']
|
segmentation_id = network_segment['segmentation_id']
|
||||||
|
@ -427,6 +435,12 @@ class OVNMechanismDriver(api.MechanismDriver):
|
||||||
if not self._is_network_type_supported(network_type):
|
if not self._is_network_type_supported(network_type):
|
||||||
msg = _('Network type %s is not supported') % network_type
|
msg = _('Network type %s is not supported') % network_type
|
||||||
raise n_exc.InvalidInput(error_message=msg)
|
raise n_exc.InvalidInput(error_message=msg)
|
||||||
|
if segmentation_id and max_tunid and segmentation_id > max_tunid:
|
||||||
|
m = (
|
||||||
|
_('Segmentation ID should be lower or equal to %d') %
|
||||||
|
max_tunid
|
||||||
|
)
|
||||||
|
raise n_exc.InvalidInput(error_message=m)
|
||||||
|
|
||||||
def create_segment_provnet_port(self, resource, event, trigger,
|
def create_segment_provnet_port(self, resource, event, trigger,
|
||||||
context, segment, payload=None):
|
context, segment, payload=None):
|
||||||
|
|
|
@ -130,6 +130,7 @@ class FakeOvsdbNbOvnIdl(object):
|
||||||
self.pg_del_ports = mock.Mock()
|
self.pg_del_ports = mock.Mock()
|
||||||
self.lsp_get_up = mock.Mock()
|
self.lsp_get_up = mock.Mock()
|
||||||
self.nb_global = mock.Mock()
|
self.nb_global = mock.Mock()
|
||||||
|
self.nb_global.options.get.return_value = '100000'
|
||||||
self.db_list_rows = mock.Mock()
|
self.db_list_rows = mock.Mock()
|
||||||
self.lsp_list = mock.MagicMock()
|
self.lsp_list = mock.MagicMock()
|
||||||
self.db_find = mock.Mock()
|
self.db_find = mock.Mock()
|
||||||
|
|
|
@ -155,6 +155,38 @@ class TestOVNMechanismDriver(test_plugin.Ml2PluginV2TestCase):
|
||||||
self.mech_driver._create_neutron_pg_drop)
|
self.mech_driver._create_neutron_pg_drop)
|
||||||
self.assertEqual(2, m_ovsdb_api.get_port_group.call_count)
|
self.assertEqual(2, m_ovsdb_api.get_port_group.call_count)
|
||||||
|
|
||||||
|
def test__get_max_tunid_no_key_set(self):
|
||||||
|
self.mech_driver._nb_ovn.nb_global.options.get.return_value = None
|
||||||
|
self.assertIsNone(self.mech_driver._get_max_tunid())
|
||||||
|
|
||||||
|
def test__get_max_tunid_wrong_key_value(self):
|
||||||
|
self.mech_driver._nb_ovn.nb_global.options.get.return_value = '11wrong'
|
||||||
|
self.assertIsNone(self.mech_driver._get_max_tunid())
|
||||||
|
|
||||||
|
def test__get_max_tunid_key_set(self):
|
||||||
|
self.mech_driver._nb_ovn.nb_global.options.get.return_value = '100'
|
||||||
|
self.assertEqual(100, self.mech_driver._get_max_tunid())
|
||||||
|
|
||||||
|
def _test__validate_network_segments_id_succeed(self, val):
|
||||||
|
segment = {
|
||||||
|
"network_type": const.TYPE_VXLAN,
|
||||||
|
"segmentation_id": val,
|
||||||
|
"physical_network": "physnet1",
|
||||||
|
}
|
||||||
|
self.mech_driver._nb_ovn.nb_global.options.get.return_value = '200'
|
||||||
|
self.mech_driver._validate_network_segments([segment])
|
||||||
|
|
||||||
|
def test__validate_network_segments_id_below_max_limit(self):
|
||||||
|
self._test__validate_network_segments_id_succeed(100)
|
||||||
|
|
||||||
|
def test__validate_network_segments_id_eq_max_limit(self):
|
||||||
|
self._test__validate_network_segments_id_succeed(200)
|
||||||
|
|
||||||
|
def test__validate_network_segments_id_above_max_limit(self):
|
||||||
|
self.assertRaises(
|
||||||
|
n_exc.InvalidInput,
|
||||||
|
self._test__validate_network_segments_id_succeed, 300)
|
||||||
|
|
||||||
@mock.patch.object(ovn_revision_numbers_db, 'bump_revision')
|
@mock.patch.object(ovn_revision_numbers_db, 'bump_revision')
|
||||||
def test__create_security_group(self, mock_bump):
|
def test__create_security_group(self, mock_bump):
|
||||||
self.mech_driver._create_security_group(
|
self.mech_driver._create_security_group(
|
||||||
|
|
Loading…
Reference in New Issue