Change in vdsm[master]: models: move IpConfig's members to NetDevice

osvoboda at redhat.com osvoboda at redhat.com
Tue Feb 24 00:24:50 UTC 2015


Ondřej Svoboda has uploaded a new change for review.

Change subject: models: move IpConfig's members to NetDevice
......................................................................

models: move IpConfig's members to NetDevice

Change-Id: I30ce76e1b9f32f1f35fe5927ed6b1215f911ff89
Signed-off-by: Ondřej Svoboda <osvoboda at redhat.com>
---
M vdsm/network/api.py
M vdsm/network/configurators/__init__.py
M vdsm/network/configurators/ifcfg.py
M vdsm/network/configurators/iproute2.py
M vdsm/network/configurators/pyroute_two.py
M vdsm/network/models.py
M vdsm/network/sourceroute.py
7 files changed, 69 insertions(+), 70 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/03/38103/1

diff --git a/vdsm/network/api.py b/vdsm/network/api.py
index 51be73a..12dfab6 100755
--- a/vdsm/network/api.py
+++ b/vdsm/network/api.py
@@ -35,7 +35,7 @@
 from .configurators import libvirt
 from .errors import ConfigNetworkError
 from . import errors as ne
-from .models import Bond, Bridge, IPv4, IPv6, IpConfig, Nic, Vlan
+from .models import Bond, Bridge, IPv4, IPv6, Nic, Vlan
 from .models import hierarchy_backing_device
 import hooks  # TODO: Turn into parent package import when vdsm is a package
 
@@ -161,10 +161,11 @@
     if topNetDev is None:
         raise ConfigNetworkError(ne.ERR_BAD_PARAMS, 'Network defined without '
                                  'devices.')
-    ipv4 = IPv4(ipaddr, netmask, gateway, defaultRoute, bootproto)
-    ipv6 = IPv6(ipv6addr, ipv6gateway, defaultRoute, ipv6autoconf, dhcpv6)
-    blockingdhcp = configurator._inRollback or utils.tobool(blockingdhcp)
-    topNetDev.ipconfig = IpConfig(ipv4, ipv6, blockingdhcp)
+    topNetDev.ipv4 = IPv4(ipaddr, netmask, gateway, defaultRoute, bootproto)
+    topNetDev.ipv6 = IPv6(ipv6addr, ipv6gateway, defaultRoute, ipv6autoconf,
+                          dhcpv6)
+    topNetDev.blockingdhcp = (configurator._inRollback or
+                              utils.tobool(blockingdhcp))
     return topNetDev
 
 
@@ -477,7 +478,7 @@
                                   vlan=vlan, bonding=bonding, nics=nics,
                                   _netinfo=_netinfo, configurator=configurator,
                                   implicitBonding=implicitBonding)
