Blob Blame History Raw
From 16d2eff4fc41a2a8c87923ed9d5d97cca3037144 Mon Sep 17 00:00:00 2001
From: Dan Kenigsberg <danken@redhat.com>
Date: Wed, 20 Jun 2012 16:36:08 +0300
Subject: [PATCH 23/25] BZ#833119 - Allow to create VLANed network on top of
 existing bond

The (relatively) new setupNetwork verb allows to specify a network on
top of an existing bonding device. The nics of this bonds are taken
implictly from current host configuration.

Change-Id: If45aed68847f5a79380c629a70290a2c687cbd30
Signed-off-by: Igor Lvovsky <ilvovsky@redhat.com>
Reviewed-on: http://gerrit.ovirt.org/5456
Reviewed-by: Dan Kenigsberg <danken@redhat.com>
Reviewed-on: http://gerrit.ovirt.org/5760
---
 vdsm/configNetwork.py |   23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py
index d4e1177..8c4d36d 100755
--- a/vdsm/configNetwork.py
+++ b/vdsm/configNetwork.py
@@ -238,7 +238,8 @@ class ConfigWriter(object):
         s += 'NM_CONTROLLED=no\n'
         BLACKLIST = ['TYPE', 'NAME', 'DEVICE', 'bondingOptions',
                      'force', 'blockingdhcp',
-                     'connectivityCheck', 'connectivityTimeout']
+                     'connectivityCheck', 'connectivityTimeout',
+                     'implicitBonding']
         for k in set(kwargs.keys()).difference(set(BLACKLIST)):
             if re.match('^[a-zA-Z_]\w*$', k):
                 s += '%s=%s\n' % (k.upper(), pipes.quote(kwargs[k]))
@@ -491,10 +492,17 @@ def validateVlanId(vlan):
         raise ConfigNetworkError(ne.ERR_BAD_VLAN, 'vlan id must be a number')
 
 
-def _addNetworkValidation(_netinfo, bridge, vlan, bonding, nics, ipaddr, netmask, gateway,
-        bondingOptions, bridged=True):
-    if (vlan or bonding) and not nics:
-        raise ConfigNetworkError(ne.ERR_BAD_PARAMS, 'vlan/bonding definition requires nics. got: %r'%(nics,))
+def _addNetworkValidation(_netinfo, bridge, vlan, bonding, nics, ipaddr,
+                          netmask, gateway, bondingOptions, bridged=True,
+                          implicitBonding=False):
+    # The (relatively) new setupNetwork verb allows to specify a network on
+    # top of an existing bonding device. The nics of this bonds are taken
+    # implictly from current host configuration
+    if bonding and implicitBonding:
+        pass
+    elif (vlan or bonding) and not nics:
+        raise ConfigNetworkError(ne.ERR_BAD_PARAMS,
+                'vlan/bonding definition requires nics. got: %r' % (nics,))
 
     # Check bridge
     if bridged:
@@ -583,7 +591,7 @@ def addNetwork(network, vlan=None, bonding=None, nics=None, ipaddr=None, netmask
         _addNetworkValidation(_netinfo, bridge=network if bridged else None,
                 vlan=vlan, bonding=bonding, nics=nics, ipaddr=ipaddr,
                 netmask=netmask, gateway=gateway, bondingOptions=bondingOptions,
-                bridged=bridged)
+                bridged=bridged, **options)
 
     logging.info("Adding network %s with vlan=%s, bonding=%s, nics=%s,"
                  " bondingOptions=%s, mtu=%s, bridged=%s, options=%s",
@@ -1097,7 +1105,8 @@ def setupNetworks(networks={}, bondings={}, **options):
                 d['force'] = force
 
                 logger.debug("Adding network %r" % network)
-                addNetwork(network, configWriter=configWriter, **d)
+                addNetwork(network, configWriter=configWriter,
+                           implicitBonding=True, **d)
 
             # Do not handle a bonding device twice.
             # We already handled it before during addNetwork.
-- 
1.7.10.2