Remove deprecated IVS interface driver
This was marked deprecated in Queens for removal in Rocky, https://review.openstack.org/#/c/505401/ Change-Id: I77fa59ae1819e87ab8ccc1fa5f0db86de3b90e2e
This commit is contained in:
parent
c4bfd0e0f2
commit
3ad91f61f2
@ -17,7 +17,6 @@ kill_dnsmasq: KillFilter, root, /sbin/dnsmasq, -9, -HUP, -15
|
|||||||
kill_dnsmasq_usr: KillFilter, root, /usr/sbin/dnsmasq, -9, -HUP, -15
|
kill_dnsmasq_usr: KillFilter, root, /usr/sbin/dnsmasq, -9, -HUP, -15
|
||||||
|
|
||||||
ovs-vsctl: CommandFilter, ovs-vsctl, root
|
ovs-vsctl: CommandFilter, ovs-vsctl, root
|
||||||
ivs-ctl: CommandFilter, ivs-ctl, root
|
|
||||||
mm-ctl: CommandFilter, mm-ctl, root
|
mm-ctl: CommandFilter, mm-ctl, root
|
||||||
dhcp_release: CommandFilter, dhcp_release, root
|
dhcp_release: CommandFilter, dhcp_release, root
|
||||||
dhcp_release6: CommandFilter, dhcp_release6, root
|
dhcp_release6: CommandFilter, dhcp_release6, root
|
||||||
|
@ -19,12 +19,10 @@ import time
|
|||||||
import netaddr
|
import netaddr
|
||||||
from neutron_lib import constants
|
from neutron_lib import constants
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
from oslo_log import versionutils
|
|
||||||
import six
|
import six
|
||||||
|
|
||||||
from neutron.agent.common import ovs_lib
|
from neutron.agent.common import ovs_lib
|
||||||
from neutron.agent.linux import ip_lib
|
from neutron.agent.linux import ip_lib
|
||||||
from neutron.agent.linux import utils
|
|
||||||
from neutron.common import constants as n_const
|
from neutron.common import constants as n_const
|
||||||
from neutron.common import exceptions
|
from neutron.common import exceptions
|
||||||
|
|
||||||
@ -410,68 +408,6 @@ class OVSInterfaceDriver(LinuxInterfaceDriver):
|
|||||||
ns_dev.link.set_mtu(mtu)
|
ns_dev.link.set_mtu(mtu)
|
||||||
|
|
||||||
|
|
||||||
class IVSInterfaceDriver(LinuxInterfaceDriver):
|
|
||||||
"""Driver for creating an internal interface on an IVS bridge."""
|
|
||||||
|
|
||||||
DEV_NAME_PREFIX = constants.TAP_DEVICE_PREFIX
|
|
||||||
|
|
||||||
def __init__(self, conf):
|
|
||||||
super(IVSInterfaceDriver, self).__init__(conf)
|
|
||||||
versionutils.report_deprecated_feature(
|
|
||||||
LOG, "IVS interface driver is deprecated in Queens and will be "
|
|
||||||
"removed in Rocky.")
|
|
||||||
self.DEV_NAME_PREFIX = 'ns-'
|
|
||||||
|
|
||||||
def _get_tap_name(self, dev_name, prefix=None):
|
|
||||||
dev_name = dev_name.replace(prefix or self.DEV_NAME_PREFIX,
|
|
||||||
constants.TAP_DEVICE_PREFIX)
|
|
||||||
return dev_name
|
|
||||||
|
|
||||||
def _ivs_add_port(self, device_name, port_id, mac_address):
|
|
||||||
cmd = ['ivs-ctl', 'add-port', device_name]
|
|
||||||
utils.execute(cmd, run_as_root=True)
|
|
||||||
|
|
||||||
def plug_new(self, network_id, port_id, device_name, mac_address,
|
|
||||||
bridge=None, namespace=None, prefix=None, mtu=None):
|
|
||||||
"""Plug in the interface."""
|
|
||||||
ip = ip_lib.IPWrapper()
|
|
||||||
tap_name = self._get_tap_name(device_name, prefix)
|
|
||||||
|
|
||||||
root_dev, ns_dev = ip.add_veth(tap_name, device_name)
|
|
||||||
root_dev.disable_ipv6()
|
|
||||||
|
|
||||||
self._ivs_add_port(tap_name, port_id, mac_address)
|
|
||||||
|
|
||||||
ns_dev = ip.device(device_name)
|
|
||||||
ns_dev.link.set_address(mac_address)
|
|
||||||
|
|
||||||
if mtu:
|
|
||||||
ns_dev.link.set_mtu(mtu)
|
|
||||||
root_dev.link.set_mtu(mtu)
|
|
||||||
else:
|
|
||||||
LOG.warning("No MTU configured for port %s", port_id)
|
|
||||||
|
|
||||||
if namespace:
|
|
||||||
namespace_obj = ip.ensure_namespace(namespace)
|
|
||||||
namespace_obj.add_device_to_namespace(ns_dev)
|
|
||||||
|
|
||||||
ns_dev.link.set_up()
|
|
||||||
root_dev.link.set_up()
|
|
||||||
|
|
||||||
def unplug(self, device_name, bridge=None, namespace=None, prefix=None):
|
|
||||||
"""Unplug the interface."""
|
|
||||||
tap_name = self._get_tap_name(device_name, prefix)
|
|
||||||
try:
|
|
||||||
cmd = ['ivs-ctl', 'del-port', tap_name]
|
|
||||||
utils.execute(cmd, run_as_root=True)
|
|
||||||
device = ip_lib.IPDevice(device_name, namespace=namespace)
|
|
||||||
device.link.delete()
|
|
||||||
LOG.debug("Unplugged interface '%s'", device_name)
|
|
||||||
except RuntimeError:
|
|
||||||
LOG.error("Failed unplugging interface '%s'",
|
|
||||||
device_name)
|
|
||||||
|
|
||||||
|
|
||||||
class BridgeInterfaceDriver(LinuxInterfaceDriver):
|
class BridgeInterfaceDriver(LinuxInterfaceDriver):
|
||||||
"""Driver for creating bridge interfaces."""
|
"""Driver for creating bridge interfaces."""
|
||||||
|
|
||||||
|
@ -59,12 +59,6 @@ class TestLoadInterfaceDriver(base.BaseTestCase):
|
|||||||
self.assertIsInstance(utils.load_interface_driver(self.conf),
|
self.assertIsInstance(utils.load_interface_driver(self.conf),
|
||||||
interface.NullDriver)
|
interface.NullDriver)
|
||||||
|
|
||||||
def test_load_ivs_interface_driver_success(self):
|
|
||||||
self.conf.set_override('interface_driver',
|
|
||||||
'ivs')
|
|
||||||
self.assertIsInstance(utils.load_interface_driver(self.conf),
|
|
||||||
interface.IVSInterfaceDriver)
|
|
||||||
|
|
||||||
def test_load_linuxbridge_interface_driver_success(self):
|
def test_load_linuxbridge_interface_driver_success(self):
|
||||||
self.conf.set_override('interface_driver',
|
self.conf.set_override('interface_driver',
|
||||||
'linuxbridge')
|
'linuxbridge')
|
||||||
|
@ -19,7 +19,6 @@ from neutron_lib import constants
|
|||||||
from neutron.agent.common import ovs_lib
|
from neutron.agent.common import ovs_lib
|
||||||
from neutron.agent.linux import interface
|
from neutron.agent.linux import interface
|
||||||
from neutron.agent.linux import ip_lib
|
from neutron.agent.linux import ip_lib
|
||||||
from neutron.agent.linux import utils
|
|
||||||
from neutron.conf.agent import common as config
|
from neutron.conf.agent import common as config
|
||||||
from neutron.tests import base
|
from neutron.tests import base
|
||||||
|
|
||||||
@ -620,71 +619,3 @@ class TestBridgeInterfaceDriver(TestBase):
|
|||||||
|
|
||||||
self.ip_dev.assert_has_calls([mock.call('tap0', namespace=None),
|
self.ip_dev.assert_has_calls([mock.call('tap0', namespace=None),
|
||||||
mock.call().link.delete()])
|
mock.call().link.delete()])
|
||||||
|
|
||||||
|
|
||||||
class TestIVSInterfaceDriver(TestBase):
|
|
||||||
|
|
||||||
def test_get_device_name(self):
|
|
||||||
br = interface.IVSInterfaceDriver(self.conf)
|
|
||||||
device_name = br.get_device_name(FakePort())
|
|
||||||
self.assertEqual('ns-abcdef01-12', device_name)
|
|
||||||
|
|
||||||
def test_plug_with_prefix(self):
|
|
||||||
self._test_plug(devname='qr-0', prefix='qr-')
|
|
||||||
|
|
||||||
def _test_plug(self, devname=None, namespace=None, prefix=None):
|
|
||||||
|
|
||||||
if not devname:
|
|
||||||
devname = 'ns-0'
|
|
||||||
|
|
||||||
def device_exists(dev, namespace=None):
|
|
||||||
return dev == 'indigo'
|
|
||||||
|
|
||||||
ivs = interface.IVSInterfaceDriver(self.conf)
|
|
||||||
self.device_exists.side_effect = device_exists
|
|
||||||
|
|
||||||
root_dev = mock.Mock()
|
|
||||||
_ns_dev = mock.Mock()
|
|
||||||
ns_dev = mock.Mock()
|
|
||||||
self.ip().add_veth = mock.Mock(return_value=(root_dev, _ns_dev))
|
|
||||||
self.ip().device = mock.Mock(return_value=(ns_dev))
|
|
||||||
expected = [mock.call(), mock.call().add_veth('tap0', devname),
|
|
||||||
mock.call().device(devname)]
|
|
||||||
|
|
||||||
ivsctl_cmd = ['ivs-ctl', 'add-port', 'tap0']
|
|
||||||
|
|
||||||
with mock.patch.object(utils, 'execute') as execute:
|
|
||||||
ivs.plug('01234567-1234-1234-99',
|
|
||||||
'port-1234',
|
|
||||||
devname,
|
|
||||||
'aa:bb:cc:dd:ee:ff',
|
|
||||||
namespace=namespace,
|
|
||||||
prefix=prefix,
|
|
||||||
mtu=9000)
|
|
||||||
execute.assert_called_once_with(ivsctl_cmd, run_as_root=True)
|
|
||||||
|
|
||||||
ns_dev.assert_has_calls(
|
|
||||||
[mock.call.link.set_address('aa:bb:cc:dd:ee:ff')])
|
|
||||||
ns_dev.assert_has_calls([mock.call.link.set_mtu(9000)])
|
|
||||||
root_dev.assert_has_calls([mock.call.link.set_mtu(9000)])
|
|
||||||
if namespace:
|
|
||||||
expected.extend(
|
|
||||||
[mock.call().ensure_namespace(namespace),
|
|
||||||
mock.call().ensure_namespace().add_device_to_namespace(
|
|
||||||
mock.ANY)])
|
|
||||||
|
|
||||||
self.ip.assert_has_calls(expected)
|
|
||||||
root_dev.assert_has_calls([mock.call.link.set_up()])
|
|
||||||
ns_dev.assert_has_calls([mock.call.link.set_up()])
|
|
||||||
|
|
||||||
def test_plug_namespace(self):
|
|
||||||
self._test_plug(namespace='mynamespace')
|
|
||||||
|
|
||||||
def test_unplug(self):
|
|
||||||
ivs = interface.IVSInterfaceDriver(self.conf)
|
|
||||||
ivsctl_cmd = ['ivs-ctl', 'del-port', 'tap0']
|
|
||||||
with mock.patch.object(utils, 'execute') as execute:
|
|
||||||
ivs.unplug('ns-0')
|
|
||||||
execute.assert_called_once_with(ivsctl_cmd, run_as_root=True)
|
|
||||||
self.ip_dev.assert_has_calls([mock.call('ns-0', namespace=None),
|
|
||||||
mock.call().link.delete()])
|
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
other:
|
||||||
|
- The deprecated ``IVSInterfaceDriver`` class has been removed from
|
||||||
|
the code base. This means neither the ``ivs`` nor the
|
||||||
|
``neutron.agent.linux.interface.IVSInterfaceDriver`` can any longer
|
||||||
|
be used as a value for the ``interface_driver`` config option in
|
||||||
|
``neutron.conf``.
|
@ -140,7 +140,6 @@ oslo.config.opts.defaults =
|
|||||||
neutron.db.alembic_migrations =
|
neutron.db.alembic_migrations =
|
||||||
neutron = neutron.db.migration:alembic_migrations
|
neutron = neutron.db.migration:alembic_migrations
|
||||||
neutron.interface_drivers =
|
neutron.interface_drivers =
|
||||||
ivs = neutron.agent.linux.interface:IVSInterfaceDriver
|
|
||||||
linuxbridge = neutron.agent.linux.interface:BridgeInterfaceDriver
|
linuxbridge = neutron.agent.linux.interface:BridgeInterfaceDriver
|
||||||
null = neutron.agent.linux.interface:NullDriver
|
null = neutron.agent.linux.interface:NullDriver
|
||||||
openvswitch = neutron.agent.linux.interface:OVSInterfaceDriver
|
openvswitch = neutron.agent.linux.interface:OVSInterfaceDriver
|
||||||
|
Loading…
Reference in New Issue
Block a user