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