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