[vdsm/f17] update to vdsm-4.10.0-3
Federico Simoncelli
fsimonce at fedoraproject.org
Tue Jun 26 19:16:29 UTC 2012
commit 83b9f8f9bf02399226fb2801cd3803a39331b5f3
Author: Federico Simoncelli <fsimonce at redhat.com>
Date: Tue Jun 26 21:07:08 2012 +0200
update to vdsm-4.10.0-3
- BZ#832577: node can't be approved
- BZ#824298 fix typo in keyword argument exc_info
Signed-off-by: Federico Simoncelli <fsimonce at redhat.com>
.gitignore | 17 ---
...til.yumFind-rename-and-simplify-semantics.patch | 70 ++++++++++
0002-drop-deployUtil.yumSearch.patch | 63 +++++++++
....yumSearchVersion-compare-versions-sanely.patch | 95 +++++++++++++
...over-delete-candidates-networks-only-once.patch | 77 +++++++++++
...nslation-in-setupNetworks-is-not-relevant.patch | 33 +++++
0006-Minor-optimization-for-delNetwork.patch | 97 ++++++++++++++
...-ignore-bridgeless-networks-in-ifaceUsers.patch | 38 ++++++
0008-Minor-optimization-for-addNetwork.patch | 65 +++++++++
0009-Use-already-known-iface-in-addNetwork.patch | 37 +++++
...se-proper-MTU-on-bonding-when-add-network.patch | 39 ++++++
0011-Add-bridge-on-top-of-VLAN-if-exists.patch | 50 +++++++
...dd-netConfigDirty-bit-to-getVdsCaps-repor.patch | 30 ++++
0013-remove-flag-skipLibvirt.patch | 132 ++++++++++++++++++
...llow-to-change-bond-without-network-attac.patch | 140 ++++++++++++++++++++
...llow-to-change-network-according-the-diff.patch | 47 +++++++
...llow-to-remove-bond-and-attach-network-to.patch | 49 +++++++
...BZ-826873-Allow-to-create-bond-without-ne.patch | 31 +++++
0018-BZ-832577-node-can-t-be-approved.patch | 38 ++++++
...298-fix-typo-in-keyword-argument-exc_info.patch | 57 ++++++++
sources | 17 ---
vdsm.spec | 12 ++-
22 files changed, 1198 insertions(+), 36 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 47ebc5c..2ea9961 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,20 +8,3 @@
/vdsm-4.9.6-1b07249.tar.gz
/vdsm-4.9.6-e952471.tar.gz
/vdsm-4.10.0.tar.gz
-/0001-deployUtil.yumFind-rename-and-simplify-semantics.patch
-/0002-drop-deployUtil.yumSearch.patch
-/0003-deployUtil.yumSearchVersion-compare-versions-sanely.patch
-/0004-Iterates-over-delete-candidates-networks-only-once.patch
-/0005-options-translation-in-setupNetworks-is-not-relevant.patch
-/0006-Minor-optimization-for-delNetwork.patch
-/0007-Don-t-ignore-bridgeless-networks-in-ifaceUsers.patch
-/0008-Minor-optimization-for-addNetwork.patch
-/0009-Use-already-known-iface-in-addNetwork.patch
-/0010-Use-proper-MTU-on-bonding-when-add-network.patch
-/0011-Add-bridge-on-top-of-VLAN-if-exists.patch
-/0012-BZ-830485-Add-netConfigDirty-bit-to-getVdsCaps-repor.patch
-/0013-remove-flag-skipLibvirt.patch
-/0014-BZ-826873-Allow-to-change-bond-without-network-attac.patch
-/0015-BZ-830486-Allow-to-change-network-according-the-diff.patch
-/0016-BZ-826467-Allow-to-remove-bond-and-attach-network-to.patch
-/0017-Related-to-BZ-826873-Allow-to-create-bond-without-ne.patch
diff --git a/0001-deployUtil.yumFind-rename-and-simplify-semantics.patch b/0001-deployUtil.yumFind-rename-and-simplify-semantics.patch
new file mode 100644
index 0000000..46041c1
--- /dev/null
+++ b/0001-deployUtil.yumFind-rename-and-simplify-semantics.patch
@@ -0,0 +1,70 @@
+From 8cf22884c2134353981bca1cb0600451391dd0de Mon Sep 17 00:00:00 2001
+From: Dan Kenigsberg <danken at redhat.com>
+Date: Tue, 19 Jun 2012 00:17:13 +0300
+Subject: [PATCH 01/17] deployUtil.yumFind: rename and simplify semantics
+
+deployUtil.yumListPackages is a convenience wrapper around
+yum.YumBase.pkgSack.searchNevra()
+
+Change-Id: I5ad5405ae0f8548c0116ac5a8066325455aef13a
+Signed-off-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5467
+Reviewed-by: Douglas Schilling Landgraf <dougsland at redhat.com>
+Tested-by: Douglas Schilling Landgraf <dougsland at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5542
+Reviewed-by: Federico Simoncelli <fsimonce at redhat.com>
+Tested-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ vdsm_reg/deployUtil.py.in | 14 ++++++--------
+ 1 files changed, 6 insertions(+), 8 deletions(-)
+
+diff --git a/vdsm_reg/deployUtil.py.in b/vdsm_reg/deployUtil.py.in
+index 976295f..c80b487 100644
+--- a/vdsm_reg/deployUtil.py.in
++++ b/vdsm_reg/deployUtil.py.in
+@@ -1029,18 +1029,16 @@ def installAndVerify(pckgType, pckgName, action, args=None):
+
+ return fReturn, msg
+
+-def yumFind(pkgName):
++def yumListPackages(pkgName):
+ """
+ Returns a list of available packages exists in yum's db.
+ """
+ import yum
+- lReturn = None
+
+ my = yum.YumBase()
+ my.preconf.debuglevel = 0 # Remove yum noise
+- lReturn = my.pkgSack.searchNevra(name=pkgName)
++ return my.pkgSack.searchNevra(name=pkgName)
+
+- return lReturn
+
+ def yumSearch(pkgName):
+ """
+@@ -1048,8 +1046,8 @@ def yumSearch(pkgName):
+ """
+ fReturn = False
+
+- pkgs = yumFind(pkgName)
+- if pkgs and len(pkgs)>0:
++ pkgs = yumListPackages(pkgName)
++ if pkgs:
+ fReturn = True
+ logging.debug("yumSearch: found " + str(pkgName) + " entries: " + str(pkgs))
+ else:
+@@ -1064,8 +1062,8 @@ def yumSearchVersion(pkgName, ver, startWith=True):
+ """
+ fReturn = False
+
+- pkgs = yumFind(pkgName)
+- if pkgs and len(pkgs)>0:
++ pkgs = yumListPackages(pkgName)
++ if pkgs:
+ for item in pkgs:
+ if startWith:
+ if str(item).startswith(ver):
+--
+1.7.1
+
diff --git a/0002-drop-deployUtil.yumSearch.patch b/0002-drop-deployUtil.yumSearch.patch
new file mode 100644
index 0000000..4980e65
--- /dev/null
+++ b/0002-drop-deployUtil.yumSearch.patch
@@ -0,0 +1,63 @@
+From 5edbed09c4091959e569e8cccc888bb72958082b Mon Sep 17 00:00:00 2001
+From: Dan Kenigsberg <danken at redhat.com>
+Date: Tue, 19 Jun 2012 00:21:55 +0300
+Subject: [PATCH 02/17] drop deployUtil.yumSearch
+
+It was just a complex way of calculating bool(yumFind()).
+
+Change-Id: Iafc9d67fef5cb348255b06a9e6b404a70ec35693
+Signed-off-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5468
+Reviewed-by: Douglas Schilling Landgraf <dougsland at redhat.com>
+Tested-by: Douglas Schilling Landgraf <dougsland at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5543
+Reviewed-by: Federico Simoncelli <fsimonce at redhat.com>
+Tested-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ vds_bootstrap/vds_bootstrap.py | 2 +-
+ vdsm_reg/deployUtil.py.in | 16 ----------------
+ 2 files changed, 1 insertions(+), 17 deletions(-)
+
+diff --git a/vds_bootstrap/vds_bootstrap.py b/vds_bootstrap/vds_bootstrap.py
+index 0df5023..12e127e 100755
+--- a/vds_bootstrap/vds_bootstrap.py
++++ b/vds_bootstrap/vds_bootstrap.py
+@@ -225,7 +225,7 @@ class Deploy:
+ rc = True
+
+ try:
+- rc = deployUtil.yumSearch(VDSM_NAME)
++ rc = bool(deployUtil.yumListPackages(VDSM_NAME))
+ except:
+ rc = False
+ logging.error("checkRegistration: Error searching for VDSM package!",
+diff --git a/vdsm_reg/deployUtil.py.in b/vdsm_reg/deployUtil.py.in
+index c80b487..1adf1a5 100644
+--- a/vdsm_reg/deployUtil.py.in
++++ b/vdsm_reg/deployUtil.py.in
+@@ -1039,22 +1039,6 @@ def yumListPackages(pkgName):
+ my.preconf.debuglevel = 0 # Remove yum noise
+ return my.pkgSack.searchNevra(name=pkgName)
+
+-
+-def yumSearch(pkgName):
+- """
+- Returns True is package exists in yum's db.
+- """
+- fReturn = False
+-
+- pkgs = yumListPackages(pkgName)
+- if pkgs:
+- fReturn = True
+- logging.debug("yumSearch: found " + str(pkgName) + " entries: " + str(pkgs))
+- else:
+- logging.debug("yumSearch: package " + str(pkgName) + " not found!")
+-
+- return fReturn
+-
+ def yumSearchVersion(pkgName, ver, startWith=True):
+ """
+ Returns True is package exists in yum's db with the given version.
+--
+1.7.1
+
diff --git a/0003-deployUtil.yumSearchVersion-compare-versions-sanely.patch b/0003-deployUtil.yumSearchVersion-compare-versions-sanely.patch
new file mode 100644
index 0000000..d9b45d7
--- /dev/null
+++ b/0003-deployUtil.yumSearchVersion-compare-versions-sanely.patch
@@ -0,0 +1,95 @@
+From 67309fc8a7a4edd4996490b64f51ce37f0ed2327 Mon Sep 17 00:00:00 2001
+From: Dan Kenigsberg <danken at redhat.com>
+Date: Tue, 19 Jun 2012 00:33:22 +0300
+Subject: [PATCH 03/17] deployUtil.yumSearchVersion: compare versions sanely
+
+Change-Id: I0aa40c3395ca012a21f148f20125b54e3ba16d8a
+Signed-off-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5469
+Reviewed-by: Mark Wu <wudxw at linux.vnet.ibm.com>
+Tested-by: Douglas Schilling Landgraf <dougsland at redhat.com>
+Reviewed-by: Douglas Schilling Landgraf <dougsland at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5544
+Tested-by: Federico Simoncelli <fsimonce at redhat.com>
+Reviewed-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ vds_bootstrap/vds_bootstrap.py | 6 +++---
+ vdsm_reg/deployUtil.py.in | 31 +++++++------------------------
+ 2 files changed, 10 insertions(+), 27 deletions(-)
+
+diff --git a/vds_bootstrap/vds_bootstrap.py b/vds_bootstrap/vds_bootstrap.py
+index 12e127e..9801459 100755
+--- a/vds_bootstrap/vds_bootstrap.py
++++ b/vds_bootstrap/vds_bootstrap.py
+@@ -80,13 +80,13 @@ fedorabased = deployUtil.versionCompare(deployUtil.getOSVersion(), "16") >= 0
+
+ if rhel6based:
+ VDSM_NAME = "vdsm"
+- VDSM_MIN_VER = VDSM_NAME + "-4.9"
++ VDSM_MIN_VER = "4.9"
+ KERNEL_VER = "2.6.32-.*.el6"
+ KERNEL_MIN_VER = 150
+ MINIMAL_SUPPORTED_PLATFORM = "6.0"
+ else:
+ VDSM_NAME = "vdsm22"
+- VDSM_MIN_VER = VDSM_NAME + "-4.5"
++ VDSM_MIN_VER = "4.5"
+ KERNEL_VER = "2.6.18-.*.el5"
+ KERNEL_MIN_VER = 159
+ MINIMAL_SUPPORTED_PLATFORM = "5.5"
+@@ -250,7 +250,7 @@ class Deploy:
+ rc = True
+
+ try:
+- rc = deployUtil.yumSearchVersion(VDSM_NAME, VDSM_MIN_VER, True)
++ rc = deployUtil.yumSearchVersion(VDSM_NAME, VDSM_MIN_VER)
+ except:
+ rc = False
+ logging.error("checkMajorVersion: Error searching for VDSM version!",
+diff --git a/vdsm_reg/deployUtil.py.in b/vdsm_reg/deployUtil.py.in
+index 1adf1a5..1474196 100644
+--- a/vdsm_reg/deployUtil.py.in
++++ b/vdsm_reg/deployUtil.py.in
+@@ -1039,32 +1039,15 @@ def yumListPackages(pkgName):
+ my.preconf.debuglevel = 0 # Remove yum noise
+ return my.pkgSack.searchNevra(name=pkgName)
+
+-def yumSearchVersion(pkgName, ver, startWith=True):
+- """
+- Returns True is package exists in yum's db with the given version.
+- Note: yum internal code has verEQ and verGT. We should use it ASAP.
+- """
+- fReturn = False
++def yumSearchVersion(pkgName, ver):
++ "Return True if package exists in yum's db with the given version or higer"
++ import rpmUtils.miscutils
+
+- pkgs = yumListPackages(pkgName)
+- if pkgs:
+- for item in pkgs:
+- if startWith:
+- if str(item).startswith(ver):
+- fReturn = True
+- logging.debug("yumSearchVersion: pkg " + str(item) + " starts with: " + ver)
+- else:
+- logging.debug("yumSearchVersion: pkg " + str(item) + " does not start with: " + ver)
+- else:
+- if str(item) == ver:
+- fReturn = True
+- logging.debug("yumSearchVersion: pkg " + str(item) + " matches: " + ver)
+- else:
+- logging.debug("yumSearchVersion: pkg " + str(item) + " does not match: " + ver)
++ for pkg in yumListPackages(pkgName):
++ if rpmUtils.miscutils.compareVerOnly(pkg.ver, ver) >= 0:
++ return True
+ else:
+- logging.debug("yumSearchVersion: package " + str(pkgName) + " not found!")
+-
+- return fReturn
++ return False
+
+ #############################################################################################################
+ # Host PKI functions.
+--
+1.7.1
+
diff --git a/0004-Iterates-over-delete-candidates-networks-only-once.patch b/0004-Iterates-over-delete-candidates-networks-only-once.patch
new file mode 100644
index 0000000..3cb42b4
--- /dev/null
+++ b/0004-Iterates-over-delete-candidates-networks-only-once.patch
@@ -0,0 +1,77 @@
+From 165284de4e03fb72fb9e4ca811fbcc77618ff02d Mon Sep 17 00:00:00 2001
+From: Igor Lvovsky <ilvovsky at redhat.com>
+Date: Mon, 4 Jun 2012 11:02:56 +0300
+Subject: [PATCH 04/17] Iterates over delete candidates networks only once
+
+Change-Id: Iec45c1cb3d76a70555e256f96c983e13a0518cbe
+Signed-off-by: Igor Lvovsky <ilvovsky at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5204
+Reviewed-by: Livnat Peer <lpeer at redhat.com>
+Reviewed-by: Shu Ming <shuming at linux.vnet.ibm.com>
+Tested-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5546
+Tested-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ vdsm/configNetwork.py | 26 ++++++++++++--------------
+ 1 files changed, 12 insertions(+), 14 deletions(-)
+
+diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py
+index b37ff0f..3f2e5fe 100755
+--- a/vdsm/configNetwork.py
++++ b/vdsm/configNetwork.py
+@@ -1010,26 +1010,23 @@ def setupNetworks(networks={}, bondings={}, **options):
+ networksAdded = []
+ #bondingNetworks = {} # Reminder TODO
+
+- logger.info("Setting up network")
+- logger.debug("Setting up network according to configuration: networks:%r, bondings:%r, options:%r" % (networks, bondings, options))
++ logger.debug("Setting up network according to configuration: "
++ "networks:%r, bondings:%r, options:%r" % (networks,
++ bondings, options))
+
+ force = options.get('force', False)
+ if not utils.tobool(force):
+ logging.debug("Validating configuration")
+- _validateNetworkSetup(dict(networks), dict(bondings), explicitBonding=options.get('explicitBonding', False))
++ _validateNetworkSetup(dict(networks), dict(bondings),
++ explicitBonding=options.get('explicitBonding',
++ False))
+
+ logger.debug("Applying...")
+ try:
+- delnetworks = {}
+- for network, networkAttrs in networks.iteritems():
++ # Remove networks with 'remove' attribute
++ for network, networkAttrs in networks.items():
+ if 'remove' in networkAttrs:
+- delnetworks[network] = networkAttrs
+-
+- for network, networkAttrs in delnetworks.iteritems():
+- if networkAttrs.pop('remove', False):
+- assert not networkAttrs
+-
+- logger.debug('Removing network %r'%network)
++ logger.debug("Removing network %r" % network)
+ delNetwork(network, configWriter=configWriter, force=force)
+ del networks[network]
+
+@@ -1041,12 +1038,13 @@ def setupNetworks(networks={}, bondings={}, **options):
+ d = dict(networkAttrs)
+ if 'bonding' in d:
+ d['nics'] = bondings[d['bonding']]['nics']
+- d['bondingOptions'] = bondings[d['bonding']].get('options', None)
++ d['bondingOptions'] = bondings[d['bonding']].get('options',
++ None)
+ else:
+ d['nics'] = [d.pop('nic')]
+ d['force'] = force
+
+- logger.debug('Adding network %r'%network)
++ logger.debug("Adding network %r" % network)
+ addNetwork(network, configWriter=configWriter, **d)
+
+ if utils.tobool(options.get('connectivityCheck', True)):
+--
+1.7.1
+
diff --git a/0005-options-translation-in-setupNetworks-is-not-relevant.patch b/0005-options-translation-in-setupNetworks-is-not-relevant.patch
new file mode 100644
index 0000000..a70cfca
--- /dev/null
+++ b/0005-options-translation-in-setupNetworks-is-not-relevant.patch
@@ -0,0 +1,33 @@
+From 752dd81155caf00895d14fadc4aa1cbbc3e88364 Mon Sep 17 00:00:00 2001
+From: Igor Lvovsky <ilvovsky at redhat.com>
+Date: Mon, 4 Jun 2012 15:08:09 +0300
+Subject: [PATCH 05/17] 'options' translation in setupNetworks is not relevant
+
+Change-Id: I68871fe1a4112fd7223e794a1b67bf98e26c104c
+Signed-off-by: Igor Lvovsky <ilvovsky at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5205
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-by: Lei Li <lilei at linux.vnet.ibm.com>
+Tested-by: Lei Li <lilei at linux.vnet.ibm.com>
+Reviewed-by: Livnat Peer <lpeer at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5547
+Tested-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ vdsm/API.py | 1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+diff --git a/vdsm/API.py b/vdsm/API.py
+index c098b4b..70034aa 100644
+--- a/vdsm/API.py
++++ b/vdsm/API.py
+@@ -1145,7 +1145,6 @@ class Global(object):
+ def setupNetworks(self, networks={}, bondings={}, options={}):
+ """Add a new network to this vds, replacing an old one."""
+
+- self._translateOptionsToNew(options)
+ if not self._cif._networkSemaphore.acquire(blocking=False):
+ self.log.warn('concurrent network verb already executing')
+ return errCode['unavail']
+--
+1.7.1
+
diff --git a/0006-Minor-optimization-for-delNetwork.patch b/0006-Minor-optimization-for-delNetwork.patch
new file mode 100644
index 0000000..d142f96
--- /dev/null
+++ b/0006-Minor-optimization-for-delNetwork.patch
@@ -0,0 +1,97 @@
+From 4accdc21e59f573ec0135ceb0faeda1b452acb22 Mon Sep 17 00:00:00 2001
+From: Igor Lvovsky <ilvovsky at redhat.com>
+Date: Mon, 4 Jun 2012 20:23:28 +0300
+Subject: [PATCH 06/17] Minor optimization for delNetwork
+
+Change-Id: I66a37cb1100411af13197642bdb13ae745bc6e53
+Signed-off-by: Igor Lvovsky <ilvovsky at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5207
+Reviewed-by: Lei Li <lilei at linux.vnet.ibm.com>
+Tested-by: Lei Li <lilei at linux.vnet.ibm.com>
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5548
+Tested-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ vdsm/configNetwork.py | 31 +++++++++++++++++++------------
+ 1 files changed, 19 insertions(+), 12 deletions(-)
+
+diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py
+index 3f2e5fe..8d71375 100755
+--- a/vdsm/configNetwork.py
++++ b/vdsm/configNetwork.py
+@@ -736,22 +736,25 @@ def delNetwork(network, vlan=None, bonding=None, nics=None, force=False,
+
+ if not utils.tobool(options.get('skipLibvirt', False)):
+ if network not in _netinfo.networks:
+- raise ConfigNetworkError(ne.ERR_BAD_BRIDGE, "Cannot delete network %r: It doesn't exist" % network)
++ raise ConfigNetworkError(ne.ERR_BAD_BRIDGE,
++ "Cannot delete network %r: It doesn't exist" % network)
+
+ nics, vlan, bonding = _netinfo.getNicsVlanAndBondingForNetwork(network)
+ bridged = _netinfo.networks[network]['bridged']
+ else:
+ bridged = True
+
+- logging.info("Removing network %s with vlan=%s, bonding=%s, nics=%s. options=%s"%(network, vlan, bonding, nics, options))
++ logging.info("Removing network %s with vlan=%s, bonding=%s, nics=%s,"
++ "options=%s" % (network, vlan, bonding, nics, options))
+
+ if not utils.tobool(force):
+ if bonding:
+ validateBondingName(bonding)
+ if set(nics) != set(_netinfo.bondings[bonding]["slaves"]):
+- raise ConfigNetworkError(ne.ERR_BAD_NIC, 'delNetwork: %s are not all nics enslaved to %s' % (nics, bonding))
++ raise ConfigNetworkError(ne.ERR_BAD_NIC,
++ "delNetwork: %s are not all nics enslaved to %s" % \
++ (nics, bonding))
+ if vlan:
+- #assertVlan(vlan)
+ validateVlanId(vlan)
+ if bridged:
+ assertBridgeClean(network, vlan, bonding, nics)
+@@ -763,30 +766,34 @@ def delNetwork(network, vlan=None, bonding=None, nics=None, force=False,
+ configWriter.setNewMtu(network)
+
+ removeLibvirtNetwork(network, log=False)
+- # the deleted bridge should never be up at this stage.
++ # We need to gather NetInfo again to refresh networks info from libvirt.
++ # The deleted bridge should never be up at this stage.
+ if network in NetInfo().networks:
+- raise ConfigNetworkError(ne.ERR_USED_BRIDGE, 'delNetwork: bridge %s still exists' % network)
++ raise ConfigNetworkError(ne.ERR_USED_BRIDGE,
++ "delNetwork: bridge %s still exists" % network)
+
+ if network and bridged:
+ ifdown(network)
+ subprocess.call([constants.EXT_BRCTL, 'delbr', network])
+ configWriter.removeBridge(network)
++
+ if vlan:
+ vlandev = (bonding or nics[0]) + '.' + vlan
+ ifdown(vlandev)
+- subprocess.call([constants.EXT_VCONFIG, 'rem', vlandev], stderr=subprocess.PIPE)
++ subprocess.call([constants.EXT_VCONFIG, 'rem', vlandev],
++ stderr=subprocess.PIPE)
+ configWriter.removeVlan(vlan, bonding or nics[0])
++
+ if bonding:
+ if not bridged or not bondingOtherUsers(network, vlan, bonding):
+ ifdown(bonding)
+- if not bridged or not bondingOtherUsers(network, vlan, bonding):
+ configWriter.removeBonding(bonding)
++
+ for nic in nics:
+- if not bridged or not nicOtherUsers(network, vlan, bonding, nic):
++ nicUsers = nicOtherUsers(network, vlan, bonding, nic)
++ if not nicUsers:
+ ifdown(nic)
+- if bridged and nicOtherUsers(network, vlan, bonding, nic):
+- continue
+- configWriter.removeNic(nic)
++ configWriter.removeNic(nic)
+
+ def clientSeen(timeout):
+ start = time.time()
+--
+1.7.1
+
diff --git a/0007-Don-t-ignore-bridgeless-networks-in-ifaceUsers.patch b/0007-Don-t-ignore-bridgeless-networks-in-ifaceUsers.patch
new file mode 100644
index 0000000..93fd5ae
--- /dev/null
+++ b/0007-Don-t-ignore-bridgeless-networks-in-ifaceUsers.patch
@@ -0,0 +1,38 @@
+From b66fdcfbfe9022aa6ec33df274a5a81a73d1af5f Mon Sep 17 00:00:00 2001
+From: Igor Lvovsky <ilvovsky at redhat.com>
+Date: Mon, 4 Jun 2012 19:24:12 +0300
+Subject: [PATCH 07/17] Don't ignore bridgeless networks in ifaceUsers
+
+Change-Id: Id45b37683d52feebd1b31421c2a717695394147a
+Signed-off-by: Igor Lvovsky <ilvovsky at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5206
+Tested-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5549
+Tested-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ vdsm/configNetwork.py | 8 +++++---
+ 1 files changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py
+index 8d71375..fc43d67 100755
+--- a/vdsm/configNetwork.py
++++ b/vdsm/configNetwork.py
+@@ -86,9 +86,11 @@ def ifaceUsers(iface):
+ "Returns a list of entities using the interface"
+ _netinfo = NetInfo()
+ users = set()
+- for b, bdict in _netinfo.networks.iteritems():
+- if bdict['bridged'] and iface in bdict['ports']:
+- users.add(b)
++ for n, ndict in _netinfo.networks.iteritems():
++ if ndict['bridged'] and iface in ndict['ports']:
++ users.add(n)
++ elif not ndict['bridged'] and iface == ndict['interface']:
++ users.add(n)
+ for b, bdict in _netinfo.bondings.iteritems():
+ if iface in bdict['slaves']:
+ users.add(b)
+--
+1.7.1
+
diff --git a/0008-Minor-optimization-for-addNetwork.patch b/0008-Minor-optimization-for-addNetwork.patch
new file mode 100644
index 0000000..4d711f4
--- /dev/null
+++ b/0008-Minor-optimization-for-addNetwork.patch
@@ -0,0 +1,65 @@
+From 5bdaa7c0a1cc696ed4e1d492d9af576fd8c8e4eb Mon Sep 17 00:00:00 2001
+From: Igor Lvovsky <ilvovsky at redhat.com>
+Date: Wed, 6 Jun 2012 09:25:03 +0300
+Subject: [PATCH 08/17] Minor optimization for addNetwork
+
+Change-Id: I5506140ccd065d76a77414593635598f26289829
+Signed-off-by: Igor Lvovsky <ilvovsky at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5208
+Reviewed-by: Lei Li <lilei at linux.vnet.ibm.com>
+Tested-by: Lei Li <lilei at linux.vnet.ibm.com>
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5550
+Tested-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ vdsm/configNetwork.py | 21 ++++++++-------------
+ 1 files changed, 8 insertions(+), 13 deletions(-)
+
+diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py
+index fc43d67..89b3047 100755
+--- a/vdsm/configNetwork.py
++++ b/vdsm/configNetwork.py
+@@ -613,32 +613,27 @@ def addNetwork(network, vlan=None, bonding=None, nics=None, ipaddr=None, netmask
+ ifdown(nic)
+
+ if bridged:
+- configWriter.addBridge(network, ipaddr=ipaddr, netmask=netmask, mtu=mtu,
+- gateway=gateway, **options)
++ configWriter.addBridge(network, ipaddr=ipaddr, netmask=netmask,
++ mtu=mtu, gateway=gateway, **options)
+ ifdown(network)
+
+- # since we have vlan device, it is connected to the bridge. other
+- # interfaces should be connected to the bridge through vlan, and not directly.
+- brName = network if bridged and not vlan else None
++ brName = network if bridged else None
+
+ # nics must be activated in the same order of boot time to expose the correct
+ # MAC address.
+ for nic in nicSort(nics):
+- if not bonding and bridged:
+- configWriter.addNic(nic, bridge=brName, mtu=max(prevmtu, mtu))
++ configWriter.addNic(nic, bonding=bonding, bridge=brName, mtu=max(prevmtu, mtu))
+ ifup(nic)
+ if bonding:
+ configWriter.addBonding(bonding, bridge=brName, bondingOptions=bondingOptions, mtu=mtu)
+- for nic in nics:
+- configWriter.addNic(nic, bonding=bonding, mtu=max(prevmtu, mtu))
+ ifup(bonding)
++
+ if vlan:
+ iface += '.' + vlan
+- configWriter.addVlan(vlan, bonding or nics[0], network=network if bridged else None, mtu=mtu, bridged=bridged)
+- # since we have vlan device, it is connected to the network. other
+- # interfaces should be connected to the network through vlan, and not
+- # directly.
++ configWriter.addVlan(vlan, bonding or nics[0], network=brName,
++ mtu=mtu, bridged=bridged)
+ ifup((bonding or nics[0]) + '.' + vlan)
++
+ if bridged:
+ if options.get('bootproto') == 'dhcp' and not utils.tobool(options.get('blockingdhcp')):
+ # wait for dhcp in another thread, so vdsm won't get stuck (BZ#498940)
+--
+1.7.1
+
diff --git a/0009-Use-already-known-iface-in-addNetwork.patch b/0009-Use-already-known-iface-in-addNetwork.patch
new file mode 100644
index 0000000..09ea6db
--- /dev/null
+++ b/0009-Use-already-known-iface-in-addNetwork.patch
@@ -0,0 +1,37 @@
+From 16e43715e9731db46b4ea519eb4c0c1294bf18a4 Mon Sep 17 00:00:00 2001
+From: Igor Lvovsky <ilvovsky at redhat.com>
+Date: Tue, 12 Jun 2012 15:38:27 +0300
+Subject: [PATCH 09/17] Use already known iface in addNetwork
+
+Change-Id: I085792401a04d7695855e81b16b442e4c31ab706
+Signed-off-by: Igor Lvovsky <ilvovsky at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5283
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+Tested-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5551
+Tested-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ vdsm/configNetwork.py | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py
+index 89b3047..87b32ed 100755
+--- a/vdsm/configNetwork.py
++++ b/vdsm/configNetwork.py
+@@ -629,10 +629,10 @@ def addNetwork(network, vlan=None, bonding=None, nics=None, ipaddr=None, netmask
+ ifup(bonding)
+
+ if vlan:
+- iface += '.' + vlan
+- configWriter.addVlan(vlan, bonding or nics[0], network=brName,
++ configWriter.addVlan(vlan, iface, network=brName,
+ mtu=mtu, bridged=bridged)
+- ifup((bonding or nics[0]) + '.' + vlan)
++ iface += '.' + vlan
++ ifup(iface)
+
+ if bridged:
+ if options.get('bootproto') == 'dhcp' and not utils.tobool(options.get('blockingdhcp')):
+--
+1.7.1
+
diff --git a/0010-Use-proper-MTU-on-bonding-when-add-network.patch b/0010-Use-proper-MTU-on-bonding-when-add-network.patch
new file mode 100644
index 0000000..7a24e2d
--- /dev/null
+++ b/0010-Use-proper-MTU-on-bonding-when-add-network.patch
@@ -0,0 +1,39 @@
+From 34a348e500b2c0f50f3de3095db8aa7d61f2953a Mon Sep 17 00:00:00 2001
+From: Igor Lvovsky <ilvovsky at redhat.com>
+Date: Wed, 6 Jun 2012 14:16:37 +0300
+Subject: [PATCH 10/17] Use proper MTU on bonding when add network
+
+Change-Id: Id34f2462ddfc2c9f4a323235c79f919c0cce12a7
+Signed-off-by: Igor Lvovsky <ilvovsky at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5209
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+Tested-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5552
+Tested-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ vdsm/configNetwork.py | 7 +++++--
+ 1 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py
+index 87b32ed..5353d0e 100755
+--- a/vdsm/configNetwork.py
++++ b/vdsm/configNetwork.py
+@@ -622,10 +622,13 @@ def addNetwork(network, vlan=None, bonding=None, nics=None, ipaddr=None, netmask
+ # nics must be activated in the same order of boot time to expose the correct
+ # MAC address.
+ for nic in nicSort(nics):
+- configWriter.addNic(nic, bonding=bonding, bridge=brName, mtu=max(prevmtu, mtu))
++ configWriter.addNic(nic, bonding=bonding, bridge=brName,
++ mtu=max(prevmtu, mtu))
+ ifup(nic)
+ if bonding:
+- configWriter.addBonding(bonding, bridge=brName, bondingOptions=bondingOptions, mtu=mtu)
++ configWriter.addBonding(bonding, bridge=brName,
++ bondingOptions=bondingOptions,
++ mtu=max(prevmtu, mtu))
+ ifup(bonding)
+
+ if vlan:
+--
+1.7.1
+
diff --git a/0011-Add-bridge-on-top-of-VLAN-if-exists.patch b/0011-Add-bridge-on-top-of-VLAN-if-exists.patch
new file mode 100644
index 0000000..a566e93
--- /dev/null
+++ b/0011-Add-bridge-on-top-of-VLAN-if-exists.patch
@@ -0,0 +1,50 @@
+From 69af2fcbdedfe6eab77c4c748a911caa78366590 Mon Sep 17 00:00:00 2001
+From: Igor Lvovsky <ilvovsky at redhat.com>
+Date: Tue, 12 Jun 2012 16:03:04 +0300
+Subject: [PATCH 11/17] Add bridge on top of VLAN if exists
+
+In VLAN case we should attach bridge only to the VLAN
+rather than to underlying NICs or bond
+
+Change-Id: I1c554853b5be9330933174da810b6d67c83eb96e
+Signed-off-by: Igor Lvovsky <ilvovsky at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5284
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+Tested-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5553
+Tested-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ vdsm/configNetwork.py | 11 +++++++----
+ 1 files changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py
+index 5353d0e..97aec7c 100755
+--- a/vdsm/configNetwork.py
++++ b/vdsm/configNetwork.py
+@@ -617,16 +617,19 @@ def addNetwork(network, vlan=None, bonding=None, nics=None, ipaddr=None, netmask
+ mtu=mtu, gateway=gateway, **options)
+ ifdown(network)
+
++ # For VLAN we should attach bridge only to the VLAN device
++ # rather than to underlying NICs or bond
+ brName = network if bridged else None
++ bridgeForNic = None if vlan else brName
+
+- # nics must be activated in the same order of boot time to expose the correct
+- # MAC address.
++ # NICs must be activated in the same order of boot time
++ # to expose the correct MAC address.
+ for nic in nicSort(nics):
+- configWriter.addNic(nic, bonding=bonding, bridge=brName,
++ configWriter.addNic(nic, bonding=bonding, bridge=bridgeForNic,
+ mtu=max(prevmtu, mtu))
+ ifup(nic)
+ if bonding:
+- configWriter.addBonding(bonding, bridge=brName,
++ configWriter.addBonding(bonding, bridge=bridgeForNic,
+ bondingOptions=bondingOptions,
+ mtu=max(prevmtu, mtu))
+ ifup(bonding)
+--
+1.7.1
+
diff --git a/0012-BZ-830485-Add-netConfigDirty-bit-to-getVdsCaps-repor.patch b/0012-BZ-830485-Add-netConfigDirty-bit-to-getVdsCaps-repor.patch
new file mode 100644
index 0000000..2f2ae71
--- /dev/null
+++ b/0012-BZ-830485-Add-netConfigDirty-bit-to-getVdsCaps-repor.patch
@@ -0,0 +1,30 @@
+From b5198d7ea6325374ad166043cf8597a148870a14 Mon Sep 17 00:00:00 2001
+From: Igor Lvovsky <ilvovsky at redhat.com>
+Date: Mon, 11 Jun 2012 19:37:58 +0300
+Subject: [PATCH 12/17] BZ#830485 - Add netConfigDirty bit to getVdsCaps report
+
+Change-Id: Iba641a74d33157186ddc6ceb6196b531953c9c8b
+Signed-off-by: Igor Lvovsky <ilvovsky at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5257
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5554
+Tested-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ vdsm/API.py | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/vdsm/API.py b/vdsm/API.py
+index 70034aa..abb3510 100644
+--- a/vdsm/API.py
++++ b/vdsm/API.py
+@@ -1073,6 +1073,7 @@ class Global(object):
+ Report host capabilities.
+ """
+ c = caps.get()
++ c['netConfigDirty'] = str(self._cif._netConfigDirty)
+
+ return {'status': doneCode, 'info': c}
+
+--
+1.7.1
+
diff --git a/0013-remove-flag-skipLibvirt.patch b/0013-remove-flag-skipLibvirt.patch
new file mode 100644
index 0000000..5d9e8b7
--- /dev/null
+++ b/0013-remove-flag-skipLibvirt.patch
@@ -0,0 +1,132 @@
+From 325aa66a2c32a6889f199628f2aedfaba742cb00 Mon Sep 17 00:00:00 2001
+From: Douglas Schilling Landgraf <dougsland at redhat.com>
+Date: Wed, 13 Jun 2012 17:44:16 -0400
+Subject: [PATCH 13/17] remove flag skipLibvirt
+
+Currently, VDSM manage networks by it's own and uses libvirt to store the net definitions, not requiring any additional
+flag as skipLibvirt. This patch will remove completely skipLibvirt flag.
+
+Change-Id: Id87c89f04912976797d629344238749a8562382b
+Signed-off-by: Douglas Schilling Landgraf <dougsland at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5262
+Reviewed-by: Shu Ming <shuming at linux.vnet.ibm.com>
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+Tested-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5555
+Tested-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ vdsm/configNetwork.py | 29 ++++++++++-------------------
+ vdsm_reg/deployUtil.py.in | 5 ++---
+ 2 files changed, 12 insertions(+), 22 deletions(-)
+
+diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py
+index 97aec7c..effb279 100755
+--- a/vdsm/configNetwork.py
++++ b/vdsm/configNetwork.py
+@@ -238,8 +238,7 @@ class ConfigWriter(object):
+ s += 'NM_CONTROLLED=no\n'
+ BLACKLIST = ['TYPE', 'NAME', 'DEVICE', 'bondingOptions',
+ 'force', 'blockingdhcp',
+- 'connectivityCheck', 'connectivityTimeout',
+- 'skipLibvirt']
++ 'connectivityCheck', 'connectivityTimeout']
+ 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]))
+@@ -493,7 +492,7 @@ def validateVlanId(vlan):
+
+
+ def _addNetworkValidation(_netinfo, bridge, vlan, bonding, nics, ipaddr, netmask, gateway,
+- bondingOptions, bridged=True, skipLibvirt=False):
++ bondingOptions, bridged=True):
+ if (vlan or bonding) and not nics:
+ raise ConfigNetworkError(ne.ERR_BAD_PARAMS, 'vlan/bonding definition requires nics. got: %r'%(nics,))
+
+@@ -502,12 +501,9 @@ def _addNetworkValidation(_netinfo, bridge, vlan, bonding, nics, ipaddr, netmask
+ validateBridgeName(bridge)
+ if bridge in _netinfo.networks:
+ raise ConfigNetworkError(ne.ERR_USED_BRIDGE, 'Bridge already exists')
+- elif not skipLibvirt:
++
+ if bridge in _netinfo.getBridgelessNetworks():
+ raise ConfigNetworkError(ne.ERR_USED_BRIDGE, 'network already exists')
+- else:
+- raise ConfigNetworkError(ne.ERR_BAD_PARAMS,
+- 'bridgeless network can not be added when skip libvirt')
+
+ # vlan
+ if vlan:
+@@ -576,7 +572,6 @@ def addNetwork(network, vlan=None, bonding=None, nics=None, ipaddr=None, netmask
+ gateway=None, force=False, configWriter=None, bondingOptions=None, bridged=True, **options):
+ nics = nics or ()
+ _netinfo = NetInfo()
+- skipLibvirt = utils.tobool(options.get('skipLibvirt', False))
+ bridged = utils.tobool(bridged)
+
+ if mtu:
+@@ -588,7 +583,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, skipLibvirt=skipLibvirt)
++ bridged=bridged)
+
+ logging.info("Adding network %s with vlan=%s, bonding=%s, nics=%s,"
+ " bondingOptions=%s, mtu=%s, bridged=%s, options=%s",
+@@ -650,8 +645,7 @@ def addNetwork(network, vlan=None, bonding=None, nics=None, ipaddr=None, netmask
+ ifup(network)
+
+ # add libvirt network
+- if not skipLibvirt:
+- createLibvirtNetwork(network, bridged, iface)
++ createLibvirtNetwork(network, bridged, iface)
+
+ def createLibvirtNetwork(network, bridged=True, iface=None):
+ conn = libvirtconnection.get()
+@@ -737,15 +731,12 @@ def delNetwork(network, vlan=None, bonding=None, nics=None, force=False,
+
+ validateBridgeName(network)
+
+- if not utils.tobool(options.get('skipLibvirt', False)):
+- if network not in _netinfo.networks:
+- raise ConfigNetworkError(ne.ERR_BAD_BRIDGE,
+- "Cannot delete network %r: It doesn't exist" % network)
++ if network not in _netinfo.networks:
++ raise ConfigNetworkError(ne.ERR_BAD_BRIDGE,
++ "Cannot delete network %r: It doesn't exist" % network)
+
+- nics, vlan, bonding = _netinfo.getNicsVlanAndBondingForNetwork(network)
+- bridged = _netinfo.networks[network]['bridged']
+- else:
+- bridged = True
++ nics, vlan, bonding = _netinfo.getNicsVlanAndBondingForNetwork(network)
++ bridged = _netinfo.networks[network]['bridged']
+
+ logging.info("Removing network %s with vlan=%s, bonding=%s, nics=%s,"
+ "options=%s" % (network, vlan, bonding, nics, options))
+diff --git a/vdsm_reg/deployUtil.py.in b/vdsm_reg/deployUtil.py.in
+index 1474196..2f240cc 100644
+--- a/vdsm_reg/deployUtil.py.in
++++ b/vdsm_reg/deployUtil.py.in
+@@ -894,7 +894,7 @@ def makeBridge(vdcName, vdsmDir):
+ #Delete existing bridge in oVirt
+ if fReturn and fIsOvirt:
+ try:
+- out, err, ret = _logExec([os.path.join(vdsmDir, SCRIPT_NAME_DEL), mgtBridge, vlan, bonding, nic] + ['skipLibvirt=True'])
++ out, err, ret = _logExec([os.path.join(vdsmDir, SCRIPT_NAME_DEL), mgtBridge, vlan, bonding, nic])
+ if ret:
+ if ret == 17: #ERR_BAD_BRIDGE
+ logging.debug("makeBridge Ignoring error of del existing bridge. out=" + out + "\nerr=" + str(err) + "\nret=" + str(ret))
+@@ -909,8 +909,7 @@ def makeBridge(vdcName, vdsmDir):
+ if fReturn:
+ try:
+ lstBridgeOptions.append('blockingdhcp=true')
+- out, err, ret = _logExec([os.path.join(vdsmDir, SCRIPT_NAME_ADD) , MGT_BRIDGE_NAME, vlan, bonding, nic] + lstBridgeOptions
+- + ['skipLibvirt=True'])
++ out, err, ret = _logExec([os.path.join(vdsmDir, SCRIPT_NAME_ADD) , MGT_BRIDGE_NAME, vlan, bonding, nic] + lstBridgeOptions)
+ if ret:
+ fReturn = False
+ logging.debug("makeBridge Failed to add " + MGT_BRIDGE_NAME + " bridge out=" + out + "\nerr=" + str(err) + "\nret=" + str(ret))
+--
+1.7.1
+
diff --git a/0014-BZ-826873-Allow-to-change-bond-without-network-attac.patch b/0014-BZ-826873-Allow-to-change-bond-without-network-attac.patch
new file mode 100644
index 0000000..b091f0a
--- /dev/null
+++ b/0014-BZ-826873-Allow-to-change-bond-without-network-attac.patch
@@ -0,0 +1,140 @@
+From ca7a6b1244f7a400bf5dc51a5d59662e5602534b Mon Sep 17 00:00:00 2001
+From: Igor Lvovsky <ilvovsky at redhat.com>
+Date: Wed, 13 Jun 2012 12:18:02 +0300
+Subject: [PATCH 14/17] BZ#826873 - Allow to change bond without network attached to it
+
+Change-Id: I3770017d8e633ccf5f9cf9b41a93df57229c443e
+Signed-off-by: Igor Lvovsky <ilvovsky at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5312
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5556
+Tested-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ vdsm/configNetwork.py | 64 ++++++++++++++++++++++++++++++++++++++++++++++++-
+ vdsm/netinfo.py | 4 +++
+ 2 files changed, 67 insertions(+), 1 deletions(-)
+
+diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py
+index effb279..fce3e71 100755
+--- a/vdsm/configNetwork.py
++++ b/vdsm/configNetwork.py
+@@ -958,6 +958,52 @@ def _validateNetworkSetup(networks={}, bondings={}, explicitBonding=False):
+ "Setup attached more than one network to bonding %s, some of which aren't vlans"%(bonding))
+
+
++def _editBondings(bondings, configWriter):
++ """ Add/Edit bond interface """
++ logger = logging.getLogger("_editBondings")
++
++ _netinfo = NetInfo()
++
++ for bond, bondAttrs in bondings.iteritems():
++ logger.debug("Creating/Editing bond %s with attributes %s",
++ bond, bondAttrs)
++ if bond in _netinfo.bondings:
++ ifdown(bond)
++ # Take down all bond's NICs.
++ for nic in _netinfo.getNicsForBonding(bond):
++ ifdown(nic)
++ configWriter.removeNic(nic)
++
++ # NICs must be activated in the same order of boot time
++ # to expose the correct MAC address.
++ for nic in nicSort(bondAttrs['nics']):
++ configWriter.addNic(nic, bonding=bond)
++ ifup(nic)
++
++ configWriter.addBonding(bond,
++ bondingOptions=bondAttrs.get('options', None))
++ ifup(bond)
++
++def _removeBondings(bondings, configWriter):
++ """ Add/Edit bond interface """
++ logger = logging.getLogger("_removeBondings")
++
++ _netinfo = NetInfo()
++
++ for bond, bondAttrs in bondings.items():
++ if 'remove' in bondAttrs:
++ nics = _netinfo.getNicsForBonding(bond)
++ logger.debug("Removing bond %r with nics = %s", bond, nics)
++ ifdown(bond)
++ configWriter.removeBonding(bond)
++
++ for nic in nics:
++ ifdown(nic)
++ configWriter.removeNic(nic)
++
++ del bondings[bond]
++
++
+ def setupNetworks(networks={}, bondings={}, **options):
+ """Add/Edit/Remove configuration for networks and bondings.
+
+@@ -1009,7 +1055,6 @@ def setupNetworks(networks={}, bondings={}, **options):
+ _netinfo = NetInfo()
+ configWriter = ConfigWriter()
+ networksAdded = []
+- #bondingNetworks = {} # Reminder TODO
+
+ logger.debug("Setting up network according to configuration: "
+ "networks:%r, bondings:%r, options:%r" % (networks,
+@@ -1031,16 +1076,21 @@ def setupNetworks(networks={}, bondings={}, **options):
+ delNetwork(network, configWriter=configWriter, force=force)
+ del networks[network]
+
++ handledBonds = set()
+ for network, networkAttrs in networks.items():
+ if network in _netinfo.networks:
+ delNetwork(network, configWriter=configWriter, force=force)
+ else:
+ networksAdded.append(network)
++
+ d = dict(networkAttrs)
+ if 'bonding' in d:
+ d['nics'] = bondings[d['bonding']]['nics']
+ d['bondingOptions'] = bondings[d['bonding']].get('options',
+ None)
++ # Don't remove bondX from the bonding list here,
++ # because it may be in use for other networks
++ handledBonds.add(d['bonding'])
+ else:
+ d['nics'] = [d.pop('nic')]
+ d['force'] = force
+@@ -1048,6 +1098,18 @@ def setupNetworks(networks={}, bondings={}, **options):
+ logger.debug("Adding network %r" % network)
+ addNetwork(network, configWriter=configWriter, **d)
+
++ # Do not handle a bonding device twice.
++ # We already handled it before during addNetwork.
++ for bond in handledBonds:
++ del bondings[bond]
++
++ # We are now left with bondings whose network was not mentioned
++ # Remove bonds with 'remove' attribute
++ _removeBondings(bondings, configWriter)
++
++ # Check whether bonds should be resized
++ _editBondings(bondings, configWriter)
++
+ if utils.tobool(options.get('connectivityCheck', True)):
+ logger.debug('Checking connectivity...')
+ if not clientSeen(int(options.get('connectivityTimeout',
+diff --git a/vdsm/netinfo.py b/vdsm/netinfo.py
+index 05f8323..536b4c7 100644
+--- a/vdsm/netinfo.py
++++ b/vdsm/netinfo.py
+@@ -339,6 +339,10 @@ class NetInfo(object):
+ if nic in bdict['slaves']:
+ yield b
+
++ def getNicsForBonding(self, bond):
++ bondAttrs = self.bondings[bond]
++ return bondAttrs['slaves']
++
+ def getBondingForNic(self, nic):
+ bondings = list(self.getBondingsForNic(nic))
+ if bondings:
+--
+1.7.1
+
diff --git a/0015-BZ-830486-Allow-to-change-network-according-the-diff.patch b/0015-BZ-830486-Allow-to-change-network-according-the-diff.patch
new file mode 100644
index 0000000..3fed28a
--- /dev/null
+++ b/0015-BZ-830486-Allow-to-change-network-according-the-diff.patch
@@ -0,0 +1,47 @@
+From d3c91bc345f27a78d17c836f04fe13f5d1be6856 Mon Sep 17 00:00:00 2001
+From: Igor Lvovsky <ilvovsky at redhat.com>
+Date: Sun, 10 Jun 2012 10:40:48 +0300
+Subject: [PATCH 15/17] BZ#830486 - Allow to change network according the diffs from previous state
+
+We may not receive any information about the bonding device if it is unchanged.
+In this case vdsm shouldn't check the bond information of this network.
+
+Change-Id: I1ece66a351576d5789a8968ccda9e67f423b860c
+Signed-off-by: Igor Lvovsky <ilvovsky at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5211
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5557
+Tested-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ vdsm/configNetwork.py | 15 +++++++++------
+ 1 files changed, 9 insertions(+), 6 deletions(-)
+
+diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py
+index fce3e71..ab07da6 100755
+--- a/vdsm/configNetwork.py
++++ b/vdsm/configNetwork.py
+@@ -1085,12 +1085,15 @@ def setupNetworks(networks={}, bondings={}, **options):
+
+ d = dict(networkAttrs)
+ if 'bonding' in d:
+- d['nics'] = bondings[d['bonding']]['nics']
+- d['bondingOptions'] = bondings[d['bonding']].get('options',
+- None)
+- # Don't remove bondX from the bonding list here,
+- # because it may be in use for other networks
+- handledBonds.add(d['bonding'])
++ # we may not receive any information
++ # about the bonding device if it is unchanged
++ if bondings:
++ d['nics'] = bondings[d['bonding']]['nics']
++ d['bondingOptions'] = bondings[d['bonding']].get('options',
++ None)
++ # Don't remove bondX from the bonding list here,
++ # because it may be in use for other networks
++ handledBonds.add(d['bonding'])
+ else:
+ d['nics'] = [d.pop('nic')]
+ d['force'] = force
+--
+1.7.1
+
diff --git a/0016-BZ-826467-Allow-to-remove-bond-and-attach-network-to.patch b/0016-BZ-826467-Allow-to-remove-bond-and-attach-network-to.patch
new file mode 100644
index 0000000..8ca276b
--- /dev/null
+++ b/0016-BZ-826467-Allow-to-remove-bond-and-attach-network-to.patch
@@ -0,0 +1,49 @@
+From 990be7c6e07646fb176d90f679baa691b28d279f Mon Sep 17 00:00:00 2001
+From: Igor Lvovsky <ilvovsky at redhat.com>
+Date: Wed, 13 Jun 2012 16:10:58 +0300
+Subject: [PATCH 16/17] BZ#826467 - Allow to remove bond and attach network to NIC
+
+Change-Id: I0be3dafe6a0a65a09bf268c8c8c6ee6fd7ba1084
+Signed-off-by: Igor Lvovsky <ilvovsky at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5323
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5558
+Tested-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ vdsm/configNetwork.py | 14 ++++++--------
+ 1 files changed, 6 insertions(+), 8 deletions(-)
+
+diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py
+index ab07da6..0df6c8f 100755
+--- a/vdsm/configNetwork.py
++++ b/vdsm/configNetwork.py
+@@ -1069,20 +1069,18 @@ def setupNetworks(networks={}, bondings={}, **options):
+
+ logger.debug("Applying...")
+ try:
+- # Remove networks with 'remove' attribute
+- for network, networkAttrs in networks.items():
+- if 'remove' in networkAttrs:
+- logger.debug("Removing network %r" % network)
+- delNetwork(network, configWriter=configWriter, force=force)
+- del networks[network]
+-
+- handledBonds = set()
++ # Remove edited networks and networks with 'remove' attribute
+ for network, networkAttrs in networks.items():
+ if network in _netinfo.networks:
++ logger.debug("Removing network %r" % network)
+ delNetwork(network, configWriter=configWriter, force=force)
++ if 'remove' in networkAttrs:
++ del networks[network]
+ else:
+ networksAdded.append(network)
+
++ handledBonds = set()
++ for network, networkAttrs in networks.iteritems():
+ d = dict(networkAttrs)
+ if 'bonding' in d:
+ # we may not receive any information
+--
+1.7.1
+
diff --git a/0017-Related-to-BZ-826873-Allow-to-create-bond-without-ne.patch b/0017-Related-to-BZ-826873-Allow-to-create-bond-without-ne.patch
new file mode 100644
index 0000000..454538b
--- /dev/null
+++ b/0017-Related-to-BZ-826873-Allow-to-create-bond-without-ne.patch
@@ -0,0 +1,31 @@
+From 0329fec019726434a3313cc2acbd5f23480f365b Mon Sep 17 00:00:00 2001
+From: Igor Lvovsky <ilvovsky at redhat.com>
+Date: Tue, 19 Jun 2012 17:32:55 +0300
+Subject: [PATCH 17/17] Related to BZ#826873 - Allow to create bond without network
+
+Change-Id: Ic4bfababbc9b81d921b2e26be9e70d07aee7124e
+Signed-off-by: Igor Lvovsky <ilvovsky at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5487
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5559
+Tested-by: Federico Simoncelli <fsimonce at redhat.com>
+---
+ vdsm/configNetwork.py | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py
+index 0df6c8f..8b831d6 100755
+--- a/vdsm/configNetwork.py
++++ b/vdsm/configNetwork.py
+@@ -950,7 +950,7 @@ def _validateNetworkSetup(networks={}, bondings={}, explicitBonding=False):
+ "Setup attached more than one network to nic %s, some of which aren't vlans"%(nic))
+
+ for bonding, bondingAttrs in bondings.iteritems():
+- networks = bondingAttrs['_networks']
++ networks = bondingAttrs.get('_networks', {})
+ if len(networks) > 1:
+ for network, networkAttrs in networks.iteritems():
+ if not networkAttrs.get('vlan', None):
+--
+1.7.1
+
diff --git a/0018-BZ-832577-node-can-t-be-approved.patch b/0018-BZ-832577-node-can-t-be-approved.patch
new file mode 100644
index 0000000..1702ee5
--- /dev/null
+++ b/0018-BZ-832577-node-can-t-be-approved.patch
@@ -0,0 +1,38 @@
+From 013b2208f20d1b7ce0b894fc54a41980c0afc62f Mon Sep 17 00:00:00 2001
+From: Douglas Schilling Landgraf <dougsland at redhat.com>
+Date: Wed, 20 Jun 2012 15:48:03 -0400
+Subject: [PATCH 18/19] BZ#832577: node can't be approved
+
+Because of ovirt-node's readonly filesystem, directory creation at runtime has to be handled carefully.
+/rhev/data-center used to be created by the vdsm rpm when it is installed.
+It's now listed in vdsm.spec as %ghost which means it is *not* laid down by default.
+At runtime, it fails to be created because of the read-only filesystem.
+
+Regression introduced by commit ee1e68d3416d8fd728df75c0a41dd3db48f9138d
+Patch provided by: Mike Burns <mburns at redhat.com>
+
+Change-Id: I3818661c886118d34620e5308434e57bad92913f
+Signed-off-by: Douglas Schilling Landgraf <dougsland at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5567
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+Tested-by: Dan Kenigsberg <danken at redhat.com>
+---
+ vdsm.spec.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/vdsm.spec.in b/vdsm.spec.in
+index c567e65..3fd404e 100644
+--- a/vdsm.spec.in
++++ b/vdsm.spec.in
+@@ -500,7 +500,7 @@ exit 0
+ /lib/systemd/systemd-vdsmd
+ %{_unitdir}/vdsmd.service
+ %endif
+-%ghost %dir %attr(-, %{vdsm_user}, %{vdsm_group}) @vdsmrepo@
++%dir %attr(-, %{vdsm_user}, %{vdsm_group}) @vdsmrepo@
+ %ghost %dir %attr(-, %{vdsm_user}, %{vdsm_group}) @vdsmrepo@/hsm-tasks
+ %ghost %dir %attr(-, %{vdsm_user}, %{vdsm_group}) @vdsmrepo@/mnt
+ %dir %{_libexecdir}/%{vdsm_name}
+--
+1.7.10.2
+
diff --git a/0019-BZ-824298-fix-typo-in-keyword-argument-exc_info.patch b/0019-BZ-824298-fix-typo-in-keyword-argument-exc_info.patch
new file mode 100644
index 0000000..60aa0ea
--- /dev/null
+++ b/0019-BZ-824298-fix-typo-in-keyword-argument-exc_info.patch
@@ -0,0 +1,57 @@
+From 5982cb826a56ee322c7e5d6fbee479ff5b996561 Mon Sep 17 00:00:00 2001
+From: Dan Kenigsberg <danken at redhat.com>
+Date: Sat, 23 Jun 2012 18:46:51 +0300
+Subject: [PATCH 19/19] BZ#824298 fix typo in keyword argument exc_info
+
+Change-Id: Iff2ba114298bc1223ae4969f5da0eb5a5ce8672e
+Signed-off-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5617
+Reviewed-by: Igor Lvovsky <ilvovsky at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/5628
+---
+ vdsm/configNetwork.py | 4 ++--
+ vdsm/storage/image.py | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py
+index 8b831d6..c535499 100755
+--- a/vdsm/configNetwork.py
++++ b/vdsm/configNetwork.py
+@@ -1,4 +1,4 @@
+-# Copyright 2011 Red Hat, Inc.
++# Copyright 2011-2012 Red Hat, Inc.
+ #
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -673,7 +673,7 @@ def removeLibvirtNetwork(network, log=True):
+ except libvirt.libvirtError:
+ if log:
+ logging.debug('failed to remove libvirt network %s', netName,
+- exec_info=True)
++ exc_info=True)
+
+ def assertBridgeClean(bridge, vlan, bonding, nics):
+ brifs = os.listdir('/sys/class/net/%s/brif/' % bridge)
+diff --git a/vdsm/storage/image.py b/vdsm/storage/image.py
+index 03c94dc..a868568 100644
+--- a/vdsm/storage/image.py
++++ b/vdsm/storage/image.py
+@@ -1,5 +1,5 @@
+ #
+-# Copyright 2009-2011 Red Hat, Inc.
++# Copyright 2009-2012 Red Hat, Inc.
+ #
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -676,7 +676,7 @@ class Image:
+ raise
+ except Exception, e:
+ self.__cleanupMultimove(sdUUID=dstSdUUID, imgList=cleanup_candidates, postZero=postZero)
+- self.log.error(e, exec_info=True)
++ self.log.error(e, exc_info=True)
+ raise se.CopyImageError("image=%s, src domain=%s, dst domain=%s: msg %s" % (imgUUID, srcSdUUID, dstSdUUID, str(e)))
+
+ cleanup_candidates.append(imgUUID)
+--
+1.7.10.2
+
diff --git a/sources b/sources
index 45fc83a..87c07ec 100644
--- a/sources
+++ b/sources
@@ -1,18 +1 @@
e8ab5eccdea0b4a4da2e812174971393 vdsm-4.10.0.tar.gz
-271a4bf061238b0485f588e5da989c6a 0001-deployUtil.yumFind-rename-and-simplify-semantics.patch
-1f82b6892731e7be936db6ec695caeef 0002-drop-deployUtil.yumSearch.patch
-6e51c8e0bd728f180bccf78ad7e4b761 0003-deployUtil.yumSearchVersion-compare-versions-sanely.patch
-3eb5b34836f09e3bea17605665ddd238 0004-Iterates-over-delete-candidates-networks-only-once.patch
-a34b83250137d392cc88f3cf8bb044ec 0005-options-translation-in-setupNetworks-is-not-relevant.patch
-ae0b01009e5cd7bc0bbf168e61948406 0006-Minor-optimization-for-delNetwork.patch
-e3d365f2fdae5b48e0bbb7bc9d4792b7 0007-Don-t-ignore-bridgeless-networks-in-ifaceUsers.patch
-7f7465f7dcd480890195e7dc550e7901 0008-Minor-optimization-for-addNetwork.patch
-8f0c154cbaef660dad9c55a1cffa03b9 0009-Use-already-known-iface-in-addNetwork.patch
-a02ec209a8763ca8f862f8787786b822 0010-Use-proper-MTU-on-bonding-when-add-network.patch
-443f8204853b13663b96adfe8970046c 0011-Add-bridge-on-top-of-VLAN-if-exists.patch
-71deacdfda0e338e043614274c5f55e4 0012-BZ-830485-Add-netConfigDirty-bit-to-getVdsCaps-repor.patch
-36d6ef004846bab4730dfd34a0d50de2 0013-remove-flag-skipLibvirt.patch
-3a06c6d62ca1f5bc142c8241e2aa3eb3 0014-BZ-826873-Allow-to-change-bond-without-network-attac.patch
-1926fd68e471424d3130a894c6bea6f1 0015-BZ-830486-Allow-to-change-network-according-the-diff.patch
-87f4dc171371ee591c45838479661355 0016-BZ-826467-Allow-to-remove-bond-and-attach-network-to.patch
-5221fe91ae85f29d763746b36126393b 0017-Related-to-BZ-826873-Allow-to-create-bond-without-ne.patch
diff --git a/vdsm.spec b/vdsm.spec
index 0f928ac..27e77b1 100644
--- a/vdsm.spec
+++ b/vdsm.spec
@@ -20,7 +20,7 @@
Name: %{vdsm_name}
Version: 4.10.0
-Release: 2%{?vdsm_relvtag}%{?dist}%{?extra_release}
+Release: 3%{?vdsm_relvtag}%{?dist}%{?extra_release}
Summary: Virtual Desktop Server Manager
Group: Applications/System
@@ -52,6 +52,8 @@ Patch13: 0014-BZ-826873-Allow-to-change-bond-without-network-attac.patch
Patch14: 0015-BZ-830486-Allow-to-change-network-according-the-diff.patch
Patch15: 0016-BZ-826467-Allow-to-remove-bond-and-attach-network-to.patch
Patch16: 0017-Related-to-BZ-826873-Allow-to-create-bond-without-ne.patch
+Patch17: 0018-BZ-832577-node-can-t-be-approved.patch
+Patch18: 0019-BZ-824298-fix-typo-in-keyword-argument-exc_info.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -360,6 +362,8 @@ Gluster plugin enables VDSM to serve Gluster functionalities.
%patch14 -p1 -b .patch14
%patch15 -p1 -b .patch15
%patch16 -p1 -b .patch16
+%patch17 -p1 -b .patch17
+%patch18 -p1 -b .patch18
%build
%configure %{?with_hooks:--enable-hooks}
@@ -550,7 +554,7 @@ exit 0
/lib/systemd/systemd-vdsmd
%{_unitdir}/vdsmd.service
%endif
-%ghost %dir %attr(-, %{vdsm_user}, %{vdsm_group}) /rhev/data-center
+%dir %attr(-, %{vdsm_user}, %{vdsm_group}) /rhev/data-center
%ghost %dir %attr(-, %{vdsm_user}, %{vdsm_group}) /rhev/data-center/hsm-tasks
%ghost %dir %attr(-, %{vdsm_user}, %{vdsm_group}) /rhev/data-center/mnt
%dir %{_libexecdir}/%{vdsm_name}
@@ -901,6 +905,10 @@ exit 0
%{_datadir}/%{vdsm_name}/gluster/hostname.py*
%changelog
+* Tue Jun 26 2012 Federico Simoncelli <fsimonce at redhat.com> 4.10.0-3.fc17
+- BZ#832577: node can't be approved
+- BZ#824298 fix typo in keyword argument exc_info
+
* Wed Jun 20 2012 Federico Simoncelli <fsimonce at redhat.com> 4.10.0-2.fc17
- deployUtil.yumFind: rename and simplify semantics
- drop deployUtil.yumSearch
More information about the scm-commits
mailing list