Petr Horáček has uploaded a new change for review.
Change subject: net: iproute2, pyroute2: implement rollback
......................................................................
net: iproute2, pyroute2: implement rollback
Change-Id: I3ba8cd7bb1356063abc0df24e65810dbb9235dcd
Signed-off-by: Petr Horáček <phoracek(a)redhat.com>
---
M vdsm/network/configurators/__init__.py
M vdsm/network/configurators/iproute2.py
2 files changed, 35 insertions(+), 8 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/38/45238/1
diff --git a/vdsm/network/configurators/__init__.py
b/vdsm/network/configurators/__init__.py
index 8cadf1d..fe928c5 100644
--- a/vdsm/network/configurators/__init__.py
+++ b/vdsm/network/configurators/__init__.py
@@ -67,9 +67,7 @@
vdsm.netoconfpersistence.Config object with the not yet rolled back
networks and bonds.
"""
- # self.runningConfig will have all the changes that were applied before
- # we needed to rollback.
- return RunningConfig().diffFrom(self.runningConfig)
+ raise NotImplementedError
def configureBridge(self, bridge, **opts):
raise NotImplementedError
diff --git a/vdsm/network/configurators/iproute2.py
b/vdsm/network/configurators/iproute2.py
index 4f58fba..a18ec8b 100644
--- a/vdsm/network/configurators/iproute2.py
+++ b/vdsm/network/configurators/iproute2.py
@@ -20,14 +20,11 @@
from __future__ import absolute_import
import logging
-from vdsm import netinfo
-from vdsm import ipwrapper
from vdsm.constants import EXT_BRCTL
from vdsm.ipwrapper import routeAdd, routeDel, ruleAdd, ruleDel, IPRoute2Error
from vdsm.netconfpersistence import RunningConfig
-from vdsm import sysctl
-from vdsm.utils import CommandPath
-from vdsm.utils import execCmd
+from vdsm.utils import CommandPath, execCmd
+from vdsm import netinfo, ipwrapper, sysctl, vdscli
from . import (Configurator, runDhclient, getEthtoolOpts, libvirt,
wait_for_device)
@@ -52,6 +49,29 @@
return True
+def _get_rollback_changes(init_config, running_config):
+ networks = {}
+ bondings = {}
+ # remove
+ for net in set(running_config.networks) - set(init_config.networks):
+ networks[net] = {'remove': True}
+ for bond in set(running_config.bonds) - set(init_config.bonds):
+ bondings[bond] = {'remove': True}
+ # add
+ for net in set(init_config.networks) - set(running_config.networks):
+ networks[net] = init_config.networks[net]
+ for bond in set(init_config.bonds) - set(running_config.bonds):
+ bondings[bond] = init_config.bonds[bond]
+ # edit
+ for net in set(init_config.networks) & set(running_config.networks):
+ if init_config.networks[net] != running_config.networks[net]:
+ networks[net] = init_config.networks[net]
+ for bond in set(init_config.bonds) & set(running_config.bonds):
+ if init_config.bonds[bond] != running_config.bonds[bond]:
+ bondings[bond] = init_config.bonds[bond]
+ return networks, bondings
+
+
class Iproute2(Configurator):
def __init__(self, inRollback=False):
super(Iproute2, self).__init__(ConfigApplier(), inRollback)
@@ -68,6 +88,15 @@
self.runningConfig.save()
self.runningConfig = None
+ def rollback(self):
+ init_config = RunningConfig()
+ networks, bondings = _get_rollback_changes(init_config,
+ self.runningConfig)
+ c = vdscli.connect()
+ c.setupNetworks(networks, bondings, {'_inRollback': True,
+ 'connectivityCheck': False})
+ return RunningConfig().diffFrom(init_config)
+
def configureBridge(self, bridge, **opts):
self.configApplier.addBridge(bridge)
if bridge.port:
--
To view, visit
https://gerrit.ovirt.org/45238
To unsubscribe, visit
https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I3ba8cd7bb1356063abc0df24e65810dbb9235dcd
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Petr Horáček <phoracek(a)redhat.com>