Change in vdsm[master]: netinfo: Retrieve bonding options differing from defaults (WIP)
osvoboda at redhat.com
osvoboda at redhat.com
Thu Feb 13 14:13:46 UTC 2014
Ondřej Svoboda has uploaded a new change for review.
Change subject: netinfo: Retrieve bonding options differing from defaults (WIP)
......................................................................
netinfo: Retrieve bonding options differing from defaults (WIP)
On failure, an empty dictionary is returned.
Tests are yet to be created.
Change-Id: Ief6d366b1b761627c7203cf236b75ef538af3e26
Bug-Url: https://bugzilla.redhat.com/987813
Signed-off-by: Ondřej Svoboda <osvoboda at redhat.com>
---
M lib/vdsm/netinfo.py
M tests/functional/networkTests.py
M tests/functional/supervdsmFuncTests.py
M vdsm/supervdsmServer
4 files changed, 53 insertions(+), 4 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/56/24456/1
diff --git a/lib/vdsm/netinfo.py b/lib/vdsm/netinfo.py
index dbacb2f..fe48f81 100644
--- a/lib/vdsm/netinfo.py
+++ b/lib/vdsm/netinfo.py
@@ -41,7 +41,7 @@
from .ipwrapper import routeShowGateways, routeShowAllDefaultGateways
from . import libvirtconnection
from .ipwrapper import linkShowDev
-from .utils import anyFnmatch
+from .utils import anyFnmatch, execCmd, memoized, CommandPath
from .netconfpersistence import RunningConfig
@@ -68,9 +68,11 @@
_BONDING_LOADBALANCE_MODES = frozenset(('0', '2', '4', '5', '6'))
_IFCFG_ZERO_SUFFIXED = frozenset(
('IPADDR0', 'GATEWAY0', 'PREFIX0', 'NETMASK0'))
+_TEE_BINARY = CommandPath('tee', '/usr/bin/tee')
LIBVIRT_NET_PREFIX = 'vdsm-'
DUMMY_BRIDGE = ';vdsmdummy;'
+DUMMY_BOND = ';vdsmdummybond;'
DEFAULT_MTU = '1500'
REQUIRED_BONDINGS = frozenset(('bond0', 'bond1', 'bond2', 'bond3', 'bond4'))
@@ -531,9 +533,44 @@
return info
+ at memoized
+def _getDefaultBondingOptions():
+ teeCmd = _TEE_BINARY.cmd
+
+ rc, _, err = execCmd([teeCmd, BONDING_MASTERS],
+ data='+' + DUMMY_BOND, sudo=True)
+ if rc:
+ raise OSError('Creating a reference bond failed: %s.', err)
+
+ try:
+ opts = bondOpts(DUMMY_BOND)
+ finally:
+ rc, _, _ = execCmd([teeCmd, BONDING_MASTERS],
+ data='-' + DUMMY_BOND, sudo=True)
+
+ return opts
+
+
+def _getBondingOptions(bond):
+ try:
+ defaults = _getDefaultBondingOptions()
+ opts = bondOpts(bond)
+
+ except Exception as e:
+ logging.exception('Reading bonding options failed.')
+ return {}
+
+ for key, val in dict(opts).iteritems():
+ if key in defaults and val == defaults[key]:
+ del opts[key]
+
+ return opts
+
+
def _bondinfo(link):
info = _devinfo(link)
- info.update({'hwaddr': link.address, 'slaves': slaves(link.name)})
+ info.update({'hwaddr': link.address, 'slaves': slaves(link.name),
+ 'options': _getBondingOptions(bond)})
return info
diff --git a/tests/functional/networkTests.py b/tests/functional/networkTests.py
index 695a29f..f2a785d 100644
--- a/tests/functional/networkTests.py
+++ b/tests/functional/networkTests.py
@@ -41,7 +41,7 @@
from vdsm.utils import RollbackContext
from vdsm.netinfo import (operstate, prefix2netmask, getRouteDeviceTo,
- getDhclientIfaces)
+ getDhclientIfaces, _getBondingOptions)
from vdsm import ipwrapper
from vdsm.utils import pgrep
@@ -1728,3 +1728,9 @@
NOCHK)
self.assertEqual(status, SUCCESS, msg)
self.assertNetworkDoesntExist(NETWORK_NAME)
+
+ def testGetBondingOptions(self):
+ # TODO: Create a bond with mode and miimon options set and check
+ # that no other options are returned.
+
+ _getBondingOptions('bond0')
diff --git a/tests/functional/supervdsmFuncTests.py b/tests/functional/supervdsmFuncTests.py
index 4596306..fa94291 100644
--- a/tests/functional/supervdsmFuncTests.py
+++ b/tests/functional/supervdsmFuncTests.py
@@ -37,3 +37,9 @@
self.dropPrivileges()
proxy = supervdsm.getProxy()
self.assertTrue(proxy.ping())
+
+ @testValidation.ValidateRunningAsRoot
+ def testDefaultBondingOptions(self):
+ proxy = supervdsm.getProxy()
+ print proxy.defaultBondingOptions()
+ raise Exception()
diff --git a/vdsm/supervdsmServer b/vdsm/supervdsmServer
index 21351c3..ce07dea 100755
--- a/vdsm/supervdsmServer
+++ b/vdsm/supervdsmServer
@@ -49,7 +49,7 @@
except ImportError:
_glusterEnabled = False
-from vdsm import utils
+from vdsm import netinfo, utils
from vdsm.tool import restore_nets
from parted_utils import getDevicePartedInfo as _getDevicePartedInfo
from md_utils import getMdDeviceUuidMap as _getMdDeviceUuidMap
--
To view, visit http://gerrit.ovirt.org/24456
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ief6d366b1b761627c7203cf236b75ef538af3e26
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