Change in vdsm[master]: NetReload: Moved delNetwork logic to the configurator

wudxw at linux.vnet.ibm.com wudxw at linux.vnet.ibm.com
Thu Apr 18 02:55:07 UTC 2013


Mark Wu has uploaded a new change for review.

Change subject: NetReload: Moved delNetwork logic to the configurator
......................................................................

NetReload: Moved delNetwork logic to the configurator

Change-Id: I0da21ebbddc1d920a4b13f6f417955f3d0a814d3
Signed-off-by: Mark Wu <wudxw at linux.vnet.ibm.com>
---
M vdsm/configNetwork.py
M vdsm/netconf/ifcfg.py
2 files changed, 101 insertions(+), 84 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/15/14015/1

diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py
index e52700b..edd3fba 100755
--- a/vdsm/configNetwork.py
+++ b/vdsm/configNetwork.py
@@ -35,7 +35,6 @@
 from neterrors import ConfigNetworkError
 from vdsm import define
 from vdsm import netinfo
-from vdsm.netinfo import DEFAULT_MTU
 from netconf.ifcfg import ifup
 from netconf.ifcfg import ifdown
 from netconf.ifcfg import ConfigWriter
@@ -368,15 +367,6 @@
     print "Bondings:", _netinfo.bondings.keys()
 
 
-def _removeUnusedNics(network, vlan, bonding, nics, configWriter):
-    _netinfo = netinfo.NetInfo()
-    for nic in nics:
-        if not _netinfo.nicOtherUsers(network, vlan, bonding, nic):
-            ifdown(nic)
-            configWriter.removeNic(nic)
-            ifup(nic)
-
-
 def _delBrokenNetwork(network, netAttr, configWriter):
     '''Adapts the network information of broken networks so that they can be
     deleted via delNetwork.'''
@@ -388,6 +378,19 @@
                implicitBonding=False, _netinfo=_netinfo)
 
 
+def validateDelNetwork(network, vlan, bonding, nics, bridged,  _netinfo):
+    if bonding:
+        validateBondingName(bonding)
+        if set(nics) != set(_netinfo.bondings[bonding]["slaves"]):
+            raise ConfigNetworkError(ne.ERR_BAD_NIC, 'delNetwork: %s are '
+                                     'not all nics enslaved to %s' %
+                                     (nics, bonding))
+    if vlan:
+        validateVlanId(vlan)
+    if bridged:
+        assertBridgeClean(network, vlan, bonding, nics)
+
+
 def delNetwork(network, vlan=None, bonding=None, nics=None, force=False,
                configWriter=None, implicitBonding=True, _netinfo=None,
                **options):
@@ -396,19 +399,11 @@
 
     if configWriter is None:
         configWriter = ConfigWriter()
+    configurator = Ifcfg(configWriter)
 
     if network not in _netinfo.networks:
         logging.info("Network %r: doesn't exist in libvirt database", network)
-        if network in netinfo.bridges():
-            configWriter.removeBridge(network)
-        else:
-            raise ConfigNetworkError(ne.ERR_BAD_BRIDGE, "Cannot delete network"
-                                     " %r: It doesn't exist in the system" %
-                                     network)
-
-        if vlan:
-            configWriter.removeVlan(vlan, bonding or nics[0])
-
+        configurator.delNonVdsmNetwork(network, vlan, bonding, nics)
         return
 
     nics, vlan, bonding = _netinfo.getNicsVlanAndBondingForNetwork(network)
@@ -418,71 +413,10 @@
                  "options=%s" % (network, vlan, bonding, nics, options))
 
     if not utils.tobool(force):
-        if bonding:
-            validateBondingName(bonding)
-            if set(nics) != set(_netinfo.bondings[bonding]["slaves"]):
-                raise ConfigNetworkError(ne.ERR_BAD_NIC, 'delNetwork: %s are '
-                                         'not all nics enslaved to %s' %
-                                         (nics, bonding))
-        if vlan:
-            validateVlanId(vlan)
-        if bridged:
-            assertBridgeClean(network, vlan, bonding, nics)
+        validateDelNetwork(network, vlan, bonding, nics, bridged, _netinfo)
 
-    configWriter.setNewMtu(network=network, bridged=bridged, _netinfo=_netinfo)
-    configWriter.removeLibvirtNetwork(network)
-
-    # We need to gather NetInfo again to refresh networks info from libvirt.
-    # The deleted bridge should never be up at this stage.
-    _netinfo = netinfo.NetInfo()
-    if network in _netinfo.networks:
-        raise ConfigNetworkError(ne.ERR_USED_BRIDGE, 'delNetwork: bridge %s '
-                                 'still exists' % network)
-
-    if network and bridged:
-        configWriter.removeBridge(network)
-
-    nic = nics[0] if nics else None
-    iface = bonding if bonding else nic
-    if iface:
-        ifdown(iface)
-        if vlan:
-            configWriter.removeVlan(vlan, iface)
-        else:
-            cf = netinfo.NET_CONF_PREF + iface
-            if not bridged:
-                # When removing bridgeless non-VLANed network
-                # we need to remove IP/NETMASK from the cfg file
-                for key in ('IPADDR', 'NETMASK', 'GATEWAY', 'BOOTPROTO'):
-                    configWriter._updateConfigValue(cf, key, '', True)
-            else:
-                # When removing bridged non-VLANed network
-                # we need to remove BRIDGE from the cfg file
-                configWriter._updateConfigValue(cf, 'BRIDGE', '', True)
-
-        # Now we can restart changed interface
-        ifup(iface)
-
-    # The (relatively) new setupNetwork verb allows to remove a network
-    # defined on top of an bonding device without break the bond itself.
-    if implicitBonding:
-        if bonding and not _netinfo.bondingOtherUsers(network, vlan, bonding):
-            ifdown(bonding)
-            configWriter.removeBonding(bonding)
-
-        _removeUnusedNics(network, vlan, bonding, nics, configWriter)
-    elif not bonding:
-        _removeUnusedNics(network, vlan, bonding, nics, configWriter)
-    elif not _netinfo.bondingOtherUsers(network, vlan, bonding):
-        # update MTU for bond interface and underlying NICs
-        ifdown(bonding)
-        cf = netinfo.NET_CONF_PREF + bonding
-        configWriter._updateConfigValue(cf, 'MTU', DEFAULT_MTU, False)
-        for nic in nics:
-            cf = netinfo.NET_CONF_PREF + nic
-            configWriter._updateConfigValue(cf, 'MTU', DEFAULT_MTU, False)
-
-        ifup(bonding)
+    configurator.delNetwork(network, vlan, bonding, nics, bridged,
+                            implicitBonding, _netinfo)
 
 
 def clientSeen(timeout):
