Change in vdsm[master]: sourceroute: move removal to network configurators
osvoboda at redhat.com
osvoboda at redhat.com
Thu May 28 20:53:30 UTC 2015
Ondřej Svoboda has uploaded a new change for review.
Change subject: sourceroute: move removal to network configurators
......................................................................
sourceroute: move removal to network configurators
Source route classes now don't use configurators at all.
The flow is simplified as follows:
Ifcfg.removeNic → Ifcfg._ifaceDownAndCleanup → Configurator._removeSourceRoute
→ Ifcfg.removeSourceRoute
Ifcfg passes StaticSourceRoute and Iproute2/Pyroute2 pass DynamicSourceRoute
to Configurator._removeSourceRoute
Change-Id: I44cd11742ff5e445104b08521b2adcf558bff14f
Signed-off-by: Ondřej Svoboda <osvoboda at redhat.com>
---
M vdsm/network/configurators/__init__.py
M vdsm/network/configurators/ifcfg.py
M vdsm/network/configurators/iproute2.py
M vdsm/network/sourceroute.py
M vdsm/network/sourceroutethread.py
5 files changed, 29 insertions(+), 33 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/96/41596/1
diff --git a/vdsm/network/configurators/__init__.py b/vdsm/network/configurators/__init__.py
index c7b1eff..b5fffd0 100644
--- a/vdsm/network/configurators/__init__.py
+++ b/vdsm/network/configurators/__init__.py
@@ -143,10 +143,11 @@
source_route.prepare_configuration()
self.configureSourceRoute(source_route)
- def _removeSourceRoute(self, netEnt, sourceRouteClass):
- 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()
+ def _removeSourceRoute(self, device, sourceRouteClass):
+ if device.ipv4.bootproto != 'dhcp' and device.master is None:
+ source_route = sourceRouteClass(device.name)
+ if source_route.prepare_removal():
+ self.removeSourceRoute(source_route)
def _setNewMtu(self, iface, ifaceVlans):
"""
diff --git a/vdsm/network/configurators/ifcfg.py b/vdsm/network/configurators/ifcfg.py
index 539fa29..0f9f66f 100644
--- a/vdsm/network/configurators/ifcfg.py
+++ b/vdsm/network/configurators/ifcfg.py
@@ -252,9 +252,10 @@
self._writeConfFile(routes, 'route', source_route.device)
self._writeConfFile(rules, 'rule', source_route.device)
- def removeSourceRoute(self, routes, rules, device):
- self._removeSourceRouteFile('rule', device)
- self._removeSourceRouteFile('route', device)
+ def removeSourceRoute(self, source_route):
+ logging.info('Removing source route for %s', source_route.device)
+ self._removeSourceRouteFile('rule', source_route.device)
+ self._removeSourceRouteFile('route', source_route.device)
def flush(self):
super(Ifcfg, self).flush()
diff --git a/vdsm/network/configurators/iproute2.py b/vdsm/network/configurators/iproute2.py
index 105c735..975380d 100644
--- a/vdsm/network/configurators/iproute2.py
+++ b/vdsm/network/configurators/iproute2.py
@@ -210,10 +210,11 @@
logging.error('Source route configuration failed: %s', e.message)
@staticmethod
- def removeSourceRoute(routes, rules, device):
+ def removeSourceRoute(source_route):
+ logging.info('Removing source route for %s', source_route.device)
# Routes are removed automatically when the link goes down.
try:
- for rule in rules:
+ for rule in source_route.rules:
ruleDel(rule)
except IPRoute2Error as e:
logging.error('Source route removal failed: %s' % e.message)
diff --git a/vdsm/network/sourceroute.py b/vdsm/network/sourceroute.py
index e8d4579..e4ecf3c 100644
--- a/vdsm/network/sourceroute.py
+++ b/vdsm/network/sourceroute.py
@@ -25,7 +25,7 @@
from vdsm import netinfo
from vdsm.constants import P_VDSM_RUN
-from vdsm.ipwrapper import IPRoute2Error, Route, routeShowTable, Rule, ruleList
+from vdsm.ipwrapper import Route, routeShowTable, Rule, ruleList
from vdsm.utils import rmFile
@@ -33,9 +33,8 @@
class StaticSourceRoute(object):
- def __init__(self, device, configurator, ipaddr, mask, gateway):
+ def __init__(self, device, ipaddr=None, mask=None, gateway=None):
self.device = device
- self._configurator = configurator
self._ipaddr = ipaddr
self._mask = mask
self._gateway = gateway
@@ -72,14 +71,10 @@
self.routes = self._buildRoutes()
self.rules = self._buildRules()
- def _prepare_removal(self):
+ def prepare_removal(self):
self.routes = None
self.rules = None
-
- def remove(self):
- self._prepare_removal()
- self._configurator.removeSourceRoute(self.routes, self.rules,
- self.device)
+ return True
class DynamicSourceRoute(StaticSourceRoute):
@@ -153,19 +148,16 @@
return rules
- def _prepare_removal(self):
+ def prepare_removal(self):
self.rules = self._getRules(self.device)
if self.rules:
- self.table = self._getTable(self.rules)
- if self.table:
- self.routes = self._getRoutes(self.table)
-
- def remove(self):
- logging.info("Removing gateway - device: %s", self.device)
- self._prepare_removal()
- if self.rules and self.table:
- self._configurator.removeSourceRoute(self.routes, self.rules,
- self.device)
+ table = self._getTable(self.rules)
+ if table:
+ # The routes are not used in removal but I want to keep
+ # the truth value of the function the same as long as I can.
+ self.routes = self._getRoutes(table)
+ return True
+ return False
@staticmethod
def _isLibvirtInterfaceFallback(device):
diff --git a/vdsm/network/sourceroutethread.py b/vdsm/network/sourceroutethread.py
index 6724175..33a0eb0 100644
--- a/vdsm/network/sourceroutethread.py
+++ b/vdsm/network/sourceroutethread.py
@@ -50,13 +50,14 @@
logging.error('invalid DHCP response %s',
sourceRouteContents)
else:
- source_route = DynamicSourceRoute(device, configurator,
- ip, mask, gateway)
+ source_route = DynamicSourceRoute(
+ device, ip, mask, gateway)
source_route.prepare_configuration()
configurator.configureSourceRoute(source_route)
else:
- DynamicSourceRoute(device, configurator,
- None, None, None).remove()
+ source_route = DynamicSourceRoute(device)
+ if source_route.prepare_removal():
+ configurator.removeSourceRoute(source_route)
else:
logging.info("interface %s is not a libvirt interface", device)
--
To view, visit https://gerrit.ovirt.org/41596
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I44cd11742ff5e445104b08521b2adcf558bff14f
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