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