diff --git a/neutron/agent/linux/interface.py b/neutron/agent/linux/interface.py index 50e8ee96467..74e1ea558aa 100644 --- a/neutron/agent/linux/interface.py +++ b/neutron/agent/linux/interface.py @@ -244,8 +244,12 @@ class LinuxInterfaceDriver(object): bridge=None, namespace=None, prefix=None, mtu=None): if not ip_lib.device_exists(device_name, namespace=namespace): - self.plug_new(network_id, port_id, device_name, mac_address, - bridge, namespace, prefix, mtu) + try: + self.plug_new(network_id, port_id, device_name, mac_address, + bridge, namespace, prefix, mtu) + except TypeError: + self.plug_new(network_id, port_id, device_name, mac_address, + bridge, namespace, prefix) else: LOG.info(_LI("Device %s already exists"), device_name) diff --git a/neutron/tests/unit/agent/linux/test_interface.py b/neutron/tests/unit/agent/linux/test_interface.py index ce008cfe2d0..d4418799eb3 100644 --- a/neutron/tests/unit/agent/linux/test_interface.py +++ b/neutron/tests/unit/agent/linux/test_interface.py @@ -55,6 +55,23 @@ class FakePort(object): network_id = network.id +class FakeInterfaceDriverNoMtu(interface.LinuxInterfaceDriver): + # NOTE(ihrachys) this method intentially omit mtu= parameter, since that + # was the method signature before Mitaka. We should make sure the old + # signature still works. + + def __init__(self, *args, **kwargs): + super(FakeInterfaceDriverNoMtu, self).__init__(*args, **kwargs) + self.plug_called = False + + def plug_new(self, network_id, port_id, device_name, mac_address, + bridge=None, namespace=None, prefix=None): + self.plug_called = True + + def unplug(self, device_name, bridge=None, namespace=None, prefix=None): + pass + + class TestBase(base.BaseTestCase): def setUp(self): super(TestBase, self).setUp() @@ -68,6 +85,16 @@ class TestBase(base.BaseTestCase): self.device_exists = self.device_exists_p.start() +class TestABCDriverNoMtu(TestBase): + + def test_plug_with_no_mtu_works(self): + driver = FakeInterfaceDriverNoMtu(self.conf) + self.device_exists.return_value = False + driver.plug( + mock.Mock(), mock.Mock(), mock.Mock(), mock.Mock(), mtu=9000) + self.assertTrue(driver.plug_called) + + class TestABCDriver(TestBase): def setUp(self): super(TestABCDriver, self).setUp()