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:
Brian Haley 2018-04-25 15:44:51 -04:00 committed by Brian Haley
parent c4bfd0e0f2
commit 3ad91f61f2
6 changed files with 7 additions and 141 deletions

View File

@ -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

View File

@ -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."""

View File

@ -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')

View File

@ -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()])

View File

@ -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``.

View File

@ -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