From 1b872996d08b01a1b8a1e82d13d6d7b06bc3aa01 Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Wed, 12 Jul 2017 17:10:38 +0100 Subject: [PATCH] Remove plug_ovs_hybrid, unplug_ovs_hybrid These are 'ovs'-type VIFs, which are handled by os-vif and are therefore never used here. These appear to have been missed in commit '745f5fbb', even though the tests for these were removed then. Remove them now, along with some helper methods and globals that are no longer used elsewhere. Change-Id: I6b02fd044cb23b7e8080d03ce1366a21000d7b8e --- nova/network/linux_net.py | 37 ---------- nova/network/model.py | 2 - nova/tests/unit/network/test_linux_net.py | 89 ----------------------- nova/virt/libvirt/vif.py | 76 +++++-------------- 4 files changed, 17 insertions(+), 187 deletions(-) diff --git a/nova/network/linux_net.py b/nova/network/linux_net.py index ae914be033..50c1dcdceb 100644 --- a/nova/network/linux_net.py +++ b/nova/network/linux_net.py @@ -37,7 +37,6 @@ import six import nova.conf from nova import exception from nova.i18n import _ -from nova.network import model as network_model from nova import objects from nova.pci import utils as pci_utils from nova import utils @@ -1263,42 +1262,6 @@ def _ovs_vsctl(args): raise exception.OvsConfigurationFailure(inner_exception=e) -def _create_ovs_vif_cmd(bridge, dev, iface_id, mac, - instance_id, interface_type=None): - cmd = ['--', '--if-exists', 'del-port', dev, '--', - 'add-port', bridge, dev, - '--', 'set', 'Interface', dev, - 'external-ids:iface-id=%s' % iface_id, - 'external-ids:iface-status=active', - 'external-ids:attached-mac=%s' % mac, - 'external-ids:vm-uuid=%s' % instance_id] - if interface_type: - cmd += ['type=%s' % interface_type] - return cmd - - -def create_ovs_vif_port(bridge, dev, iface_id, mac, instance_id, - mtu=None, interface_type=None): - _ovs_vsctl(_create_ovs_vif_cmd(bridge, dev, iface_id, - mac, instance_id, - interface_type)) - # Note at present there is no support for setting the - # mtu for vhost-user type ports. - if interface_type != network_model.OVS_VHOSTUSER_INTERFACE_TYPE: - _set_device_mtu(dev, mtu) - else: - LOG.debug("MTU not set on %(interface_name)s interface " - "of type %(interface_type)s.", - {'interface_name': dev, - 'interface_type': interface_type}) - - -def delete_ovs_vif_port(bridge, dev, delete_dev=True): - _ovs_vsctl(['--', '--if-exists', 'del-port', bridge, dev]) - if delete_dev: - delete_net_dev(dev) - - def create_ivs_vif_port(dev, iface_id, mac, instance_id): utils.execute('ivs-ctl', 'add-port', dev, run_as_root=True) diff --git a/nova/network/model.py b/nova/network/model.py index 763e56d68d..ecbc2e512c 100644 --- a/nova/network/model.py +++ b/nova/network/model.py @@ -84,8 +84,6 @@ VIF_DETAILS_VHOSTUSER_FP_PLUG = 'vhostuser_fp_plug' # create a vrouter netdevice interface # TODO(mhenkel): Consider renaming this to be contrail-specific. VIF_DETAILS_VHOSTUSER_VROUTER_PLUG = 'vhostuser_vrouter_plug' -# ovs vhost user interface type name -OVS_VHOSTUSER_INTERFACE_TYPE = 'dpdkvhostuser' # Constants for dictionary keys in the 'vif_details' field that are # valid for VIF_TYPE_TAP. diff --git a/nova/tests/unit/network/test_linux_net.py b/nova/tests/unit/network/test_linux_net.py index 221882723b..992603330c 100644 --- a/nova/tests/unit/network/test_linux_net.py +++ b/nova/tests/unit/network/test_linux_net.py @@ -32,7 +32,6 @@ from nova import db from nova import exception from nova.network import driver from nova.network import linux_net -from nova.network import model as network_model from nova import objects from nova import test from nova.tests import uuidsentinel as uuids @@ -40,8 +39,6 @@ from nova import utils CONF = nova.conf.CONF -HOST = "testhost" - instances = {uuids.instance_1: {'id': 0, 'uuid': uuids.instance_1, @@ -123,31 +120,6 @@ networks = [{'id': 0, 'vpn_public_address': '192.168.1.2', 'mtu': None, 'enable_dhcp': True, - 'share_address': False}, - {'id': 2, - 'uuid': "cccccccc-cccc-cccc-cccc-cccccccccccc", - 'label': 'test2', - 'injected': False, - 'multi_host': True, - 'cidr': '192.168.2.0/24', - 'cidr_v6': '2001:db10::/64', - 'gateway_v6': '2001:db10::1', - 'netmask_v6': '64', - 'netmask': '255.255.255.0', - 'bridge': 'fa2', - 'bridge_interface': 'fake_fa2', - 'gateway': '192.168.2.1', - 'broadcast': '192.168.2.255', - 'dns1': '192.168.0.1', - 'dns2': '192.168.0.2', - 'dhcp_server': '192.168.2.1', - 'dhcp_start': '192.168.100.1', - 'vlan': None, - 'host': None, - 'project_id': 'fake_project', - 'vpn_public_address': '192.168.2.2', - 'mtu': None, - 'enable_dhcp': True, 'share_address': False}] @@ -1217,67 +1189,6 @@ class LinuxNetworkTestCase(test.NoDBTestCase): linux_net._set_device_mtu('fake-dev') ex.assert_has_calls(calls) - def _ovs_vif_port(self, calls, interface_type=None): - with mock.patch.object(utils, 'execute', return_value=('', '')) as ex: - linux_net.create_ovs_vif_port('fake-bridge', 'fake-dev', - 'fake-iface-id', 'fake-mac', - 'fake-instance-uuid', - interface_type=interface_type) - ex.assert_has_calls(calls) - - def test_ovs_vif_port_cmd(self): - expected = ['--', '--if-exists', - 'del-port', 'fake-dev', '--', 'add-port', - 'fake-bridge', 'fake-dev', - '--', 'set', 'Interface', 'fake-dev', - 'external-ids:iface-id=fake-iface-id', - 'external-ids:iface-status=active', - 'external-ids:attached-mac=fake-mac', - 'external-ids:vm-uuid=fake-instance-uuid' - ] - cmd = linux_net._create_ovs_vif_cmd('fake-bridge', 'fake-dev', - 'fake-iface-id', 'fake-mac', - 'fake-instance-uuid') - - self.assertEqual(expected, cmd) - - expected += ['type=fake-type'] - cmd = linux_net._create_ovs_vif_cmd('fake-bridge', 'fake-dev', - 'fake-iface-id', 'fake-mac', - 'fake-instance-uuid', - 'fake-type') - self.assertEqual(expected, cmd) - - def test_ovs_vif_port(self): - calls = [ - mock.call('ovs-vsctl', '--timeout=120', '--', '--if-exists', - 'del-port', 'fake-dev', '--', 'add-port', - 'fake-bridge', 'fake-dev', - '--', 'set', 'Interface', 'fake-dev', - 'external-ids:iface-id=fake-iface-id', - 'external-ids:iface-status=active', - 'external-ids:attached-mac=fake-mac', - 'external-ids:vm-uuid=fake-instance-uuid', - run_as_root=True) - ] - self._ovs_vif_port(calls) - - @mock.patch.object(linux_net, '_ovs_vsctl') - @mock.patch.object(linux_net, '_create_ovs_vif_cmd') - @mock.patch.object(linux_net, '_set_device_mtu') - def test_ovs_vif_port_with_type_vhostuser(self, mock_set_device_mtu, - mock_create_cmd, mock_vsctl): - linux_net.create_ovs_vif_port( - 'fake-bridge', - 'fake-dev', 'fake-iface-id', 'fake-mac', - "fake-instance-uuid", mtu=1500, - interface_type=network_model.OVS_VHOSTUSER_INTERFACE_TYPE) - mock_create_cmd.assert_called_once_with('fake-bridge', - 'fake-dev', 'fake-iface-id', 'fake-mac', - "fake-instance-uuid", network_model.OVS_VHOSTUSER_INTERFACE_TYPE) - self.assertFalse(mock_set_device_mtu.called) - self.assertTrue(mock_vsctl.called) - def _create_veth_pair(self, calls): with mock.patch.object(utils, 'execute', return_value=('', '')) as ex: linux_net._create_veth_pair('fake-dev1', 'fake-dev2') diff --git a/nova/virt/libvirt/vif.py b/nova/virt/libvirt/vif.py index f7e52b68cc..39e8b73a99 100644 --- a/nova/virt/libvirt/vif.py +++ b/nova/virt/libvirt/vif.py @@ -566,7 +566,14 @@ class LibvirtGenericVIFDriver(object): return func(instance, vif, image_meta, inst_type, virt_type, host) - def _plug_bridge_with_port(self, instance, vif, port): + def plug_ivs_hybrid(self, instance, vif): + """Plug using hybrid strategy (same as OVS) + + Create a per-VIF linux bridge, then link that bridge to the OVS + integration bridge via a veth device, setting up the other end + of the veth device just like a normal IVS port. Then boot the + VIF on the linux bridge using standard libvirt mechanisms. + """ iface_id = self.get_ovs_interfaceid(vif) br_name = self.get_br_name(vif['id']) v1_name, v2_name = self.get_veth_pair_names(vif['id']) @@ -594,24 +601,8 @@ class LibvirtGenericVIFDriver(object): linux_net._create_veth_pair(v1_name, v2_name, mtu) utils.execute('ip', 'link', 'set', br_name, 'up', run_as_root=True) utils.execute('brctl', 'addif', br_name, v1_name, run_as_root=True) - if port == 'ovs': - linux_net.create_ovs_vif_port(self.get_bridge_name(vif), - v2_name, iface_id, - vif['address'], instance.uuid, - mtu) - elif port == 'ivs': - linux_net.create_ivs_vif_port(v2_name, iface_id, - vif['address'], instance.uuid) - - def plug_ovs_hybrid(self, instance, vif): - """Plug using hybrid strategy - - Create a per-VIF linux bridge, then link that bridge to the OVS - integration bridge via a veth device, setting up the other end - of the veth device just like a normal OVS port. Then boot the - VIF on the linux bridge using standard libvirt mechanisms. - """ - self._plug_bridge_with_port(instance, vif, port='ovs') + linux_net.create_ivs_vif_port(v2_name, iface_id, + vif['address'], instance.uuid) def plug_ivs_ethernet(self, instance, vif): iface_id = self.get_ovs_interfaceid(vif) @@ -620,16 +611,6 @@ class LibvirtGenericVIFDriver(object): linux_net.create_ivs_vif_port(dev, iface_id, vif['address'], instance.uuid) - def plug_ivs_hybrid(self, instance, vif): - """Plug using hybrid strategy (same as OVS) - - Create a per-VIF linux bridge, then link that bridge to the OVS - integration bridge via a veth device, setting up the other end - of the veth device just like a normal IVS port. Then boot the - VIF on the linux bridge using standard libvirt mechanisms. - """ - self._plug_bridge_with_port(instance, vif, port='ivs') - def plug_ivs(self, instance, vif): if self.get_firewall_required(vif) or vif.is_hybrid_plug_enabled(): self.plug_ivs_hybrid(instance, vif) @@ -810,36 +791,6 @@ class LibvirtGenericVIFDriver(object): "vif_type=%s") % vif_type) func(instance, vif) - def unplug_ovs_hybrid(self, instance, vif): - """UnPlug using hybrid strategy - - Unhook port from OVS, unhook port from bridge, delete - bridge, and delete both veth devices. - """ - try: - br_name = self.get_br_name(vif['id']) - v1_name, v2_name = self.get_veth_pair_names(vif['id']) - - if linux_net.device_exists(br_name): - utils.execute('brctl', 'delif', br_name, v1_name, - run_as_root=True) - utils.execute('ip', 'link', 'set', br_name, 'down', - run_as_root=True) - utils.execute('brctl', 'delbr', br_name, - run_as_root=True) - - linux_net.delete_ovs_vif_port(self.get_bridge_name(vif), - v2_name) - except processutils.ProcessExecutionError: - LOG.exception(_("Failed while unplugging vif"), instance=instance) - - def unplug_ivs_ethernet(self, instance, vif): - """Unplug the VIF by deleting the port from the bridge.""" - try: - linux_net.delete_ivs_vif_port(self.get_vif_devname(vif)) - except processutils.ProcessExecutionError: - LOG.exception(_("Failed while unplugging vif"), instance=instance) - def unplug_ivs_hybrid(self, instance, vif): """UnPlug using hybrid strategy (same as OVS) @@ -858,6 +809,13 @@ class LibvirtGenericVIFDriver(object): except processutils.ProcessExecutionError: LOG.exception(_("Failed while unplugging vif"), instance=instance) + def unplug_ivs_ethernet(self, instance, vif): + """Unplug the VIF by deleting the port from the bridge.""" + try: + linux_net.delete_ivs_vif_port(self.get_vif_devname(vif)) + except processutils.ProcessExecutionError: + LOG.exception(_("Failed while unplugging vif"), instance=instance) + def unplug_ivs(self, instance, vif): if self.get_firewall_required(vif) or vif.is_hybrid_plug_enabled(): self.unplug_ivs_hybrid(instance, vif)