diff --git a/vdsm/netconf/ifcfg.py b/vdsm/netconf/ifcfg.py
index ee7c666..9850aed 100644
--- a/vdsm/netconf/ifcfg.py
+++ b/vdsm/netconf/ifcfg.py
@@ -34,6 +34,7 @@
 from vdsm import constants
 from vdsm import libvirtconnection
 from vdsm import netinfo
+from vdsm.netinfo import DEFAULT_MTU
 from vdsm import utils
 import neterrors as ne
 
@@ -150,6 +151,88 @@
             self.configWriter.createLibvirtNetwork(network, False, nic)
         return nic
 
+    def _removeUnusedNics(self, network, vlan, bonding, nics):
+        _netinfo = netinfo.NetInfo()
+        for nic in nics:
+            if not _netinfo.nicOtherUsers(network, vlan, bonding, nic):
+                ifdown(nic)
+                self.configWriter.removeNic(nic)
+                ifup(nic)
+
+    def delNonVdsmNetwork(self, network, vlan, bonding, nics):
+        if network in netinfo.bridges():
+            self.configWriter.removeBridge(network)
+        else:
+            raise ConfigNetworkError(ne.ERR_BAD_BRIDGE, "Cannot delete network"
+                                     " %r: It doesn't exist in the system" %
+                                     network)
+
+        if vlan:
+            self.configWriter.removeVlan(vlan, bonding or nics[0])
+
+    def delNetwork(self, network, vlan, bonding, nics, bridged, removeBonding,
+                   _netinfo):
+
+        self.configWriter.setNewMtu(network=network, bridged=bridged,
+                                    _netinfo=_netinfo)
+        self.configWriter.removeLibvirtNetwork(network)
+
+        # We need to gather NetInfo again to refresh networks info from
+        # libvirt. The deleted bridge should never be up at this stage.
+        _netinfo = netinfo.NetInfo()
+        if network in _netinfo.networks:
+            raise ConfigNetworkError(ne.ERR_USED_BRIDGE, 'delNetwork: '
+                                     'bridge %s still exists' % network)
+
+        if network and bridged:
+            self.configWriter.removeBridge(network)
+        nic = nics[0] if nics else None
+        iface = bonding if bonding else nic
+        if iface:
+            if vlan:
+                self.removeVlanIface(network, vlan, bonding, nics, iface,
+                                     removeBonding, _netinfo)
+            else:
+                self.removeNonVlanIface(network, bonding, nics, iface, bridged,
+                                        removeBonding, _netinfo)
+
+    def removeVlanIface(self, network, vlan, bonding, nics, iface,
+                        removeBonding, _netinfo):
+        self.configWriter.removeVlan(vlan, iface)
+        self.removeIface(network, vlan, bonding, nics, removeBonding, _netinfo)
+
+    def removeNonVlanIface(self, network, bonding, nics, iface, bridged,
+                           removeBonding, _netinfo):
+        ifdown(iface)
+        cf = netinfo.NET_CONF_PREF + iface
+        if not bridged:
+            for key in ('IPADDR', 'NETMASK', 'GATEWAY', 'BOOTPROTO'):
+                self.configWriter._updateConfigValue(cf, key, '', True)
+        else:
+            self.configWriter._updateConfigValue(cf, 'BRIDGE', '', True)
+        ifup(iface)
+        self.removeIface(network, None, bonding, nics, removeBonding, _netinfo)
+
+    def removeIface(self, network, vlan, bonding, nics, removeBonding,
+                    _netinfo):
+        if bonding and not _netinfo.bondingOtherUsers(network, vlan, bonding):
+            ifdown(bonding)
+            if removeBonding:
+                self.configWriter.removeBonding(bonding)
+                self._removeUnusedNics(network, vlan, bonding, nics)
+            else:
+                # update MTU for bond interface and underlying NICs
+                cf = netinfo.NET_CONF_PREF + bonding
+                self.configWriter._updateConfigValue(cf, 'MTU', DEFAULT_MTU,
+                                                     False)
+                for nic in nics:
+                    cf = netinfo.NET_CONF_PREF + nic
+                    self.configWriter._updateConfigValue(cf, 'MTU',
+                                                         DEFAULT_MTU, False)
+                ifup(bonding)
+        elif not bonding:
+            self._removeUnusedNics(network, vlan, bonding, nics)
+
 
 class ConfigWriter(object):
     CONFFILE_HEADER = '# automatically generated by vdsm'


--
To view, visit http://gerrit.ovirt.org/14015
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0da21ebbddc1d920a4b13f6f417955f3d0a814d3
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Mark Wu <wudxw at linux.vnet.ibm.com>


More information about the vdsm-patches mailing list