From 6581ca8abd70837a0020e61439103120e59f56fd Mon Sep 17 00:00:00 2001 From: Federico Simoncelli Date: Jul 17 2012 10:52:38 +0000 Subject: update to vdsm-4.10.0-5 - configNet: atomicBackup: remove new files upon restore - configNet: clear up atomicBackup arg - Remove redundant 'explicitBonding' parameter from setupNetworks - BZ#837054 - Do not detach network from the bond during bond resize - BZ#836954 - Allow to break bond and create a new network on its interface in single action. - BZ#837443: remove bridge before add VDSM bridge - BZ#837443: removeVlan() drop/remove interface - configNetwork: fix NetInfo call - BZ#837443: replace the netinfo import - BZ#837443: removeBridge() drop/remove interface - ovirt_functions: fix elif statement - BZ#838097 _addNetworkValidation: do not explode if STP/DNS1 option passed - BZ#832199: move selinux from init to spec - bump libvirt version to fix readonly lease unsupported issue Signed-off-by: Federico Simoncelli --- diff --git a/0027-bump-libvirt-version-to-fix-readonly-lease-unsupport.patch b/0027-bump-libvirt-version-to-fix-readonly-lease-unsupport.patch new file mode 100644 index 0000000..17e09ab --- /dev/null +++ b/0027-bump-libvirt-version-to-fix-readonly-lease-unsupport.patch @@ -0,0 +1,32 @@ +From ada1caae80ef463d511395ccbd0cb773b3e8b8b6 Mon Sep 17 00:00:00 2001 +From: lvroyce +Date: Fri, 29 Jun 2012 13:13:52 +0800 +Subject: [PATCH 27/40] bump libvirt version to fix readonly lease unsupported + issue + +Change-Id: I116f3ce07fff8075902a862e0259198232efd2f4 +Signed-off-by: Royce Lv +Reviewed-on: http://gerrit.ovirt.org/5787 +Reviewed-by: Dan Kenigsberg +Tested-by: Dan Kenigsberg +--- + vdsm.spec.in | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/vdsm.spec.in b/vdsm.spec.in +index 3fd404e..88fe373 100644 +--- a/vdsm.spec.in ++++ b/vdsm.spec.in +@@ -63,7 +63,8 @@ Requires: e2fsprogs >= 1.41.12-11 + Requires: python >= 2.7.3 + Requires: qemu-kvm >= 2:0.15.0-4 + Requires: qemu-img >= 2:0.15.0-4 +-Requires: libvirt >= 0.9.10 ++#readonly lease ignored by default on 0.9.11.4-3 ++Requires: libvirt >= 0.9.11.4-3 + Requires: libvirt-python, libvirt-lock-sanlock + Requires: iscsi-initiator-utils >= 6.2.0.872-14 + Requires: device-mapper-multipath >= 0.4.9-18 +-- +1.7.7.6 + diff --git a/0028-BZ-832199-move-selinux-from-init-to-spec.patch b/0028-BZ-832199-move-selinux-from-init-to-spec.patch new file mode 100644 index 0000000..c133b68 --- /dev/null +++ b/0028-BZ-832199-move-selinux-from-init-to-spec.patch @@ -0,0 +1,89 @@ +From 16ad84b47fac0e325073e1b08e99a364c7850699 Mon Sep 17 00:00:00 2001 +From: Douglas Schilling Landgraf +Date: Fri, 6 Jul 2012 09:40:17 -0400 +Subject: [PATCH 28/40] BZ#832199: move selinux from init to spec + +To reduce the time during the init, transferring all the selinux +set to spec instead use it during the vdsm init. + +Change-Id: Id515ddb96cbfb4f3a936336b3f7e261658df662a +Signed-off-by: Douglas Schilling Landgraf +Reviewed-on: http://gerrit.ovirt.org/5614 +Reviewed-by: Dan Kenigsberg +--- + vdsm.spec.in | 22 +++++++++++++++++++++- + vdsm/vdsmd.init.in | 8 -------- + 2 files changed, 21 insertions(+), 9 deletions(-) + +diff --git a/vdsm.spec.in b/vdsm.spec.in +index 88fe373..6be7da4 100644 +--- a/vdsm.spec.in ++++ b/vdsm.spec.in +@@ -78,6 +78,7 @@ Requires: sos + Requires: tree + Requires: dosfstools + Requires: policycoreutils-python ++Requires(pre,preun): policycoreutils-python + Requires: libselinux-python + Requires: kernel >= 2.6.32-198 + Requires: %{name}-python = %{version}-%{release} +@@ -375,6 +376,23 @@ rm -rf %{buildroot} + /usr/sbin/usermod -a -G %{qemu_group},%{snlk_group} %{vdsm_user} + /usr/sbin/usermod -a -G %{qemu_group},%{vdsm_group} %{snlk_user} + ++# vdsm makes extensive use of nfs-exported images ++# The next lines will collect the default selinux behaviour for the booleans ++virtNFS=$(/usr/sbin/semanage boolean -l | /bin/grep virt_use_nfs | cut -d ',' -f 2) ++virtSANLOCK=$(/usr/sbin/semanage boolean -l | /bin/grep virt_use_sanlock | cut -d ',' -f 2) ++ ++if [[ "${virtNFS}" == *off* || "${virtSANLOCK}" == *off* ]]; then ++ /usr/sbin/semanage boolean -m -S targeted -F /dev/stdin << _EOF ++virt_use_nfs=1 ++virt_use_sanlock=1 ++_EOF ++fi ++ ++if /usr/sbin/selinuxenabled; then ++ /usr/sbin/setsebool virt_use_nfs on ++ /usr/sbin/setsebool virt_use_sanlock on ++fi ++ + %post + # update the vdsm "secret" password for libvirt + if [ -f /etc/pki/vdsm/keys/libvirt_password ]; then +@@ -415,10 +433,12 @@ then + + /usr/sbin/semanage boolean -m -S targeted -F /dev/stdin << _EOF + virt_use_nfs=0 ++virt_use_sanlock=0 + _EOF + +- if selinuxenabled; then ++ if /usr/sbin/selinuxenabled; then + /usr/sbin/setsebool virt_use_nfs off ++ /usr/sbin/setsebool virt_use_sanlock off + fi + + /usr/sbin/saslpasswd2 -p -a libvirt -d vdsm@rhevh +diff --git a/vdsm/vdsmd.init.in b/vdsm/vdsmd.init.in +index ac3bd08..dd6f3c6 100755 +--- a/vdsm/vdsmd.init.in ++++ b/vdsm/vdsmd.init.in +@@ -410,14 +410,6 @@ EOF + + ovirt_store_config "$lconf" "$qconf" "$ldconf" "$llogr" + +- # vdsm makes extensive use of nfs-exported images +- /usr/sbin/semanage boolean -m -S targeted -F /dev/stdin << _EOF +-virt_use_nfs=1 +-virt_use_sanlock=1 +-_EOF +- /usr/sbin/setsebool virt_use_nfs on +- /usr/sbin/setsebool virt_use_sanlock on +- + /sbin/initctl restart libvirtd 2>/dev/null || : + } + +-- +1.7.7.6 + diff --git a/0029-BZ-838097-_addNetworkValidation-do-not-explode-if-ST.patch b/0029-BZ-838097-_addNetworkValidation-do-not-explode-if-ST.patch new file mode 100644 index 0000000..41d95ee --- /dev/null +++ b/0029-BZ-838097-_addNetworkValidation-do-not-explode-if-ST.patch @@ -0,0 +1,34 @@ +From 34f080dd8b7456248ed2e2693030cf736e097606 Mon Sep 17 00:00:00 2001 +From: Dan Kenigsberg +Date: Tue, 3 Jul 2012 10:53:37 +0300 +Subject: [PATCH 29/40] BZ#838097 _addNetworkValidation: do not explode if + STP/DNS1 option passed + +http://gerrit.ovirt.org/5456 has started passing all optional parameters +to _addNetworkValidation, but no one is expecting them there. + +Change-Id: I071e6a7a53279c24d45ebec3858d9b0c0d6294ae +Signed-off-by: Dan Kenigsberg +Reviewed-on: http://gerrit.ovirt.org/5885 +Reviewed-by: Igor Lvovsky +Reviewed-on: http://gerrit.ovirt.org/6017 +--- + vdsm/configNetwork.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py +index af6c19d..961dd33 100755 +--- a/vdsm/configNetwork.py ++++ b/vdsm/configNetwork.py +@@ -494,7 +494,7 @@ def validateVlanId(vlan): + + def _addNetworkValidation(_netinfo, bridge, vlan, bonding, nics, ipaddr, + netmask, gateway, bondingOptions, bridged=True, +- implicitBonding=False): ++ implicitBonding=False, **options): + # 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 +-- +1.7.7.6 + diff --git a/0030-ovirt_functions-fix-elif-statement.patch b/0030-ovirt_functions-fix-elif-statement.patch new file mode 100644 index 0000000..4cc9980 --- /dev/null +++ b/0030-ovirt_functions-fix-elif-statement.patch @@ -0,0 +1,39 @@ +From fe88d1834032776638fc41c9fc96123923e1432a Mon Sep 17 00:00:00 2001 +From: Douglas Schilling Landgraf +Date: Mon, 9 Jul 2012 10:49:24 -0400 +Subject: [PATCH 30/40] ovirt_functions: fix elif statement + +Identify correctly the ovirt Node and fix the error message from vdsm-reg logs: + +[: /etc/ovirt-node-image-release: binary operator expected + +Change-Id: I4eae7e64361d148d60c50dbacd273de7a2490be2 +Signed-off-by: Douglas Schilling Landgraf +Reviewed-on: http://gerrit.ovirt.org/6072 +Reviewed-by: Dan Kenigsberg +--- + vdsm/ovirt_functions.sh | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/vdsm/ovirt_functions.sh b/vdsm/ovirt_functions.sh +index 84cf686..b1e3ef2 100644 +--- a/vdsm/ovirt_functions.sh ++++ b/vdsm/ovirt_functions.sh +@@ -9,10 +9,12 @@ + # + + function isOvirt() { ++ for f in /etc/ovirt-node-*-release; do ++ [ -f "$f" ] && return 0 ++ done ++ + if [ -f /etc/rhev-hypervisor-release ]; then + return 0 +- elif [ -f /etc/ovirt-node-*-release ]; then +- return 0 + else + return 1 + fi +-- +1.7.7.6 + diff --git a/0031-BZ-837443-removeBridge-drop-remove-interface.patch b/0031-BZ-837443-removeBridge-drop-remove-interface.patch new file mode 100644 index 0000000..df21615 --- /dev/null +++ b/0031-BZ-837443-removeBridge-drop-remove-interface.patch @@ -0,0 +1,44 @@ +From f1792cfb33bff5ef5c9a8c1f938ff92b00d192a8 Mon Sep 17 00:00:00 2001 +From: Douglas Schilling Landgraf +Date: Mon, 9 Jul 2012 17:20:35 -0400 +Subject: [PATCH 31/40] BZ#837443: removeBridge() drop/remove interface + +Move ifdown() and brctl delbr to removeBridge(). We need a generic +function to be called multiple times. For example, removing a bridge listed +or not listed in libvirt database. + +Change-Id: Iea798b2ddf6413b58dbfc3d8d11dc4bf54c592fc +Signed-off-by: Douglas Schilling Landgraf +Reviewed-on: http://gerrit.ovirt.org/5914 +Reviewed-by: Igor Lvovsky +Reviewed-by: Dan Kenigsberg +Reviewed-on: http://gerrit.ovirt.org/6204 +--- + vdsm/configNetwork.py | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py +index 961dd33..51471bc 100755 +--- a/vdsm/configNetwork.py ++++ b/vdsm/configNetwork.py +@@ -321,6 +321,8 @@ class ConfigWriter(object): + self._removeFile(self.NET_CONF_PREF + bonding) + + def removeBridge(self, bridge): ++ ifdown(bridge) ++ subprocess.call([constants.EXT_BRCTL, 'delbr', bridge]) + self._backup(self.NET_CONF_PREF + bridge) + self._removeFile(self.NET_CONF_PREF + bridge) + +@@ -775,8 +777,6 @@ def delNetwork(network, vlan=None, bonding=None, nics=None, force=False, + "delNetwork: bridge %s still exists" % network) + + if network and bridged: +- ifdown(network) +- subprocess.call([constants.EXT_BRCTL, 'delbr', network]) + configWriter.removeBridge(network) + + if vlan: +-- +1.7.7.6 + diff --git a/0032-BZ-837443-replace-the-netinfo-import.patch b/0032-BZ-837443-replace-the-netinfo-import.patch new file mode 100644 index 0000000..77acbcb --- /dev/null +++ b/0032-BZ-837443-replace-the-netinfo-import.patch @@ -0,0 +1,199 @@ +From a2e8aa85f270d5bd2390b07ac82710fa398c755b Mon Sep 17 00:00:00 2001 +From: Douglas Schilling Landgraf +Date: Thu, 12 Jul 2012 17:01:22 -0400 +Subject: [PATCH 32/40] BZ#837443: replace the netinfo import + +We will use functions like netinfo.bridges() to +verify if there is any bridge listed in the system +but not in the libvirt database. + +Change-Id: I76ac6f21267f9e2c26f032dbe0334aeaa59aa030 +Signed-off-by: Douglas Schilling Landgraf +Reviewed-on: http://gerrit.ovirt.org/6205 +Reviewed-by: Dan Kenigsberg +--- + vdsm/configNetwork.py | 42 +++++++++++++++++++++--------------------- + 1 files changed, 21 insertions(+), 21 deletions(-) + +diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py +index 51471bc..bddf71c 100755 +--- a/vdsm/configNetwork.py ++++ b/vdsm/configNetwork.py +@@ -33,7 +33,7 @@ from vdsm import constants + from vdsm import utils + import neterrors as ne + from vdsm import define +-from vdsm.netinfo import NetInfo, NET_CONF_DIR, NET_CONF_BACK_DIR, LIBVIRT_NET_PREFIX ++from vdsm import netinfo + from vdsm import libvirtconnection + + CONNECTIVITY_TIMEOUT_DEFAULT = 4 +@@ -84,7 +84,7 @@ def ifup(iface): + + def ifaceUsers(iface): + "Returns a list of entities using the interface" +- _netinfo = NetInfo() ++ _netinfo = netinfo.NetInfo() + users = set() + for n, ndict in _netinfo.networks.iteritems(): + if ndict['bridged'] and iface in ndict['ports']: +@@ -155,7 +155,7 @@ def nicSort(nics): + return [x + z for x, y, z in sorted(nics_list)] + + class ConfigWriter(object): +- NET_CONF_PREF = NET_CONF_DIR + 'ifcfg-' ++ NET_CONF_PREF = netinfo.NET_CONF_DIR + 'ifcfg-' + CONFFILE_HEADER = '# automatically generated by vdsm' + DELETED_HEADER = '# original file did not exist' + +@@ -168,7 +168,7 @@ class ConfigWriter(object): + + def _atomicBackup(self, filename): + """Backs up configuration to memory, for a later rollback in case of error.""" +- confFile = os.path.join(NET_CONF_DIR, filename) ++ confFile = os.path.join(netinfo.NET_CONF_DIR, filename) + if confFile not in self._backups: + try: + self._backups[confFile] = open(confFile).read() +@@ -201,7 +201,7 @@ class ConfigWriter(object): + logging.debug("unmounted %s using ovirt" % filename) + + (dummy, basename) = os.path.split(filename) +- backup = os.path.join(NET_CONF_BACK_DIR, basename) ++ backup = os.path.join(netinfo.NET_CONF_BACK_DIR, basename) + if os.path.exists(backup): + # original copy already backed up + return +@@ -209,9 +209,9 @@ class ConfigWriter(object): + vdsm_uid = pwd.getpwnam('vdsm').pw_uid + + # make directory (if it doesn't exist) and assign it to vdsm +- if not os.path.exists(NET_CONF_BACK_DIR): +- os.mkdir(NET_CONF_BACK_DIR) +- os.chown(NET_CONF_BACK_DIR, vdsm_uid, 0) ++ if not os.path.exists(netinfo.NET_CONF_BACK_DIR): ++ os.mkdir(netinfo.NET_CONF_BACK_DIR) ++ os.chown(netinfo.NET_CONF_BACK_DIR, vdsm_uid, 0) + + if os.path.exists(filename): + shutil.copy2(filename, backup) +@@ -285,7 +285,7 @@ class ConfigWriter(object): + "Based on addNetwork" + conffile = self.NET_CONF_PREF + nic + self._backup(conffile) +- _netinfo = NetInfo() ++ _netinfo = netinfo.NetInfo() + hwaddr = _netinfo.nics[nic].get('permhwaddr') or \ + _netinfo.nics[nic]['hwaddr'] + with open(conffile, 'w') as f: +@@ -413,7 +413,7 @@ class ConfigWriter(object): + Or added a new value, + also set the bridge to the higher value if its under vlans or bond + """ +- _netinfo = NetInfo() ++ _netinfo = netinfo.NetInfo() + cf = self.NET_CONF_PREF + bridge + currmtu = self._getConfigValue(cf, 'MTU') + if currmtu is None: +@@ -581,7 +581,7 @@ def _addNetworkValidation(_netinfo, bridge, vlan, bonding, nics, ipaddr, + def addNetwork(network, vlan=None, bonding=None, nics=None, ipaddr=None, netmask=None, mtu=None, + gateway=None, force=False, configWriter=None, bondingOptions=None, bridged=True, **options): + nics = nics or () +- _netinfo = NetInfo() ++ _netinfo = netinfo.NetInfo() + bridged = utils.tobool(bridged) + + if mtu: +@@ -659,7 +659,7 @@ def addNetwork(network, vlan=None, bonding=None, nics=None, ipaddr=None, netmask + + def createLibvirtNetwork(network, bridged=True, iface=None): + conn = libvirtconnection.get() +- netName = LIBVIRT_NET_PREFIX + network ++ netName = netinfo.LIBVIRT_NET_PREFIX + network + if bridged: + netXml = '''%s + ''' % (escape(netName), escape(network)) +@@ -672,7 +672,7 @@ def createLibvirtNetwork(network, bridged=True, iface=None): + net.setAutostart(1) + + def removeLibvirtNetwork(network, log=True): +- netName = LIBVIRT_NET_PREFIX + network ++ netName = netinfo.LIBVIRT_NET_PREFIX + network + conn = libvirtconnection.get() + try: + net = conn.networkLookupByName(netName) +@@ -705,7 +705,7 @@ def assertBridgeClean(bridge, vlan, bonding, nics): + raise ConfigNetworkError(ne.ERR_USED_BRIDGE, 'bridge %s has interfaces %s connected' % (bridge, brifs)) + + def showNetwork(network): +- _netinfo = NetInfo() ++ _netinfo = netinfo.NetInfo() + if network not in _netinfo.networks: + print "Network %r doesn't exist" % network + return +@@ -729,7 +729,7 @@ def showNetwork(network): + print "vlan=%s, bonding=%s, nics=%s" % (vlan, bonding, nics) + + def listNetworks(): +- _netinfo = NetInfo() ++ _netinfo = netinfo.NetInfo() + print "Networks:", _netinfo.networks.keys() + print "Vlans:", _netinfo.vlans.keys() + print "Nics:", _netinfo.nics.keys() +@@ -737,7 +737,7 @@ def listNetworks(): + + def delNetwork(network, vlan=None, bonding=None, nics=None, force=False, + configWriter=None, implicitBonding=True, **options): +- _netinfo = NetInfo() ++ _netinfo = netinfo.NetInfo() + + validateBridgeName(network) + +@@ -772,7 +772,7 @@ def delNetwork(network, vlan=None, bonding=None, nics=None, force=False, + removeLibvirtNetwork(network, log=False) + # 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: ++ if network in netinfo.NetInfo().networks: + raise ConfigNetworkError(ne.ERR_USED_BRIDGE, + "delNetwork: bridge %s still exists" % network) + +@@ -825,7 +825,7 @@ def editNetwork(oldBridge, newBridge, vlan=None, bonding=None, nics=None, **opti + return define.errCode['noConPeer']['status']['code'] + + def _validateNetworkSetup(networks={}, bondings={}, explicitBonding=False): +- _netinfo = NetInfo() ++ _netinfo = netinfo.NetInfo() + + # Step 1: Initial validation (validate names, existence of params, etc.) + for network, networkAttrs in networks.iteritems(): +@@ -973,7 +973,7 @@ def _editBondings(bondings, configWriter): + """ Add/Edit bond interface """ + logger = logging.getLogger("_editBondings") + +- _netinfo = NetInfo() ++ _netinfo = netinfo.NetInfo() + + for bond, bondAttrs in bondings.iteritems(): + logger.debug("Creating/Editing bond %s with attributes %s", +@@ -999,7 +999,7 @@ def _removeBondings(bondings, configWriter): + """ Add/Edit bond interface """ + logger = logging.getLogger("_removeBondings") + +- _netinfo = NetInfo() ++ _netinfo = netinfo.NetInfo() + + for bond, bondAttrs in bondings.items(): + if 'remove' in bondAttrs: +@@ -1063,7 +1063,7 @@ def setupNetworks(networks={}, bondings={}, **options): + logger = logging.getLogger("setupNetworks") + + try: +- _netinfo = NetInfo() ++ _netinfo = netinfo.NetInfo() + configWriter = ConfigWriter() + networksAdded = set() + # keep set netsWithNewBonds to be able remove +-- +1.7.7.6 + diff --git a/0033-configNetwork-fix-NetInfo-call.patch b/0033-configNetwork-fix-NetInfo-call.patch new file mode 100644 index 0000000..7973f79 --- /dev/null +++ b/0033-configNetwork-fix-NetInfo-call.patch @@ -0,0 +1,32 @@ +From ce31be09f8e1ae3decaa5219d6ffdfb9a39115f9 Mon Sep 17 00:00:00 2001 +From: Douglas Schilling Landgraf +Date: Thu, 12 Jul 2012 16:09:50 -0400 +Subject: [PATCH 33/40] configNetwork: fix NetInfo call + +Commit 9be0497ba77333577e3f5e8738c9efd8794e7a36 changed the import of +netinfo. This patch fix a NetInfo call missed from the previous patch. + +Change-Id: I962cbd39d601300d10a25f5ccb36875b2e544cf1 +Signed-off-by: Douglas Schilling Landgraf +Reviewed-on: http://gerrit.ovirt.org/6206 +Reviewed-by: Dan Kenigsberg +--- + vdsm/configNetwork.py | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py +index bddf71c..5d2469d 100755 +--- a/vdsm/configNetwork.py ++++ b/vdsm/configNetwork.py +@@ -440,7 +440,7 @@ class ConfigWriter(object): + + if newmtu != currmtu: + if bonding: +- slaves = NetInfo.slaves(bonding) ++ slaves = netinfo.NetInfo.slaves(bonding) + for slave in slaves: + cf = self.NET_CONF_PREF + slave + self._updateConfigValue(cf, 'MTU', newmtu, newmtu is None) +-- +1.7.7.6 + diff --git a/0034-BZ-837443-removeVlan-drop-remove-interface.patch b/0034-BZ-837443-removeVlan-drop-remove-interface.patch new file mode 100644 index 0000000..0ca179c --- /dev/null +++ b/0034-BZ-837443-removeVlan-drop-remove-interface.patch @@ -0,0 +1,55 @@ +From 229e294cf3649e03df7b9d876a918c9604ebbdc5 Mon Sep 17 00:00:00 2001 +From: Douglas Schilling Landgraf +Date: Mon, 9 Jul 2012 17:27:35 -0400 +Subject: [PATCH 34/40] BZ#837443: removeVlan() drop/remove interface + +Move ifdown() and vconfig rm to removeVlan(). We need a generic +function to be called multiple times. For example, removing a vlan listed +or not listed in libvirt database. + +Change-Id: I2db7d26e3bb7fda62f1a8fcdbd0445554df20ad7 +Signed-off-by: Douglas Schilling Landgraf +Reviewed-on: http://gerrit.ovirt.org/6090 +Reviewed-by: Igor Lvovsky +Reviewed-by: Dan Kenigsberg +Tested-by: Dan Kenigsberg +Reviewed-on: http://gerrit.ovirt.org/6207 +--- + vdsm/configNetwork.py | 14 +++++++------- + 1 files changed, 7 insertions(+), 7 deletions(-) + +diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py +index 5d2469d..dabd219 100755 +--- a/vdsm/configNetwork.py ++++ b/vdsm/configNetwork.py +@@ -312,9 +312,13 @@ class ConfigWriter(object): + except IOError: + pass + +- def removeVlan(self, vlanId, iface): +- self._backup(self.NET_CONF_PREF + iface + '.' + vlanId) +- self._removeFile(self.NET_CONF_PREF + iface + '.' + vlanId) ++ def removeVlan(self, vlan, iface): ++ vlandev = iface + '.' + vlan ++ ifdown(vlandev) ++ subprocess.call([constants.EXT_VCONFIG, 'rem', vlandev], ++ stderr=subprocess.PIPE) ++ self._backup(self.NET_CONF_PREF + iface + '.' + vlan) ++ self._removeFile(self.NET_CONF_PREF + iface + '.' + vlan) + + def removeBonding(self, bonding): + self._backup(self.NET_CONF_PREF + bonding) +@@ -780,10 +784,6 @@ def delNetwork(network, vlan=None, bonding=None, nics=None, force=False, + configWriter.removeBridge(network) + + if vlan: +- vlandev = (bonding or nics[0]) + '.' + vlan +- ifdown(vlandev) +- subprocess.call([constants.EXT_VCONFIG, 'rem', vlandev], +- stderr=subprocess.PIPE) + configWriter.removeVlan(vlan, bonding or nics[0]) + + # The (relatively) new setupNetwork verb allows to remove a network +-- +1.7.7.6 + diff --git a/0035-BZ-837443-remove-bridge-before-add-VDSM-bridge.patch b/0035-BZ-837443-remove-bridge-before-add-VDSM-bridge.patch new file mode 100644 index 0000000..14f4411 --- /dev/null +++ b/0035-BZ-837443-remove-bridge-before-add-VDSM-bridge.patch @@ -0,0 +1,64 @@ +From dbe23c6eb50b6dc59738dceb0ece78221cadcfd3 Mon Sep 17 00:00:00 2001 +From: Douglas Schilling Landgraf +Date: Wed, 11 Jul 2012 11:18:42 -0400 +Subject: [PATCH 35/40] BZ#837443: remove bridge before add VDSM bridge + +Related to BZ#837443: ovirt-node fails to register with ovirt-engine + +oVirt Node when installed manually creates a bridge to be consumed. +VDSM should remove any bridge (listed or not listed in libvirt) +to create it's own bridge. + +Change-Id: Ibc2842db371483225042d511c6495df1bc5047de +Signed-off-by: Douglas Schilling Landgraf +Reviewed-on: http://gerrit.ovirt.org/6016 +Reviewed-by: Igor Lvovsky +Reviewed-by: Mark Wu +Reviewed-by: Dan Kenigsberg +Reviewed-on: http://gerrit.ovirt.org/6208 +--- + vdsm/configNetwork.py | 20 +++++++++++++++----- + 1 files changed, 15 insertions(+), 5 deletions(-) + +diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py +index dabd219..c94648c 100755 +--- a/vdsm/configNetwork.py ++++ b/vdsm/configNetwork.py +@@ -745,9 +745,22 @@ def delNetwork(network, vlan=None, bonding=None, nics=None, force=False, + + validateBridgeName(network) + ++ if configWriter is None: ++ configWriter = ConfigWriter() ++ + if network not in _netinfo.networks: +- raise ConfigNetworkError(ne.ERR_BAD_BRIDGE, +- "Cannot delete network %r: It doesn't exist" % network) ++ logging.info("Network %r: doesn't exist in libvirt database", network) ++ if network in netinfo.bridges(): ++ configWriter.removeBridge(network) ++ else: ++ raise ConfigNetworkError(ne.ERR_BAD_BRIDGE, ++ "Cannot delete network %r: It doesn't exist " ++ "in the system" % network) ++ ++ if vlan: ++ configWriter.removeVlan(vlan, bonding or nics[0]) ++ ++ return + + nics, vlan, bonding = _netinfo.getNicsVlanAndBondingForNetwork(network) + bridged = _netinfo.networks[network]['bridged'] +@@ -767,9 +780,6 @@ def delNetwork(network, vlan=None, bonding=None, nics=None, force=False, + if bridged: + assertBridgeClean(network, vlan, bonding, nics) + +- if configWriter is None: +- configWriter = ConfigWriter() +- + if bridged: + configWriter.setNewMtu(network) + +-- +1.7.7.6 + diff --git a/0036-BZ-836954-Allow-to-break-bond-and-create-a-new-netwo.patch b/0036-BZ-836954-Allow-to-break-bond-and-create-a-new-netwo.patch new file mode 100644 index 0000000..cdbdac7 --- /dev/null +++ b/0036-BZ-836954-Allow-to-break-bond-and-create-a-new-netwo.patch @@ -0,0 +1,47 @@ +From ee31f19b5340506bc73d9f2fc27366d5241c3ca2 Mon Sep 17 00:00:00 2001 +From: Igor Lvovsky +Date: Mon, 2 Jul 2012 13:00:19 +0300 +Subject: [PATCH 36/40] BZ#836954 - Allow to break bond and create a new + network on its interface in single action. + +Assume we have a bond0 on (eth1, eth2) with defined network brNet on it. +This patch will allow to break the bond0 and create a new network brNet2 on one +of its interfaces (e.g. eth2) with single setupNetworks operation + +Change-Id: Iaa6459ec24f9c81a2cfbc107b5e3548126903357 +Signed-off-by: Igor Lvovsky +Reviewed-on: http://gerrit.ovirt.org/5841 +Reviewed-by: Dan Kenigsberg +Reviewed-on: http://gerrit.ovirt.org/6210 +Tested-by: Dan Kenigsberg +--- + vdsm/configNetwork.py | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py +index c94648c..d277cd6 100755 +--- a/vdsm/configNetwork.py ++++ b/vdsm/configNetwork.py +@@ -1107,6 +1107,9 @@ def setupNetworks(networks={}, bondings={}, **options): + else: + networksAdded.add(network) + ++ # Remove bonds with 'remove' attribute ++ _removeBondings(bondings, configWriter) ++ + handledBonds = set() + for network, networkAttrs in networks.iteritems(): + d = dict(networkAttrs) +@@ -1137,9 +1140,6 @@ def setupNetworks(networks={}, bondings={}, **options): + 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) + +-- +1.7.7.6 + diff --git a/0037-BZ-837054-Do-not-detach-network-from-the-bond-during.patch b/0037-BZ-837054-Do-not-detach-network-from-the-bond-during.patch new file mode 100644 index 0000000..c7fd1a2 --- /dev/null +++ b/0037-BZ-837054-Do-not-detach-network-from-the-bond-during.patch @@ -0,0 +1,47 @@ +From 3060b9110bb37ee2b05356b37fde4d79b1e46c5f Mon Sep 17 00:00:00 2001 +From: Igor Lvovsky +Date: Thu, 5 Jul 2012 15:05:14 +0300 +Subject: [PATCH 37/40] BZ#837054 - Do not detach network from the bond during + bond resize + +Let's say you have bond and bridged non-VLANed network on it. +This patch will fix detaching such network from the bond during bond resizing. + +Change-Id: Idf2a7f73b23dc9692bec9cc3fad01e947a7294af +Signed-off-by: Igor Lvovsky +Reviewed-on: http://gerrit.ovirt.org/5970 +Reviewed-by: Dan Kenigsberg +Reviewed-on: http://gerrit.ovirt.org/6213 +Tested-by: Dan Kenigsberg +--- + vdsm/configNetwork.py | 7 ++++++- + 1 files changed, 6 insertions(+), 1 deletions(-) + +diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py +index d277cd6..eb140f8 100755 +--- a/vdsm/configNetwork.py ++++ b/vdsm/configNetwork.py +@@ -988,6 +988,11 @@ def _editBondings(bondings, configWriter): + for bond, bondAttrs in bondings.iteritems(): + logger.debug("Creating/Editing bond %s with attributes %s", + bond, bondAttrs) ++ ++ brNets = list(_netinfo.getBridgedNetworksForNic(bond)) ++ # Only one bridged-non-VLANed network allowed on same nic/bond ++ bridge = brNets[0] if brNets else None ++ + if bond in _netinfo.bondings: + ifdown(bond) + # Take down all bond's NICs. +@@ -1001,7 +1006,7 @@ def _editBondings(bondings, configWriter): + configWriter.addNic(nic, bonding=bond) + ifup(nic) + +- configWriter.addBonding(bond, ++ configWriter.addBonding(bond, bridge=bridge, + bondingOptions=bondAttrs.get('options', None)) + ifup(bond) + +-- +1.7.7.6 + diff --git a/0038-Remove-redundant-explicitBonding-parameter-from-setu.patch b/0038-Remove-redundant-explicitBonding-parameter-from-setu.patch new file mode 100644 index 0000000..c8e2ef5 --- /dev/null +++ b/0038-Remove-redundant-explicitBonding-parameter-from-setu.patch @@ -0,0 +1,115 @@ +From 5cb2be8ed2406928525072360c3a2571229415f9 Mon Sep 17 00:00:00 2001 +From: Igor Lvovsky +Date: Mon, 2 Jul 2012 12:40:54 +0300 +Subject: [PATCH 38/40] Remove redundant 'explicitBonding' parameter from + setupNetworks + +Change-Id: Id8cd878109ab5fe9d082412f6d05e1c964823779 +Signed-off-by: Igor Lvovsky +Reviewed-on: http://gerrit.ovirt.org/5840 +Reviewed-by: Dan Kenigsberg +Tested-by: Dan Kenigsberg +Reviewed-on: http://gerrit.ovirt.org/6209 +--- + vdsm/configNetwork.py | 34 ++++++++-------------------------- + 1 files changed, 8 insertions(+), 26 deletions(-) + +diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py +index eb140f8..d8cad5d 100755 +--- a/vdsm/configNetwork.py ++++ b/vdsm/configNetwork.py +@@ -834,7 +834,7 @@ def editNetwork(oldBridge, newBridge, vlan=None, bonding=None, nics=None, **opti + configWriter.restoreAtomicBackup() + return define.errCode['noConPeer']['status']['code'] + +-def _validateNetworkSetup(networks={}, bondings={}, explicitBonding=False): ++def _validateNetworkSetup(networks={}, bondings={}): + _netinfo = netinfo.NetInfo() + + # Step 1: Initial validation (validate names, existence of params, etc.) +@@ -897,7 +897,6 @@ def _validateNetworkSetup(networks={}, bondings={}, explicitBonding=False): + + + # Step 2: Make sure we have complete information about the Setup, more validation +- # (if explicitBonding==False we complete the missing information ourselves, else we raise an exception) + nics = defaultdict(lambda: {'networks':{}, 'bonding':None}) + for network, networkAttrs in networks.iteritems(): + if networkAttrs.get('remove', False): +@@ -908,10 +907,6 @@ def _validateNetworkSetup(networks={}, bondings={}, explicitBonding=False): + + bonding = networkAttrs['bonding'] + if bonding not in bondings: +- if explicitBonding: +- raise ConfigNetworkError(ne.ERR_BAD_PARAMS, "Network %s requires unspecified bonding %s"%( +- network, bonding)) +- + # fill in bonding info + bondings[bonding] = {'nics':_netinfo.bondings[bonding]['slaves']} + +@@ -930,9 +925,6 @@ def _validateNetworkSetup(networks={}, bondings={}, explicitBonding=False): + + for network in connectedNetworks: + if network not in networks: +- if explicitBonding: +- raise ConfigNetworkError(ne.ERR_BAD_PARAMS, "Bonding %s is associated with unspecified network %s"%( +- bonding, network)) + # fill in network info + _, vlan, bonding2 = _netinfo.getNicsVlanAndBondingForNetwork(network) + assert bonding == bonding2 +@@ -1035,7 +1027,7 @@ def setupNetworks(networks={}, bondings={}, **options): + + Params: + networks - dict of key=network, value=attributes +- where 'attributes' is a dict with the following optional items: ++ where 'attributes' is a dict with the following optional items: + vlan= + bonding="" | nic="" + (bonding and nics are mutually exclusive) +@@ -1050,7 +1042,7 @@ def setupNetworks(networks={}, bondings={}, **options): + remove=True (other attributes can't be specified) + + bondings - dict of key=bonding, value=attributes +- where 'attributes' is a dict with the following optional items: ++ where 'attributes' is a dict with the following optional items: + nics=["" , "", ...] + options="" + -- OR -- +@@ -1060,20 +1052,12 @@ def setupNetworks(networks={}, bondings={}, **options): + force=0|1 + connectivityCheck=0|1 + connectivityTimeout= +- explicitBonding=0|1 +- + + Notes: +- Bondings are removed when they change state from 'used' to 'unused'. +- +- By default, if you edit a network that is attached to a bonding, it's not +- necessary to re-specify the bonding (you need only to note the attachment +- in the network's attributes). Similarly, if you edit a bonding, it's not +- necessary to specify its networks. +- However, if you specify the 'explicitBonding' option as true, the function +- will expect you to specify all networks that are attached to a specified +- bonding, and vice-versa, the bonding attached to a specified network. +- ++ When you edit a network that is attached to a bonding, it's not ++ necessary to re-specify the bonding (you need only to note ++ the attachment in the network's attributes). Similarly, if you edit ++ a bonding, it's not necessary to specify its networks. + """ + logger = logging.getLogger("setupNetworks") + +@@ -1095,9 +1079,7 @@ def setupNetworks(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)) + + logger.debug("Applying...") + try: +-- +1.7.7.6 + diff --git a/0039-configNet-clear-up-atomicBackup-arg.patch b/0039-configNet-clear-up-atomicBackup-arg.patch new file mode 100644 index 0000000..8af3bae --- /dev/null +++ b/0039-configNet-clear-up-atomicBackup-arg.patch @@ -0,0 +1,41 @@ +From df7e06353bcd1c48304884384e5d8575747a3b7a Mon Sep 17 00:00:00 2001 +From: Dan Kenigsberg +Date: Wed, 4 Jul 2012 17:25:55 +0300 +Subject: [PATCH 39/40] configNet: clear up atomicBackup arg + +Apparently, os.path.join('/a/b/', '/a/b/c') == '/a/b/c'. +Let us not trust this peculiarity, and have atomicBackup +expect a full path to the config file. + +Change-Id: Id4f4fc8dd1db785837d868a45787b3fa5be901a6 +Signed-off-by: Dan Kenigsberg +Reviewed-on: http://gerrit.ovirt.org/5953 +Reviewed-by: Igor Lvovsky +Reviewed-on: http://gerrit.ovirt.org/6211 +--- + vdsm/configNetwork.py | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py +index d8cad5d..dbec079 100755 +--- a/vdsm/configNetwork.py ++++ b/vdsm/configNetwork.py +@@ -168,11 +168,11 @@ class ConfigWriter(object): + + def _atomicBackup(self, filename): + """Backs up configuration to memory, for a later rollback in case of error.""" +- confFile = os.path.join(netinfo.NET_CONF_DIR, filename) +- if confFile not in self._backups: ++ ++ if filename not in self._backups: + try: +- self._backups[confFile] = open(confFile).read() +- logging.debug("Backed up %s" % confFile) ++ self._backups[filename] = open(filename).read() ++ logging.debug("Backed up %s", filename) + except IOError: + pass + +-- +1.7.7.6 + diff --git a/0040-configNet-atomicBackup-remove-new-files-upon-restore.patch b/0040-configNet-atomicBackup-remove-new-files-upon-restore.patch new file mode 100644 index 0000000..367e3a5 --- /dev/null +++ b/0040-configNet-atomicBackup-remove-new-files-upon-restore.patch @@ -0,0 +1,51 @@ +From 72580d30893de15fea9af0050e989bc6d33e3216 Mon Sep 17 00:00:00 2001 +From: Dan Kenigsberg +Date: Wed, 4 Jul 2012 16:36:05 +0300 +Subject: [PATCH 40/40] configNet: atomicBackup: remove new files upon restore + +Files that are created by ConfigWriter._atomicBackup() should be removed +by restoreAtomicBackup, not forgotten on disk. + +Change-Id: I66bdb20b6e7e78be198f2616aa0ef7a8efeec18a +Signed-off-by: Dan Kenigsberg +Reviewed-on: http://gerrit.ovirt.org/5952 +Reviewed-by: Igor Lvovsky +Reviewed-on: http://gerrit.ovirt.org/6212 +--- + vdsm/configNetwork.py | 14 ++++++++++---- + 1 files changed, 10 insertions(+), 4 deletions(-) + +diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py +index dbec079..bb4e81e 100755 +--- a/vdsm/configNetwork.py ++++ b/vdsm/configNetwork.py +@@ -173,16 +173,22 @@ class ConfigWriter(object): + try: + self._backups[filename] = open(filename).read() + logging.debug("Backed up %s", filename) +- except IOError: +- pass ++ except IOError, e: ++ if e.errno == os.errno.ENOENT: ++ self._backups[filename] = None ++ else: ++ raise + + def restoreAtomicBackup(self): + logging.info("Rolling back configuration (restoring atomic backup)") + if not self._backups: + return + for confFile, content in self._backups.iteritems(): +- open(confFile, 'w').write(content) +- logging.debug('Restored %s', confFile) ++ if content is None: ++ utils.rmFile(confFile) ++ else: ++ open(confFile, 'w').write(content) ++ logging.info('Restored %s', confFile) + subprocess.Popen(['/etc/init.d/network', 'start']) + + @staticmethod +-- +1.7.7.6 + diff --git a/vdsm.spec b/vdsm.spec index 31cb3c3..fcaa97c 100644 --- a/vdsm.spec +++ b/vdsm.spec @@ -20,7 +20,7 @@ Name: %{vdsm_name} Version: 4.10.0 -Release: 4%{?vdsm_relvtag}%{?dist}%{?extra_release} +Release: 5%{?vdsm_relvtag}%{?dist}%{?extra_release} Summary: Virtual Desktop Server Manager Group: Applications/System @@ -61,6 +61,20 @@ Patch22: 0023-BZ-833119-Allow-to-create-VLANed-network-on-top-of-e.patch Patch23: 0024-BZ-833803-Avoid-bond-breaking-after-network-detach.patch Patch24: 0025-Handle-bond-properly-if-connectivity-check-fail.patch Patch25: 0026-BZ-806555-having-etc-ovirt-node-means-it-is-a-node.patch +Patch26: 0027-bump-libvirt-version-to-fix-readonly-lease-unsupport.patch +Patch27: 0028-BZ-832199-move-selinux-from-init-to-spec.patch +Patch28: 0029-BZ-838097-_addNetworkValidation-do-not-explode-if-ST.patch +Patch29: 0030-ovirt_functions-fix-elif-statement.patch +Patch30: 0031-BZ-837443-removeBridge-drop-remove-interface.patch +Patch31: 0032-BZ-837443-replace-the-netinfo-import.patch +Patch32: 0033-configNetwork-fix-NetInfo-call.patch +Patch33: 0034-BZ-837443-removeVlan-drop-remove-interface.patch +Patch34: 0035-BZ-837443-remove-bridge-before-add-VDSM-bridge.patch +Patch35: 0036-BZ-836954-Allow-to-break-bond-and-create-a-new-netwo.patch +Patch36: 0037-BZ-837054-Do-not-detach-network-from-the-bond-during.patch +Patch37: 0038-Remove-redundant-explicitBonding-parameter-from-setu.patch +Patch38: 0039-configNet-clear-up-atomicBackup-arg.patch +Patch39: 0040-configNet-atomicBackup-remove-new-files-upon-restore.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -103,7 +117,8 @@ Requires: e2fsprogs >= 1.41.12-11 Requires: python >= 2.7.3 Requires: qemu-kvm >= 2:0.15.0-4 Requires: qemu-img >= 2:0.15.0-4 -Requires: libvirt >= 0.9.10 +#readonly lease ignored by default on 0.9.11.4-3 +Requires: libvirt >= 0.9.11.4-3 Requires: libvirt-python, libvirt-lock-sanlock Requires: iscsi-initiator-utils >= 6.2.0.872-14 Requires: device-mapper-multipath >= 0.4.9-18 @@ -117,6 +132,7 @@ Requires: sos Requires: tree Requires: dosfstools Requires: policycoreutils-python +Requires(pre,preun): policycoreutils-python Requires: libselinux-python Requires: kernel >= 2.6.32-198 Requires: %{name}-python = %{version}-%{release} @@ -378,6 +394,20 @@ Gluster plugin enables VDSM to serve Gluster functionalities. %patch23 -p1 -b .patch23 %patch24 -p1 -b .patch24 %patch25 -p1 -b .patch25 +%patch26 -p1 -b .patch26 +%patch27 -p1 -b .patch27 +%patch28 -p1 -b .patch28 +%patch29 -p1 -b .patch29 +%patch30 -p1 -b .patch30 +%patch31 -p1 -b .patch31 +%patch32 -p1 -b .patch32 +%patch33 -p1 -b .patch33 +%patch34 -p1 -b .patch34 +%patch35 -p1 -b .patch35 +%patch36 -p1 -b .patch36 +%patch37 -p1 -b .patch37 +%patch38 -p1 -b .patch38 +%patch39 -p1 -b .patch39 %build %configure %{?with_hooks:--enable-hooks} @@ -442,6 +472,23 @@ rm -rf %{buildroot} /usr/sbin/usermod -a -G %{qemu_group},%{snlk_group} %{vdsm_user} /usr/sbin/usermod -a -G %{qemu_group},%{vdsm_group} %{snlk_user} +# vdsm makes extensive use of nfs-exported images +# The next lines will collect the default selinux behaviour for the booleans +virtNFS=$(/usr/sbin/semanage boolean -l | /bin/grep virt_use_nfs | cut -d ',' -f 2) +virtSANLOCK=$(/usr/sbin/semanage boolean -l | /bin/grep virt_use_sanlock | cut -d ',' -f 2) + +if [[ "${virtNFS}" == *off* || "${virtSANLOCK}" == *off* ]]; then + /usr/sbin/semanage boolean -m -S targeted -F /dev/stdin << _EOF +virt_use_nfs=1 +virt_use_sanlock=1 +_EOF +fi + +if /usr/sbin/selinuxenabled; then + /usr/sbin/setsebool virt_use_nfs on + /usr/sbin/setsebool virt_use_sanlock on +fi + %post # update the vdsm "secret" password for libvirt if [ -f /etc/pki/vdsm/keys/libvirt_password ]; then @@ -482,10 +529,12 @@ then /usr/sbin/semanage boolean -m -S targeted -F /dev/stdin << _EOF virt_use_nfs=0 +virt_use_sanlock=0 _EOF - if selinuxenabled; then + if /usr/sbin/selinuxenabled; then /usr/sbin/setsebool virt_use_nfs off + /usr/sbin/setsebool virt_use_sanlock off fi /usr/sbin/saslpasswd2 -p -a libvirt -d vdsm@rhevh @@ -919,6 +968,22 @@ exit 0 %{_datadir}/%{vdsm_name}/gluster/hostname.py* %changelog +* Tue Jul 17 2012 Federico Simoncelli 4.10.0-5.fc17 +- configNet: atomicBackup: remove new files upon restore +- configNet: clear up atomicBackup arg +- Remove redundant 'explicitBonding' parameter from setupNetworks +- BZ#837054 - Do not detach network from the bond during bond resize +- BZ#836954 - Allow to break bond and create a new network on its interface in single action. +- BZ#837443: remove bridge before add VDSM bridge +- BZ#837443: removeVlan() drop/remove interface +- configNetwork: fix NetInfo call +- BZ#837443: replace the netinfo import +- BZ#837443: removeBridge() drop/remove interface +- ovirt_functions: fix elif statement +- BZ#838097 _addNetworkValidation: do not explode if STP/DNS1 option passed +- BZ#832199: move selinux from init to spec +- bump libvirt version to fix readonly lease unsupported issue + * Fri Jun 29 2012 Federico Simoncelli 4.10.0-4.fc17 - deployUtil: use os.uname instead of /bin/uname - deployUtil: slightly saner kernel version comparison