Merge "[OVN] Fix gateway_mtu option should not always be set" into stable/victoria
This commit is contained in:
commit
670fe9728a
|
@ -1368,8 +1368,9 @@ class OVNClient(object):
|
||||||
|
|
||||||
def _gen_router_port_options(self, port, network=None):
|
def _gen_router_port_options(self, port, network=None):
|
||||||
options = {}
|
options = {}
|
||||||
|
admin_context = n_context.get_admin_context()
|
||||||
if network is None:
|
if network is None:
|
||||||
network = self._plugin.get_network(n_context.get_admin_context(),
|
network = self._plugin.get_network(admin_context,
|
||||||
port['network_id'])
|
port['network_id'])
|
||||||
# For VLAN type networks we need to set the
|
# For VLAN type networks we need to set the
|
||||||
# "reside-on-redirect-chassis" option so the routing for this
|
# "reside-on-redirect-chassis" option so the routing for this
|
||||||
|
@ -1383,9 +1384,15 @@ class OVNClient(object):
|
||||||
is_gw_port = const.DEVICE_OWNER_ROUTER_GW == port.get(
|
is_gw_port = const.DEVICE_OWNER_ROUTER_GW == port.get(
|
||||||
'device_owner')
|
'device_owner')
|
||||||
if is_gw_port and ovn_conf.is_ovn_emit_need_to_frag_enabled():
|
if is_gw_port and ovn_conf.is_ovn_emit_need_to_frag_enabled():
|
||||||
options[ovn_const.OVN_ROUTER_PORT_GW_MTU_OPTION] = str(
|
network_ids = set([port['network_id'] for port in
|
||||||
network['mtu'])
|
self._get_router_ports(admin_context,
|
||||||
|
port['device_id'])])
|
||||||
|
for net in self._plugin.get_networks(admin_context,
|
||||||
|
filters={'id': network_ids}):
|
||||||
|
if net['mtu'] > network['mtu']:
|
||||||
|
options[ovn_const.OVN_ROUTER_PORT_GW_MTU_OPTION] = str(
|
||||||
|
network['mtu'])
|
||||||
|
break
|
||||||
return options
|
return options
|
||||||
|
|
||||||
def _create_lrouter_port(self, context, router, port, txn=None):
|
def _create_lrouter_port(self, context, router, port, txn=None):
|
||||||
|
@ -1457,6 +1464,11 @@ class OVNClient(object):
|
||||||
if subnet['ip_version'] == 4:
|
if subnet['ip_version'] == 4:
|
||||||
cidr = subnet['cidr']
|
cidr = subnet['cidr']
|
||||||
|
|
||||||
|
if ovn_conf.is_ovn_emit_need_to_frag_enabled():
|
||||||
|
provider_net = self._plugin.get_network(context,
|
||||||
|
router[l3.EXTERNAL_GW_INFO]['network_id'])
|
||||||
|
self.set_gateway_mtu(context, provider_net)
|
||||||
|
|
||||||
if utils.is_snat_enabled(router) and cidr:
|
if utils.is_snat_enabled(router) and cidr:
|
||||||
self.update_nat_rules(router, networks=[cidr],
|
self.update_nat_rules(router, networks=[cidr],
|
||||||
enable_snat=True, txn=txn)
|
enable_snat=True, txn=txn)
|
||||||
|
@ -1557,6 +1569,12 @@ class OVNClient(object):
|
||||||
elif port:
|
elif port:
|
||||||
subnet_ids = utils.get_port_subnet_ids(port)
|
subnet_ids = utils.get_port_subnet_ids(port)
|
||||||
|
|
||||||
|
if (ovn_conf.is_ovn_emit_need_to_frag_enabled() and
|
||||||
|
router.get('gw_port_id')):
|
||||||
|
provider_net = self._plugin.get_network(context,
|
||||||
|
router[l3.EXTERNAL_GW_INFO]['network_id'])
|
||||||
|
self.set_gateway_mtu(context, provider_net, txn=txn)
|
||||||
|
|
||||||
cidr = None
|
cidr = None
|
||||||
for sid in subnet_ids:
|
for sid in subnet_ids:
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -1842,7 +1842,9 @@ class TestOVNMechanismDriver(test_plugin.Ml2PluginV2TestCase):
|
||||||
def test__update_dnat_entry_if_needed_down(self):
|
def test__update_dnat_entry_if_needed_down(self):
|
||||||
self._test__update_dnat_entry_if_needed(up=False)
|
self._test__update_dnat_entry_if_needed(up=False)
|
||||||
|
|
||||||
def _test_update_network_fragmentation(self, new_mtu, expected_opts):
|
@mock.patch('neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.'
|
||||||
|
'ovn_client.OVNClient._get_router_ports')
|
||||||
|
def _test_update_network_fragmentation(self, new_mtu, expected_opts, grps):
|
||||||
network_attrs = {external_net.EXTERNAL: True}
|
network_attrs = {external_net.EXTERNAL: True}
|
||||||
network = self._make_network(
|
network = self._make_network(
|
||||||
self.fmt, 'net1', True, arg_list=(external_net.EXTERNAL,),
|
self.fmt, 'net1', True, arg_list=(external_net.EXTERNAL,),
|
||||||
|
@ -1851,6 +1853,10 @@ class TestOVNMechanismDriver(test_plugin.Ml2PluginV2TestCase):
|
||||||
with self.subnet(network=network) as subnet:
|
with self.subnet(network=network) as subnet:
|
||||||
with self.port(subnet=subnet,
|
with self.port(subnet=subnet,
|
||||||
device_owner=const.DEVICE_OWNER_ROUTER_GW) as port:
|
device_owner=const.DEVICE_OWNER_ROUTER_GW) as port:
|
||||||
|
|
||||||
|
grps.return_value = [{'port_id': port['port']['id'],
|
||||||
|
'network_id':network['network']['id']}]
|
||||||
|
|
||||||
# Let's update the MTU to something different
|
# Let's update the MTU to something different
|
||||||
network['network']['mtu'] = new_mtu
|
network['network']['mtu'] = new_mtu
|
||||||
fake_ctx = mock.MagicMock(current=network['network'])
|
fake_ctx = mock.MagicMock(current=network['network'])
|
||||||
|
|
|
@ -1483,20 +1483,28 @@ class TestOVNL3RouterPlugin(test_mech_driver.Ml2PluginV2TestCase):
|
||||||
self.nb_idl().get_unhosted_gateways.assert_called_once_with(
|
self.nb_idl().get_unhosted_gateways.assert_called_once_with(
|
||||||
{'foo-1': 'physnet1'}, mock.ANY, mock.ANY)
|
{'foo-1': 'physnet1'}, mock.ANY, mock.ANY)
|
||||||
|
|
||||||
@mock.patch('neutron.db.db_base_plugin_v2.NeutronDbPluginV2.get_network')
|
@mock.patch('neutron.plugins.ml2.plugin.Ml2Plugin.get_network')
|
||||||
|
@mock.patch('neutron.plugins.ml2.plugin.Ml2Plugin.get_networks')
|
||||||
@mock.patch('neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.'
|
@mock.patch('neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.'
|
||||||
'ovn_client.OVNClient._get_router_ports')
|
'ovn_client.OVNClient._get_router_ports')
|
||||||
@mock.patch('neutron.db.l3_db.L3_NAT_dbonly_mixin.add_router_interface')
|
@mock.patch('neutron.db.l3_db.L3_NAT_dbonly_mixin.add_router_interface')
|
||||||
def test_add_router_interface_need_to_frag_enabled(self, ari, grps, gn):
|
def test_add_router_interface_need_to_frag_enabled(
|
||||||
|
self, ari, grps, gns, gn):
|
||||||
config.cfg.CONF.set_override(
|
config.cfg.CONF.set_override(
|
||||||
'ovn_emit_need_to_frag', True, group='ovn')
|
'ovn_emit_need_to_frag', True, group='ovn')
|
||||||
router_id = 'router-id'
|
router_id = 'router-id'
|
||||||
interface_info = {'port_id': 'router-port-id'}
|
interface_info = {'port_id': 'router-port-id',
|
||||||
|
'network_id': 'priv-net'}
|
||||||
ari.return_value = self.fake_router_interface_info
|
ari.return_value = self.fake_router_interface_info
|
||||||
|
grps.return_value = [interface_info]
|
||||||
self.get_router.return_value = self.fake_router_with_ext_gw
|
self.get_router.return_value = self.fake_router_with_ext_gw
|
||||||
gn.return_value = self.fake_network
|
network_attrs = {'id': 'prov-net', 'mtu': 1200}
|
||||||
|
prov_net = fake_resources.FakeNetwork.create_one_network(
|
||||||
|
attrs=network_attrs).info()
|
||||||
self.fake_router_port['device_owner'] = (
|
self.fake_router_port['device_owner'] = (
|
||||||
constants.DEVICE_OWNER_ROUTER_GW)
|
constants.DEVICE_OWNER_ROUTER_GW)
|
||||||
|
gn.return_value = prov_net
|
||||||
|
gns.return_value = [self.fake_network]
|
||||||
|
|
||||||
self.l3_inst.add_router_interface(self.context, router_id,
|
self.l3_inst.add_router_interface(self.context, router_id,
|
||||||
interface_info)
|
interface_info)
|
||||||
|
@ -1506,7 +1514,7 @@ class TestOVNL3RouterPlugin(test_mech_driver.Ml2PluginV2TestCase):
|
||||||
fake_router_port_assert['gateway_chassis'] = mock.ANY
|
fake_router_port_assert['gateway_chassis'] = mock.ANY
|
||||||
fake_router_port_assert['options'] = {
|
fake_router_port_assert['options'] = {
|
||||||
ovn_const.OVN_ROUTER_PORT_GW_MTU_OPTION:
|
ovn_const.OVN_ROUTER_PORT_GW_MTU_OPTION:
|
||||||
str(self.fake_network['mtu'])}
|
str(prov_net['mtu'])}
|
||||||
|
|
||||||
self.l3_inst._ovn.add_lrouter_port.assert_called_once_with(
|
self.l3_inst._ovn.add_lrouter_port.assert_called_once_with(
|
||||||
**fake_router_port_assert)
|
**fake_router_port_assert)
|
||||||
|
|
Loading…
Reference in New Issue