From 1265104b873d4cd791cecc62134ef874b4656003 Mon Sep 17 00:00:00 2001 From: Dan Wendlandt Date: Mon, 12 Mar 2012 11:43:23 -0700 Subject: Fix linux_net.py interface-driver loading. bug 950381 linux_net.py previously set the value of interface_driver based on a flag when the module was loaded. This breaks when nova-manage is used to invoke anything using the interface_driver, as nova-manage loads the nova.network.linux_net module before flags are properly set. This patch moves the initialization of the interface_driver variable to within a function that will only be called once flags are properly loaded. Note: this patch also fixes the unplug() action for the OVS vif-plugging code to actually remove the device created to act as the gateway device. Also tweaks the plug() to use the get_dev() method, reducing duplicate code. Change-Id: I97a17c010d4d6a67e2340a81315da00775c67eea --- nova/network/linux_net.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/nova/network/linux_net.py b/nova/network/linux_net.py index c0dbe88af..8b75635fd 100755 --- a/nova/network/linux_net.py +++ b/nova/network/linux_net.py @@ -907,18 +907,26 @@ def _ip_bridge_cmd(action, params, device): # of creating ethernet interfaces and attaching them to the network. # In the case of a network host, these interfaces # act as gateway/dhcp/vpn/etc. endpoints not VM interfaces. +interface_driver = None + + +def _get_interface_driver(): + global interface_driver + if not interface_driver: + interface_driver = utils.import_object(FLAGS.linuxnet_interface_driver) + return interface_driver def plug(network, mac_address, gateway=True): - return interface_driver.plug(network, mac_address, gateway) + return _get_interface_driver().plug(network, mac_address, gateway) def unplug(network): - return interface_driver.unplug(network) + return _get_interface_driver().unplug(network) def get_dev(network): - return interface_driver.get_dev(network) + return _get_interface_driver().get_dev(network) class LinuxNetInterfaceDriver(object): @@ -1077,7 +1085,7 @@ class LinuxBridgeInterfaceDriver(LinuxNetInterfaceDriver): class LinuxOVSInterfaceDriver(LinuxNetInterfaceDriver): def plug(self, network, mac_address, gateway=True): - dev = "gw-" + str(network['uuid'][0:11]) + dev = self.get_dev(network) if not _device_exists(dev): bridge = FLAGS.linuxnet_ovs_integration_bridge _execute('ovs-vsctl', @@ -1119,7 +1127,11 @@ class LinuxOVSInterfaceDriver(LinuxNetInterfaceDriver): return dev def unplug(self, network): - return self.get_dev(network) + dev = self.get_dev(network) + bridge = FLAGS.linuxnet_ovs_integration_bridge + _execute('ovs-vsctl', '--', '--if-exists', 'del-port', + bridge, dev, run_as_root=True) + return dev def get_dev(self, network): dev = "gw-" + str(network['uuid'][0:11]) @@ -1208,4 +1220,3 @@ class QuantumLinuxBridgeInterfaceDriver(LinuxNetInterfaceDriver): return bridge iptables_manager = IptablesManager() -interface_driver = utils.import_object(FLAGS.linuxnet_interface_driver) -- cgit