-    net_ent.ipconfig.ipv4.bootproto = (
+    net_ent.ipv4.bootproto = (
         'dhcp' if _netinfo.networks[network]['dhcpv4'] else 'none')
 
     if bridged and keep_bridge:
diff --git a/vdsm/network/configurators/__init__.py b/vdsm/network/configurators/__init__.py
index 18c5e38..700bd9b 100644
--- a/vdsm/network/configurators/__init__.py
+++ b/vdsm/network/configurators/__init__.py
@@ -123,7 +123,7 @@
         qos.remove_outbound(top_device)
 
     def _addSourceRoute(self, netEnt):
-        ipv4 = netEnt.ipconfig.ipv4
+        ipv4 = netEnt.ipv4
         # bootproto is None for both static and no bootproto
         if ipv4.bootproto != 'dhcp' and netEnt.master is None:
             logging.debug("Adding source route: name=%s, addr=%s, netmask=%s, "
@@ -140,7 +140,7 @@
                                   ipv4.netmask, ipv4.gateway).configure()
 
     def _removeSourceRoute(self, netEnt, sourceRouteClass):
-        if netEnt.ipconfig.ipv4.bootproto != 'dhcp' and netEnt.master is None:
+        if netEnt.ipv4.bootproto != 'dhcp' and netEnt.master is None:
             logging.debug("Removing source route for device %s", netEnt.name)
             sourceRouteClass(netEnt.name, self, None, None, None).remove()
 
@@ -176,7 +176,7 @@
 
 def runDhclient(iface, family=4):
     dhclient = DhcpClient(iface.name, family)
-    rc = dhclient.start(iface.ipconfig.async)
-    if not iface.ipconfig.async and rc:
+    rc = dhclient.start(iface.asynchronous_dhcp)
+    if not iface.asynchronous_dhcp and rc:
         raise ConfigNetworkError(ERR_FAILED_IFUP, 'dhclient%s failed',
                                  family)
diff --git a/vdsm/network/configurators/ifcfg.py b/vdsm/network/configurators/ifcfg.py
index 0562e52..6d35c0a 100644
--- a/vdsm/network/configurators/ifcfg.py
+++ b/vdsm/network/configurators/ifcfg.py
@@ -43,7 +43,7 @@
 
 from . import Configurator, dhclient, getEthtoolOpts, libvirt
 from ..errors import ConfigNetworkError, ERR_FAILED_IFUP
-from ..models import Nic, Bridge, IpConfig
+from ..models import Nic, Bridge, IPv4, IPv6
 from ..sourceroute import StaticSourceRoute, DynamicSourceRoute
 import dsaversion  # TODO: Make parent package import when vdsm is a package
 
@@ -90,13 +90,13 @@
         if bridge.port:
             bridge.port.configure(**opts)
         self._addSourceRoute(bridge)
-        ifup(bridge.name, bridge.ipconfig.async)
+        ifup(bridge.name, bridge.asynchronous_dhcp)
 
     def configureVlan(self, vlan, **opts):
         self.configApplier.addVlan(vlan, **opts)
         vlan.device.configure(**opts)
         self._addSourceRoute(vlan)
-        ifup(vlan.name, vlan.ipconfig.async)
+        ifup(vlan.name, vlan.asynchronous_dhcp)
 
     def configureBond(self, bond, **opts):
         self.configApplier.addBonding(bond, **opts)
@@ -106,7 +106,7 @@
         for slave in bond.slaves:
             slave.configure(**opts)
         self._addSourceRoute(bond)
-        ifup(bond.name, bond.ipconfig.async)
+        ifup(bond.name, bond.asynchronous_dhcp)
         if self.unifiedPersistence:
             self.runningConfig.setBonding(
                 bond.name, {'options': bond.options,
@@ -159,7 +159,7 @@
         if nic.bond is None:
             if not netinfo.isVlanned(nic.name):
                 ifdown(nic.name)
-            ifup(nic.name, nic.ipconfig.async)
+            ifup(nic.name, nic.asynchronous_dhcp)
 
     def removeBridge(self, bridge):
         DynamicSourceRoute.addInterfaceTracking(bridge)
@@ -201,7 +201,8 @@
                 if self.unifiedPersistence:
                     self.runningConfig.removeBonding(bonding.name)
             else:  # Recreate the bond with ip and master info cleared
-                bonding.ipconfig = IpConfig()
+                bonding.ipv4 = IPv4()
+                bonding.ipv6 = IPv6()
                 bonding.master = None
                 bonding.configure()
         else:
@@ -610,12 +611,12 @@
         if bridge.stp is not None:
             conf += 'STP=%s\n' % ('on' if bridge.stp else 'off')
         conf += 'ONBOOT=%s\n' % _to_ifcfg_bool(
-            not self.unifiedPersistence or bridge.ipconfig.ipv4.defaultRoute)
+            not self.unifiedPersistence or bridge.ipv4.defaultRoute)
 
         if 'custom' in opts and 'bridge_opts' in opts['custom']:
             opts['bridging_opts'] = opts['custom']['bridge_opts']
-        self._createConfFile(conf, bridge.name, bridge.ipconfig.ipv4,
-                             bridge.ipconfig.ipv6, bridge.mtu, **opts)
+        self._createConfFile(conf, bridge.name, bridge.ipv4, bridge.ipv6,
+                             bridge.mtu, **opts)
 
     def addVlan(self, vlan, **opts):
         """ Create ifcfg-* file with proper fields for VLAN """
@@ -625,8 +626,8 @@
             conf += 'BRIDGE=%s\n' % pipes.quote(vlan.bridge.name)
         conf += 'ONBOOT=%s\n' % _to_ifcfg_bool(
             not self.unifiedPersistence or vlan.serving_default_route)
-        self._createConfFile(conf, vlan.name, vlan.ipconfig.ipv4,
-                             vlan.ipconfig.ipv6, vlan.mtu, **opts)
+        self._createConfFile(conf, vlan.name, vlan.ipv4, vlan.ipv6, vlan.mtu,
+                             **opts)
 
     def addBonding(self, bond, **opts):
         """ Create ifcfg-* file with proper fields for bond """
@@ -674,8 +675,8 @@
 
     @staticmethod
     def _getIfaceConfValues(iface):
-        ipv4 = copy.deepcopy(iface.ipconfig.ipv4)
-        ipv6 = copy.deepcopy(iface.ipconfig.ipv6)
+        ipv4 = copy.deepcopy(iface.ipv4)
+        ipv6 = copy.deepcopy(iface.ipv6)
         mtu = iface.mtu
         if netinfo.ifaceUsed(iface.name):
             confParams = netinfo.getIfaceCfg(iface.name)
diff --git a/vdsm/network/configurators/iproute2.py b/vdsm/network/configurators/iproute2.py
index 6eaf54b..9c72f80 100644
--- a/vdsm/network/configurators/iproute2.py
+++ b/vdsm/network/configurators/iproute2.py
@@ -222,8 +222,8 @@
 class ConfigApplier(object):
 
     def _setIpConfig(self, iface):
-        ipv4 = iface.ipconfig.ipv4
-        ipv6 = iface.ipconfig.ipv6
+        ipv4 = iface.ipv4
+        ipv6 = iface.ipv6
         if ipv4.address or ipv6.address:
             self.removeIpConfig(iface)
         if ipv4.address:
@@ -253,9 +253,9 @@
 
     def ifup(self, iface):
         ipwrapper.linkSet(iface.name, ['up'])
-        if iface.ipconfig.ipv4.bootproto == 'dhcp':
+        if iface.ipv4.bootproto == 'dhcp':
             runDhclient(iface)
-        if iface.ipconfig.ipv6.dhcpv6:
+        if iface.ipv6.dhcpv6:
             runDhclient(iface, 6)
 
     def ifdown(self, iface):
@@ -264,7 +264,7 @@
         dhclient.shutdown()
 
     def setIfaceConfigAndUp(self, iface):
-        if iface.ipconfig:
+        if iface.ipv4 or iface.ipv6:
             self._setIpConfig(iface)
         if iface.mtu:
             self.setIfaceMtu(iface.name, iface.mtu)
diff --git a/vdsm/network/configurators/pyroute_two.py b/vdsm/network/configurators/pyroute_two.py
index 74076df..211c91b 100644
--- a/vdsm/network/configurators/pyroute_two.py
+++ b/vdsm/network/configurators/pyroute_two.py
@@ -56,8 +56,8 @@
         self.ip = IPDB()
 
     def _setIpConfig(self, iface):
-        ipv4 = iface.ipconfig.ipv4
-        ipv6 = iface.ipconfig.ipv6
+        ipv4 = iface.ipv4
+        ipv6 = iface.ipv6
         if ipv4.address or ipv6.address:
             self.removeIpConfig(iface)
         if ipv4.address:
@@ -90,9 +90,9 @@
     def ifup(self, iface):
         with self.ip.interfaces[iface.name] as i:
             i.up()
-        if iface.ipconfig.ipv4.bootproto == 'dhcp':
+        if iface.ipv4.bootproto == 'dhcp':
             runDhclient(iface)
-        if iface.ipconfig.ipv6.dhcpv6:
+        if iface.ipv6.dhcpv6:
             runDhclient(iface, 6)
 
     def ifdown(self, iface):
@@ -102,7 +102,7 @@
         dhclient.shutdown()
 
     def setIfaceConfigAndUp(self, iface):
-        if iface.ipconfig:
+        if iface.ipv4 or iface.ipv6:
             self._setIpConfig(iface)
         if iface.mtu:
             self.setIfaceMtu(iface.name, iface.mtu)
diff --git a/vdsm/network/models.py b/vdsm/network/models.py
index cb164a3..be68983 100644
--- a/vdsm/network/models.py
+++ b/vdsm/network/models.py
@@ -30,9 +30,12 @@
 
 
 class NetDevice(object):
-    def __init__(self, name, configurator, ipconfig=None, mtu=None):
+    def __init__(self, name, configurator, ipv4=None, ipv6=None,
+                 blockingdhcp=False, mtu=None):
         self.name = name
-        self.ipconfig = ipconfig if ipconfig is not None else IpConfig()
+        self.ipv4 = ipv4 if ipv4 is not None else IPv4()
+        self.ipv6 = ipv6 if ipv6 is not None else IPv6()
+        self.blockingdhcp = blockingdhcp
         self.mtu = mtu
         self.configurator = configurator
         self.master = None
@@ -68,7 +71,7 @@
     def serving_default_route(self):
         device = self
         while device:
-            if device.ipconfig.ipv4.defaultRoute:
+            if device.ipv4.defaultRoute:
                 return True
             device = device.master
         return False
@@ -77,10 +80,15 @@
     def backing_device(self):
         return False
 
+    @property
+    def asynchronous_dhcp(self):
+        return ((self.ipv4.bootproto == 'dhcp' or self.ipv6.dhcpv6) and
+                not self.blockingdhcp)
+
 
 class Nic(NetDevice):
-    def __init__(self, name, configurator, ipconfig=None, mtu=None,
-                 _netinfo=None):
+    def __init__(self, name, configurator, ipv4=None, ipv6=None,
+                 blockingdhcp=False, mtu=None, _netinfo=None):
         if _netinfo is None:
             _netinfo = netinfo.NetInfo()
         if name not in _netinfo.nics:
@@ -89,8 +97,8 @@
         if _netinfo.ifaceUsers(name):
             mtu = max(mtu, netinfo.getMtu(name))
 
-        super(Nic, self).__init__(name, configurator, ipconfig,
-                                  mtu=mtu)
+        super(Nic, self).__init__(name, configurator, ipv4, ipv6, blockingdhcp,
+                                  mtu)
 
     def configure(self, **opts):
         # in a limited condition, we should not touch the nic config
@@ -120,7 +128,8 @@
 class Vlan(NetDevice):
     MAX_ID = 4094
 
-    def __init__(self, device, tag, configurator, ipconfig=None, mtu=None):
+    def __init__(self, device, tag, configurator, ipv4=None, ipv6=None,
+                 blockingdhcp=False, mtu=None):
         self.validateTag(tag)
         if device is None:
             raise ConfigNetworkError(ne.ERR_BAD_PARAMS, 'Missing required vlan'
@@ -129,7 +138,7 @@
         self.device = device
         self.tag = tag
         super(Vlan, self).__init__('%s.%s' % (device.name, tag), configurator,
-                                   ipconfig, mtu)
+                                   ipv4, ipv6, blockingdhcp, mtu)
 
     def __iter__(self):
         yield self
@@ -163,14 +172,15 @@
     MAX_NAME_LEN = 15
     ILLEGAL_CHARS = frozenset(':. \t')
 
-    def __init__(self, name, configurator, ipconfig=None, mtu=None, port=None,
-                 stp=None):
+    def __init__(self, name, configurator, ipv4=None, ipv6=None,
+                 blockingdhcp=False, mtu=None, port=None, stp=None):
         self.validateName(name)
         if port:
             port.master = self
         self.port = port
         self.stp = stp
-        super(Bridge, self).__init__(name, configurator, ipconfig, mtu)
+        super(Bridge, self).__init__(name, configurator, ipv4, ipv6,
+                                     blockingdhcp, mtu)
 
     def __iter__(self):
         yield self
@@ -199,8 +209,9 @@
 
 
 class Bond(NetDevice):
-    def __init__(self, name, configurator, ipconfig=None, mtu=None, slaves=(),
-                 options=None, destroyOnMasterRemoval=None):
+    def __init__(self, name, configurator, ipv4=None, ipv6=None,
+                 blockingdhcp=False, mtu=None, slaves=(), options=None,
+                 destroyOnMasterRemoval=None):
         self.validateName(name)
         for slave in slaves:
             slave.master = self
@@ -211,7 +222,8 @@
             self.validateOptions(name, options)
             self.options = self._reorderOptions(options)
         self.destroyOnMasterRemoval = destroyOnMasterRemoval
-        super(Bond, self).__init__(name, configurator, ipconfig, mtu)
+        super(Bond, self).__init__(name, configurator, ipv4, ipv6,
+                                   blockingdhcp, mtu)
 
     def __iter__(self):
         yield self
@@ -379,6 +391,9 @@
         self.defaultRoute = defaultRoute
         self.bootproto = bootproto
 
+    def __nonzero__(self):
+        return bool(self.address or self.bootproto)
+
     def __repr__(self):
         return 'IPv4(%s, %s, %s, %s, %s)' % (self.address, self.netmask,
                                              self.gateway, self.defaultRoute,
@@ -434,6 +449,9 @@
         self.ipv6autoconf = ipv6autoconf
         self.dhcpv6 = dhcpv6
 
+    def __nonzero__(self):
+        return bool(self.address or self.ipv6autoconf or self.dhcpv6)
+
     def __repr__(self):
         return 'IPv6(%s, %s, %s, %s, %s)' % (
             self.address, self.gateway, self.defaultRoute, self.ipv6autoconf,
@@ -468,27 +486,6 @@
         except ConfigNetworkError as cne:
             cne.message = '%r is not a valid IPv6 gateway.'
             raise
-
-
-class IpConfig(object):
-    def __init__(self, ipv4=None, ipv6=None, blockingdhcp=False):
-        if ipv4 is None:
-            ipv4 = IPv4()
-        if ipv6 is None:
-            ipv6 = IPv6()
-        self.ipv4 = ipv4
-        self.ipv6 = ipv6
-        self.async = ((ipv4.bootproto == 'dhcp' or ipv6.dhcpv6) and
-                      not blockingdhcp)
-
-    def __nonzero__(self):
-        # iproute2 and pyroute_two check that IP configuration is not empty
-        return bool(self.ipv4.address or self.ipv6.address or
-                    self.ipv4.bootproto or self.ipv6.ipv6autoconf or
-                    self.ipv6.dhcpv6)
-
-    def __repr__(self):
-        return 'IpConfig(%r, %r, %s)' % (self.ipv4, self.ipv6, self.async)
 
 
 def _nicSort(nics):
diff --git a/vdsm/network/sourceroute.py b/vdsm/network/sourceroute.py
index ef63fc1..5f06de0 100644
--- a/vdsm/network/sourceroute.py
+++ b/vdsm/network/sourceroute.py
@@ -93,7 +93,7 @@
 
     @staticmethod
     def addInterfaceTracking(device):
-        if device.ipconfig.ipv4.bootproto == 'dhcp':
+        if device.ipv4.bootproto == 'dhcp':
             open(DynamicSourceRoute.getTrackingFilePath(device.name), 'a').\
                 close()
 


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I30ce76e1b9f32f1f35fe5927ed6b1215f911ff89
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Ondřej Svoboda <osvoboda at redhat.com>


More information about the vdsm-patches mailing list