[vdsm/f20] vdsm-4.13.3-2

Douglas Schilling Landgraf dougsland at fedoraproject.org
Thu Jan 23 20:57:00 UTC 2014


commit 732e7127bc651934650ea04d7c13ff299cf8efcd
Author: Douglas Schilling Landgraf <dougsland at redhat.com>
Date:   Thu Jan 23 15:55:36 2014 -0500

    vdsm-4.13.3-2
    
    - Report conflict when python-cpopen is installed
    - F20 branch should contain the latest RC

 0001-Using-old-form-of-zombiereaper.patch          |   45 +++
 ...spec-Add-BuildRequires-to-python-argparse.patch |   33 --
 0002-Revert-Using-old-form-of-zombiereaper.patch   |   47 +++
 ...Revert-utils-Create-AsyncProcessOperation.patch |  164 ++++++++++
 0004-Revert-iscsi-Iscsi-rescan-cleanup.patch       |  316 ++++++++++++++++++++
 ...-conflict-when-python-cpopen-is-installed.patch |   35 +++
 sources                                            |    2 +-
 vdsm.spec                                          |  241 +++++-----------
 8 files changed, 679 insertions(+), 204 deletions(-)
---
diff --git a/0001-Using-old-form-of-zombiereaper.patch b/0001-Using-old-form-of-zombiereaper.patch
new file mode 100644
index 0000000..1615ae5
--- /dev/null
+++ b/0001-Using-old-form-of-zombiereaper.patch
@@ -0,0 +1,45 @@
+From d1bb20a892d32822e8f04488fb12df0ffea76a04 Mon Sep 17 00:00:00 2001
+From: Yaniv Bronhaim <ybronhei at redhat.com>
+Date: Mon, 13 Jan 2014 14:55:35 +0200
+Subject: [PATCH 1/4] Using old form of zombiereaper
+
+In ovirt-3.3 we don't include the change [1] that modifies zombieReaper
+to zombiereaper.
+
+The import in utils.py cause an import error without having [1].
+
+[1] http://gerrit.ovirt.org/#/c/19253/
+
+Change-Id: I7483e09df69d07b8396e075726dd14efb42a5551
+Signed-off-by: Yaniv Bronhaim <ybronhei at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/23215
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+---
+ lib/vdsm/utils.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/vdsm/utils.py b/lib/vdsm/utils.py
+index 5a2f746..0d3ec91 100644
+--- a/lib/vdsm/utils.py
++++ b/lib/vdsm/utils.py
+@@ -48,7 +48,7 @@ import stat
+ import subprocess
+ import threading
+ import time
+-import zombiereaper
++import zombieReaper
+ 
+ from cpopen import CPopen as BetterPopen
+ from config import config
+@@ -983,7 +983,7 @@ class AsyncProcessOperation(object):
+ 
+     def __del__(self):
+         if self._proc.returncode is None:
+-            zombiereaper.autoReapPID(self._proc.pid)
++            zombieReaper.autoReapPID(self._proc.pid)
+ 
+ 
+ def panic(msg):
+-- 
+1.8.4.2
+
diff --git a/0002-Revert-Using-old-form-of-zombiereaper.patch b/0002-Revert-Using-old-form-of-zombiereaper.patch
new file mode 100644
index 0000000..e8de0ea
--- /dev/null
+++ b/0002-Revert-Using-old-form-of-zombiereaper.patch
@@ -0,0 +1,47 @@
+From d3c7870167cdab24be231756f0753a83728fcf32 Mon Sep 17 00:00:00 2001
+From: Yaniv Bronhaim <ybronhei at redhat.com>
+Date: Mon, 13 Jan 2014 17:44:05 +0200
+Subject: [PATCH 2/4] Revert "Using old form of zombiereaper"
+
+This reverts commit d1bb20a892d32822e8f04488fb12df0ffea76a04.
+
+This patch didn't resolve the problem, it just fixed the build errors.
+Still the import is invalid as zombieReaper located under
+/usr/share/vdsm and utils.py runs for site-packages and cannot locate
+it. This revert comes aside to backport of
+http://gerrit.ovirt.org/#/c/23213/ that arrange the issue.
+
+Change-Id: If6a970cdd17c9dbf5544f68e406e6667344df900
+Signed-off-by: Yaniv Bronhaim <ybronhei at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/23228
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+Tested-by: Dan Kenigsberg <danken at redhat.com>
+---
+ lib/vdsm/utils.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/vdsm/utils.py b/lib/vdsm/utils.py
+index 0d3ec91..5a2f746 100644
+--- a/lib/vdsm/utils.py
++++ b/lib/vdsm/utils.py
+@@ -48,7 +48,7 @@ import stat
+ import subprocess
+ import threading
+ import time
+-import zombieReaper
++import zombiereaper
+ 
+ from cpopen import CPopen as BetterPopen
+ from config import config
+@@ -983,7 +983,7 @@ class AsyncProcessOperation(object):
+ 
+     def __del__(self):
+         if self._proc.returncode is None:
+-            zombieReaper.autoReapPID(self._proc.pid)
++            zombiereaper.autoReapPID(self._proc.pid)
+ 
+ 
+ def panic(msg):
+-- 
+1.8.4.2
+
diff --git a/0003-Revert-utils-Create-AsyncProcessOperation.patch b/0003-Revert-utils-Create-AsyncProcessOperation.patch
new file mode 100644
index 0000000..a7332a0
--- /dev/null
+++ b/0003-Revert-utils-Create-AsyncProcessOperation.patch
@@ -0,0 +1,164 @@
+From c0239063a8ecc595beff62d6e6f3795146771a45 Mon Sep 17 00:00:00 2001
+From: Yaniv Bronhaim <ybronhei at redhat.com>
+Date: Mon, 13 Jan 2014 18:45:36 +0200
+Subject: [PATCH 3/4] Revert "utils: Create AsyncProcessOperation"
+
+This reverts commit ed426e5590df421bace0aef9fc802baf2a24a5f2.
+
+Change-Id: I4a4d42db21d4541d955af415898d9cdedd83275b
+Signed-off-by: Yaniv Bronhaim <ybronhei at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/23234
+---
+ lib/vdsm/utils.py   | 50 ------------------------------------------
+ tests/utilsTests.py | 63 -----------------------------------------------------
+ 2 files changed, 113 deletions(-)
+
+diff --git a/lib/vdsm/utils.py b/lib/vdsm/utils.py
+index 5a2f746..ef0f512 100644
+--- a/lib/vdsm/utils.py
++++ b/lib/vdsm/utils.py
+@@ -48,7 +48,6 @@ import stat
+ import subprocess
+ import threading
+ import time
+-import zombiereaper
+ 
+ from cpopen import CPopen as BetterPopen
+ from config import config
+@@ -937,55 +936,6 @@ def retry(func, expectedException=Exception, tries=None,
+             time.sleep(sleep)
+ 
+ 
+-class AsyncProcessOperation(object):
+-    def __init__(self, proc, resultParser=None):
+-        """Wraps a running process operation.
+-
+-        resultParser should be of type callback(rc, out, err) and can return
+-        anything or throw exceptions."""
+-        self._lock = threading.Lock()
+-
+-        self._result = None
+-        self._resultParser = resultParser
+-
+-        self._proc = proc
+-
+-    def wait(self, timeout=None, cond=None):
+-        """Waits until the process has exited, the timeout has been reached or
+-        the condition has been met"""
+-        return self._proc.wait(timeout, cond)
+-
+-    def stop(self):
+-        """Stops the running operation, effectively sending a kill signal to
+-        the process"""
+-        self._proc.kill()
+-
+-    def result(self):
+-        """Returns the result in the as a tuple of (result, error).
+-        If the operation is still running it will block until it returns.
+-
+-        If no resultParser has been set the default result
+-        is (rc, out, err) """
+-        with self._lock:
+-            if self._result is None:
+-                out, err = self._proc.communicate()
+-                rc = self._proc.returncode
+-                if self._resultParser is not None:
+-                    try:
+-                        self._result = (self._resultParser(rc, out, err),
+-                                        None)
+-                    except Exception as e:
+-                        self._result = (None, e)
+-                else:
+-                    self._result = ((rc, out, err), None)
+-
+-            return self._result
+-
+-    def __del__(self):
+-        if self._proc.returncode is None:
+-            zombiereaper.autoReapPID(self._proc.pid)
+-
+-
+ def panic(msg):
+     logging.error("Panic: %s", msg, exc_info=True)
+     os.killpg(0, 9)
+diff --git a/tests/utilsTests.py b/tests/utilsTests.py
+index 4dc6579..5f7c82d 100644
+--- a/tests/utilsTests.py
++++ b/tests/utilsTests.py
+@@ -24,7 +24,6 @@ import logging
+ from testrunner import VdsmTestCase as TestCaseBase
+ from vdsm import utils
+ from storage import misc
+-import time
+ 
+ 
+ class RetryTests(TestCaseBase):
+@@ -141,65 +140,3 @@ class TracebackTests(TestCaseBase):
+     def handle(self, record):
+         assert self.record is None
+         self.record = record
+-
+-
+-class AsyncProcessOperationTests(TestCaseBase):
+-    def _echo(self, text):
+-        proc = misc.execCmd(["echo", "-n", "test"], sync=False)
+-
+-        def parse(rc, out, err):
+-            return out
+-
+-        return utils.AsyncProcessOperation(proc, parse)
+-
+-    def _sleep(self, t):
+-        proc = misc.execCmd(["sleep", str(t)], sync=False)
+-        return utils.AsyncProcessOperation(proc)
+-
+-    def _fail(self, t):
+-        proc = misc.execCmd(["sleep", str(t)], sync=False)
+-
+-        def parse(rc, out, err):
+-            raise Exception("TEST!!!")
+-
+-        return utils.AsyncProcessOperation(proc, parse)
+-
+-    def test(self):
+-        aop = self._sleep(1)
+-        self.assertEquals(aop.result(), ((0, "", ""), None))
+-
+-    def testAlreadyExitedSuccess(self):
+-        aop = self._sleep(0)
+-        time.sleep(1)
+-        self.assertEquals(aop.result(), ((0, "", ""), None))
+-
+-    def testAlreadyExitedFail(self):
+-        aop = self._sleep("hello")
+-        time.sleep(1)
+-        ((rc, out, err), err) = aop.result()
+-        self.assertEquals(err, None)
+-        self.assertEquals(rc, 1)
+-
+-    def testWait(self):
+-        aop = self._sleep(1)
+-        aop.wait(timeout=2)
+-
+-    def testParser(self):
+-        aop = self._echo("test")
+-        self.assertEquals(aop.result(), ("test", None))
+-
+-    def testStop(self):
+-        aop = self._sleep(10)
+-        aop.stop()
+-
+-        start = time.time()
+-        aop.result()
+-        end = time.time()
+-        duration = end - start
+-        self.assertTrue(duration < 2)
+-
+-    def testException(self):
+-        aop = self._fail(1)
+-        res, err = aop.result()
+-        self.assertEquals(res, None)
+-        self.assertNotEquals(err, None)
+-- 
+1.8.4.2
+
diff --git a/0004-Revert-iscsi-Iscsi-rescan-cleanup.patch b/0004-Revert-iscsi-Iscsi-rescan-cleanup.patch
new file mode 100644
index 0000000..178891a
--- /dev/null
+++ b/0004-Revert-iscsi-Iscsi-rescan-cleanup.patch
@@ -0,0 +1,316 @@
+From fb564a48f76a38575df56df5dde2e3cf00f586e6 Mon Sep 17 00:00:00 2001
+From: Yaniv Bronhaim <ybronhei at redhat.com>
+Date: Mon, 13 Jan 2014 18:45:24 +0200
+Subject: [PATCH 4/4] Revert "iscsi: Iscsi rescan cleanup"
+
+This reverts commit 9df615a98ef98a3111f691c0f1dd47a979b48032.
+
+Change-Id: Ie28d733ac86d0b7379bbe406bfcdc7779bc0402a
+Signed-off-by: Yaniv Bronhaim <ybronhei at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/23233
+---
+ tests/Makefile.am         |  1 -
+ tests/iscsiTests.py       | 80 -----------------------------------------------
+ vdsm.spec.in              |  2 +-
+ vdsm/storage/iscsi.py     | 59 +++++++++++++++++++++++++++-------
+ vdsm/storage/iscsiadm.py  | 24 +++++---------
+ vdsm/storage/multipath.py |  2 ++
+ vdsm/supervdsmServer      |  5 +++
+ 7 files changed, 62 insertions(+), 111 deletions(-)
+ delete mode 100644 tests/iscsiTests.py
+
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 5efae38..f87eddd 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -37,7 +37,6 @@ test_modules = \
+ 	guestIFTests.py \
+ 	hooksTests.py \
+ 	ipwrapperTests.py \
+-	iscsiTests.py \
+ 	jsonRpcTests.py \
+ 	jsonRpcUtils.py \
+ 	libvirtconnectionTests.py \
+diff --git a/tests/iscsiTests.py b/tests/iscsiTests.py
+deleted file mode 100644
+index 44f6962..0000000
+--- a/tests/iscsiTests.py
++++ /dev/null
+@@ -1,80 +0,0 @@
+-import threading
+-import time
+-from contextlib import contextmanager
+-
+-from testrunner import VdsmTestCase as TestCaseBase
+-
+-from storage import iscsi
+-
+-
+-class AsyncStubOperation(object):
+-    def __init__(self, timeout):
+-        self._evt = threading.Event()
+-        if timeout == 0:
+-            self._evt.set()
+-        else:
+-            threading.Timer(timeout, self._evt.set)
+-
+-    def wait(self, timeout=None, cond=None):
+-        if cond is not None:
+-            raise Exception("TODO!!!")
+-
+-        self._evt.wait(timeout)
+-
+-    def stop(self):
+-        self._evt.set()
+-
+-    def result(self):
+-        if self._evt.is_set():
+-            return (None, None)
+-        else:
+-            return None
+-
+-
+-class RescanTimeoutTests(TestCaseBase):
+-    def setUp(self):
+-        self._iscsiadm_rescan_async = \
+-            iscsi.iscsiadm.session_rescan_async
+-        iscsi.iscsiadm.session_rescan_async = self._iscsi_stub
+-        self._timeout = 0
+-
+-    def tearDown(self):
+-        iscsi.iscsiadm.session_rescan_async = \
+-            self._iscsiadm_rescan_async
+-
+-    def _iscsi_stub(self):
+-        return AsyncStubOperation(self._timeout)
+-
+-    @contextmanager
+-    def assertMaxDuration(self, maxtime):
+-        start = time.time()
+-        try:
+-            yield
+-        finally:
+-            end = time.time()
+-            elapsed = end - start
+-            if maxtime < elapsed:
+-                self.fail("Operation was too slow %fs > %fs" %
+-                          (elapsed, maxtime))
+-
+-    @contextmanager
+-    def assertMinDuration(self, mintime):
+-        start = time.time()
+-        try:
+-            yield
+-        finally:
+-            end = time.time()
+-            elapsed = end - start
+-            if mintime > elapsed:
+-                self.fail("Operation was too fast %fs > %fs" %
+-                          (elapsed, mintime))
+-
+-    def testFast(self):
+-        self._timeout = 0
+-        with self.assertMinDuration(2):
+-            iscsi.rescan(2, 4)
+-
+-    def testSlow(self):
+-        self._timeout = 60
+-        with self.assertMaxDuration(3):
+-            iscsi.rescan(1, 2)
+diff --git a/vdsm.spec.in b/vdsm.spec.in
+index 8d3ba09..9aeb607 100644
+--- a/vdsm.spec.in
++++ b/vdsm.spec.in
+@@ -146,7 +146,7 @@ Requires: python
+ # Update the qemu-kvm requires when block_stream will be included
+ Requires: qemu-kvm >= 2:0.12.1.2-2.295.el6_3.4
+ Requires: qemu-img >= 2:0.12.1.2-2.295.el6_3.4
+-Requires: iscsi-initiator-utils >= 6.2.0.873-3
++Requires: iscsi-initiator-utils >= 6.2.0.872-15
+ Requires: device-mapper-multipath >= 0.4.9-52
+ Requires: e2fsprogs >= 1.41.12-11
+ Requires: fence-agents
+diff --git a/vdsm/storage/iscsi.py b/vdsm/storage/iscsi.py
+index f4fdceb..7da94ab 100644
+--- a/vdsm/storage/iscsi.py
++++ b/vdsm/storage/iscsi.py
+@@ -30,6 +30,7 @@ import errno
+ import time
+ from collections import namedtuple
+ 
++from vdsm import constants
+ import misc
+ from vdsm.config import config
+ import devicemapper
+@@ -372,15 +373,38 @@ def iterateIscsiInterfaces():
+ 
+ 
+ @misc.samplingmethod
+-def rescan(minTimeout=None, maxTimeout=None):
+-    # FIXME: This whole thing is wrong from the core. We need to make rescan
+-    #        completely async and have methods timeout on their own if they
+-    #        can't find the devices they are looking for
+-    if minTimeout is None:
+-        minTimeout = config.getint('irs', 'scsi_rescan_minimal_timeout')
+-    if maxTimeout is None:
+-        maxTimeout = config.getint('irs', 'scsi_rescan_maximal_timeout')
++def rescan():
++    try:
++        iscsiadm.session_rescan()
++    except iscsiadm.IscsiError:
++        pass
++
+ 
++ at misc.samplingmethod
++def forceScsiScan():
++    processes = []
++    minTimeout = config.getint('irs', 'scsi_rescan_minimal_timeout')
++    maxTimeout = config.getint('irs', 'scsi_rescan_maximal_timeout')
++    for hba in glob.glob(SCAN_PATTERN):
++        cmd = [constants.EXT_DD, 'of=' + hba]
++        p = misc.execCmd(cmd, sudo=False, sync=False)
++        try:
++            p.stdin.write("- - -")
++            p.stdin.flush()
++            p.stdin.close()
++        except OSError as e:
++            if p.wait(0) is False:
++                log.error("pid %s still running", p.pid)
++            log.warning("Error in rescan of hba:%s with returncode:%s and "
++                        "error message: %s", hba, p.returncode,
++                        p.stderr.read(1000))
++            if e.errno != errno.EPIPE:
++                raise
++            else:
++                log.warning("Ignoring error in rescan of hba %s: ",
++                            hba, exc_info=True)
++                continue
++        processes.append((hba, p))
+     if (minTimeout > maxTimeout or minTimeout < 0):
+         minTimeout = 2
+         maxTimeout = 30
+@@ -388,13 +412,24 @@ def rescan(minTimeout=None, maxTimeout=None):
+                     "illegal value: scsi_rescan_minimal_timeout or "
+                     "scsi_rescan_maximal_timeout. Set to %s and %s seconds "
+                     "respectively.", minTimeout, maxTimeout)
+-
+     log.debug("Performing SCSI scan, this will take up to %s seconds",
+               maxTimeout)
+-
+-    rescanOp = iscsiadm.session_rescan_async()
+     time.sleep(minTimeout)
+-    rescanOp.wait(timeout=(maxTimeout - minTimeout))
++    for i in xrange(maxTimeout - minTimeout):
++        for p in processes[:]:
++            (hba, proc) = p
++            if proc.wait(0):
++                if proc.returncode != 0:
++                    log.warning('returncode for: %s is: %s', hba,
++                                proc.returncode)
++                processes.remove(p)
++        if not processes:
++            break
++        else:
++            time.sleep(1)
++    else:
++        log.warning("Still waiting for scsi scan of hbas: %s",
++                    tuple(hba for p in processes))
+ 
+ 
+ def devIsiSCSI(dev):
+diff --git a/vdsm/storage/iscsiadm.py b/vdsm/storage/iscsiadm.py
+index 9bb27ea..cd28db8 100644
+--- a/vdsm/storage/iscsiadm.py
++++ b/vdsm/storage/iscsiadm.py
+@@ -1,7 +1,6 @@
+ from threading import Lock
+ import misc
+ from vdsm import constants
+-from vdsm.utils import AsyncProcessOperation
+ 
+ # iscsiadm exit statuses
+ ISCSI_ERR_SESS_EXISTS = 15
+@@ -72,7 +71,7 @@ _RESERVED_INTERFACES = ("default", "tcp", "iser")
+ _iscsiadmLock = Lock()
+ 
+ 
+-def _runCmd(args, hideValue=False, sync=True):
++def _runCmd(args, hideValue=False):
+     # FIXME: I don't use supervdsm because this entire module has to just be
+     # run as root and there is no such feature yet in supervdsm. When such
+     # feature exists please change this.
+@@ -89,7 +88,7 @@ def _runCmd(args, hideValue=False, sync=True):
+                 if i < (len(printCmd) - 1):
+                     printCmd[i + 1] = "****"
+ 
+-        return misc.execCmd(cmd, printable=printCmd, sudo=True, sync=sync)
++        return misc.execCmd(cmd, printable=printCmd, sudo=True)
+ 
+ 
+ def iface_exists(interfaceName):
+@@ -295,21 +294,12 @@ def node_login(iface, portal, targetName):
+     raise IscsiNodeError(rc, out, err)
+ 
+ 
+-def session_rescan_async():
+-    proc = _runCmd(["-m", "session", "-R"], sync=False)
+-
+-    def parse_result(rc, out, err):
+-        if rc == 0:
+-            return
+-
+-        raise IscsiSessionError(rc, out, err)
+-
+-    return AsyncProcessOperation(proc, parse_result)
+-
+-
+ def session_rescan():
+-    aop = session_rescan_async()
+-    return aop.result()
++    rc, out, err = _runCmd(["-m", "session", "-R"])
++    if rc == 0:
++        return
++
++    raise IscsiSessionError(rc, out, err)
+ 
+ 
+ def session_logout(sessionId):
+diff --git a/vdsm/storage/multipath.py b/vdsm/storage/multipath.py
+index 29851f3..1f9773c 100644
+--- a/vdsm/storage/multipath.py
++++ b/vdsm/storage/multipath.py
+@@ -105,6 +105,8 @@ def rescan():
+     # First ask iSCSI to rescan all its sessions
+     iscsi.rescan()
+ 
++    supervdsm.getProxy().forceScsiScan()
++
+     # Now let multipath daemon pick up new devices
+     cmd = [constants.EXT_MULTIPATH, "-r"]
+     misc.execCmd(cmd, sudo=True)
+diff --git a/vdsm/supervdsmServer b/vdsm/supervdsmServer
+index 6ad3875..7fa1c2b 100755
+--- a/vdsm/supervdsmServer
++++ b/vdsm/supervdsmServer
+@@ -56,6 +56,7 @@ from md_utils import getMdDeviceUuidMap as _getMdDeviceUuidMap
+ 
+ from lsblk import getLsBlk as _getLsBlk
+ from storage.multipath import getScsiSerial as _getScsiSerial
++from storage.iscsi import forceScsiScan as _forceScsiScan
+ from storage.iscsi import getDevIscsiInfo as _getdeviSCSIinfo
+ from storage.iscsi import readSessionInfo as _readSessionInfo
+ from supervdsm import _SuperVdsmManager
+@@ -148,6 +149,10 @@ class _SuperVdsm(object):
+         return _getScsiSerial(*args, **kwargs)
+ 
+     @logDecorator
++    def forceScsiScan(self, *args, **kwargs):
++        return _forceScsiScan(*args, **kwargs)
++
++    @logDecorator
+     def removeDeviceMapping(self, devName):
+         return _removeMapping(devName)
+ 
+-- 
+1.8.4.2
+
diff --git a/0005-Report-conflict-when-python-cpopen-is-installed.patch b/0005-Report-conflict-when-python-cpopen-is-installed.patch
new file mode 100644
index 0000000..4b64281
--- /dev/null
+++ b/0005-Report-conflict-when-python-cpopen-is-installed.patch
@@ -0,0 +1,35 @@
+From a71e5a959f0e14565e55dc3b126f0be7530e4c66 Mon Sep 17 00:00:00 2001
+From: Yaniv Bronhaim <ybronhei at redhat.com>
+Date: Thu, 23 Jan 2014 15:38:22 +0200
+Subject: [PATCH] Report conflict when python-cpopen is installed
+
+vdsm-python-cpopen-4.13.2 cannot be installed in parallel to
+python-cpopen, because the latter the user should manually take care of
+removing python-cpopen if installed.
+This patch adds a conflict report when this scenario occurs.
+
+Change-Id: I0bcdf60a696e9b203555c83bda2c7053db5c6bfe
+Signed-off-by: Yaniv Bronhaim <ybronhei at redhat.com>
+Reviewed-on: http://gerrit.ovirt.org/23632
+Reviewed-by: Dan Kenigsberg <danken at redhat.com>
+Reviewed-by: Douglas Schilling Landgraf <dougsland at redhat.com>
+---
+ vdsm.spec.in |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/vdsm.spec.in b/vdsm.spec.in
+index bec4213..c8bbf8d 100644
+--- a/vdsm.spec.in
++++ b/vdsm.spec.in
+@@ -312,7 +312,7 @@ Manager.
+ Summary: Creates a sub-process in simpler safer manner.
+ 
+ BuildRequires: python2-devel
+-Provides: python-cpopen = 1.2.3
++Conflicts: python-cpopen
+ 
+ %description python-cpopen
+ Python package for creating sub-process in simpler and safer manner by using C
+-- 
+1.7.1
+
diff --git a/sources b/sources
index 5c03119..89af15a 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-b84739d65cc80cd1e94cad29fff0cad4  vdsm-4.14.1.tar.gz
+bb47fc8c9413620e1227a2c28a5aba0b  vdsm-4.13.3.tar.gz
diff --git a/vdsm.spec b/vdsm.spec
index 1f8a2dc..6d81baa 100644
--- a/vdsm.spec
+++ b/vdsm.spec
@@ -35,10 +35,6 @@
 %global with_gluster 1
 %endif
 
-%if ! 0%{?rhel}
-%global with_vhostmd 1
-%endif
-
 %if 0%{?fedora} >= 15 || 0%{?rhel} >= 7
 %global with_systemd 1
 %endif
@@ -49,7 +45,7 @@
 %endif
 
 Name:           %{vdsm_name}
-Version:        4.14.1
+Version:        4.13.3
 Release:        2%{?dist}%{?extra_release}
 Summary:        Virtual Desktop Server Manager
 
@@ -64,26 +60,23 @@ Url:            http://www.ovirt.org/wiki/Vdsm
 #  ./autogen.sh --system
 #  make VERSION={version}-{vdsm_release} dist
 Source0:        %{vdsm_name}-%{version}%{?vdsm_relttag}.tar.gz
-
-# ovirt-3.4 patches
-Patch0:         0001-vdsm.spec-Add-BuildRequires-to-python-argparse.patch
+# ovirt-3.3.3 patches
+Patch0:         0001-Using-old-form-of-zombiereaper.patch
+Patch1:         0002-Revert-Using-old-form-of-zombiereaper.patch
+Patch2:         0003-Revert-utils-Create-AsyncProcessOperation.patch
+Patch3:         0004-Revert-iscsi-Iscsi-rescan-cleanup.patch
+Patch4:         0005-Report-conflict-when-python-cpopen-is-installed.patch
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
-BuildRequires: gcc
 BuildRequires: python
 BuildRequires: python-devel
 BuildRequires: python-nose
 BuildRequires: python-netaddr
-BuildRequires: rpm-build
 
 # BuildRequires needed by the tests during the build
-BuildRequires: dosfstools
-BuildRequires: psmisc
 BuildRequires: python-ethtool
-BuildRequires: python-inotify
 BuildRequires: python-pthreading
-BuildRequires: python-cpopen >= 1.3
 BuildRequires: libselinux-python
 BuildRequires: libvirt-python
 BuildRequires: genisoimage
@@ -93,7 +86,6 @@ BuildRequires: m2crypto
 BuildRequires: python-dmidecode
 %endif
 %if 0%{?rhel} == 6
-BuildRequires: python-argparse
 BuildRequires: python-ordereddict
 %endif
 BuildRequires: python-ethtool
@@ -115,7 +107,6 @@ BuildRequires: python-pep8
 BuildRequires: systemd-units
 %endif
 
-Requires: ethtool
 Requires: which
 Requires: sudo >= 1.7.3
 Requires: logrotate
@@ -126,14 +117,11 @@ Requires: iproute
 Requires: python-netaddr
 Requires: python-inotify
 Requires: python-argparse
-Requires: python-cpopen >= 1.3
 Requires: python-ethtool >= 0.6-3
-Requires: %{name}-python-zombiereaper = %{version}-%{release}
 Requires: rpm-python
 Requires: nfs-utils
 Requires: m2crypto
 Requires: libguestfs-tools-c
-Requires: libnl
 Requires: %{name}-xmlrpc = %{version}-%{release}
 Requires: mom >= 0.3.2-3
 
@@ -150,24 +138,13 @@ Requires: libvirt-daemon-driver-nwfilter
 Requires: libvirt-daemon-driver-qemu
 %else
 %if 0%{?rhel}
-Requires: libvirt >= 0.10.2-18.el6_4.15
+Requires: libvirt >= 0.10.2-18.el6_4.10
 %else
 Requires: libvirt >= 1.0.2-1
 %endif
 %endif
 Requires: libvirt-python, libvirt-lock-sanlock, libvirt-client
 
-# iscsi-intiator versions
-%if 0%{?rhel}
-%if 0%{?rhel} >= 7
-Requires: iscsi-initiator-utils
-%else
-Requires: iscsi-initiator-utils >= 6.2.0.872-15
-%endif # rhel 7
-%else # fedora
-Requires: iscsi-initiator-utils >= 6.2.0.873-3
-%endif
-
 %if 0%{?rhel}
 Requires: python-ethtool >= 0.6-3
 %if 0%{?rhel} >= 7
@@ -175,12 +152,13 @@ ExclusiveArch:  x86_64
 Requires: device-mapper-multipath
 Requires: e2fsprogs
 Requires: fence-agents-all
+Requires: iscsi-initiator-utils
 Requires: lvm2
 Requires: python
 Requires: policycoreutils-python
 Requires: python-pthreading >= 0.1.2
 Requires: qemu-kvm
-Requires: qemu-img
+Requires: qemu-kvm-img
 Requires: sanlock, sanlock-python
 Requires: selinux-policy-targeted
 %else
@@ -188,6 +166,7 @@ Requires: python
 # Update the qemu-kvm requires when block_stream will be included
 Requires: qemu-kvm >= 2:0.12.1.2-2.295.el6_3.4
 Requires: qemu-img >= 2:0.12.1.2-2.295.el6_3.4
+Requires: iscsi-initiator-utils >= 6.2.0.873-3
 Requires: device-mapper-multipath >= 0.4.9-52
 Requires: e2fsprogs >= 1.41.12-11
 Requires: fence-agents
@@ -205,11 +184,9 @@ Requires: logrotate < 3.8.0
 %if 0%{?fedora} >= 19
 Requires: python-pthreading >= 0.1.2
 Requires: fence-agents-all
-Requires: kernel >= 3.11.3-201
 %else
 Requires: python-pthreading
 Requires: fence-agents
-Requires: kernel >= 3.6
 %endif
 # Subprocess and thread bug was found on python 2.7.2
 Requires: python >= 2.7.3
@@ -219,8 +196,10 @@ Requires: python-ethtool >= 0.8-1
 %if 0%{?fedora} >= 18
 Requires: initscripts >= 9.42.2-1
 %endif
+Requires: iscsi-initiator-utils >= 6.2.0.872-14
 Requires: device-mapper-multipath >= 0.4.9-18
 Requires: e2fsprogs >= 1.41.14
+Requires: kernel >= 3.6
 Requires: sanlock >= 2.4-2, sanlock-python
 Requires: policycoreutils-python
 Requires: sed >= 4.2.1-10
@@ -243,7 +222,7 @@ Requires: systemd >= 197-1.fc18.2
 
 # GlusterFS client-side RPMs needed for Gluster SD
 %if 0%{?with_gluster}
-Requires: glusterfs >= 3.4.2
+Requires: glusterfs >= 3.4.0
 Requires: glusterfs-cli
 Requires: glusterfs-api
 Requires: glusterfs-fuse
@@ -283,6 +262,7 @@ BuildArch:      noarch
 
 Requires: %{name}-python = %{version}-%{release}
 Requires: %{name}-xmlrpc = %{version}-%{release}
+Requires: %{name}-python-cpopen
 
 %description cli
 Call VDSM commands from the command line. Used for testing and debugging.
@@ -292,6 +272,7 @@ Summary:        VDSM xmlrpc API
 BuildArch:      noarch
 
 Requires: %{name}-python = %{version}-%{release}
+Requires: %{name}-python-cpopen
 
 
 %description xmlrpc
@@ -327,15 +308,6 @@ Requires:       python >= 2.6
 %description yajsonrpc
 A JSON RPC server and client implementation.
 
-%package python-zombiereaper
-Summary:        Collects zombie processes automatically
-BuildArch:      noarch
-
-Requires:       python >= 2.6
-
-%description python-zombiereaper
-Collects zombie processes automatically so you don't have to
-
 %package bootstrap
 Summary:        VDSM bootstrapping package
 BuildArch:      noarch
@@ -356,9 +328,18 @@ Requires: openssl
 VDSM registration package. Used to register a Linux host to a Virtualization
 Manager.
 
+%package python-cpopen
+Summary: Creates a sub-process in simpler safer manner.
+
+BuildRequires: python2-devel
+Conflicts: python-cpopen
+
+%description python-cpopen
+Python package for creating sub-process in simpler and safer manner by using C
+code.
+
 %package python
 Summary:        VDSM python libraries
-Requires:       %{name}-python-zombiereaper = %{version}-%{release}
 
 %description python
 Shared libraries between the various VDSM packages.
@@ -391,7 +372,6 @@ Requires:       vdsm
 VDSM hook used to perform consistency check on a qcow2 format disk image
 using the QEMU disk image utility.
 
-%if 0%{?with_vhostmd}
 %package hook-vhostmd
 Summary:        VDSM hook set for interaction with vhostmd
 Requires:       vhostmd
@@ -399,7 +379,6 @@ BuildArch:      noarch
 
 %description hook-vhostmd
 VDSM hook to use vhostmd per VM according to Virtualization Manager requests.
-%endif
 
 %package hook-faqemu
 Summary:        Fake qemu process for VDSM quality assurance
@@ -429,15 +408,6 @@ VDSM hooks which allow to disable mac spoof filtering
 either on all the of the VM's interfaces or on
 specific vnics.
 
-%package hook-extnet
-Summary:        Force a vNIC to connect to a specific libvirt network
-BuildArch:      noarch
-Requires:       vdsm = %{version}-%{release}
-
-%description hook-extnet
-VDSM hook which allows to connect a vNIC to a libvirt network that is managed
-outside of oVirt, such as an openvswitch network.
-
 %package hook-fileinject
 Summary:        Allow uploading file to VMs disk
 BuildArch:      noarch
@@ -569,21 +539,10 @@ directly to a virtual machine.
 %package hook-vmfex
 Summary:        vmfex support for VDSM
 BuildArch:      noarch
-Conflicts:      hook-vmfex-dev
 
 %description hook-vmfex
 Hook for vmfex.
 
-%package hook-vmfex-dev
-Summary:        VM-FEX vNIC support for VDSM
-BuildArch:      noarch
-Requires:       vdsm = %{version}-%{release}
-Conflicts:      hook-vmfex
-
-%description hook-vmfex-dev
-Allows to use custom device properties to connect a guest vNIC to a host
-VM-FEX Virtual Function (SR-IOV with macvtap mode).
-
 %package hook-vmdisk
 Summary:        External disk support for VDSM
 BuildArch:      noarch
@@ -606,9 +565,13 @@ Gluster plugin enables VDSM to serve Gluster functionalities.
 
 %prep
 %setup -q
-
-# ovirt-3.4 patches
+# ovirt-3.3.3 patches
 %patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+
 
 %if 0%{?rhel} == 6
 sed -i '/ su /d' vdsm/vdsm-logrotate.conf.in
@@ -648,6 +611,8 @@ install -Dm 0755 init/systemd/systemd-vdsmd %{buildroot}/lib/systemd/systemd-vds
 install -Dm 0644 init/systemd/vdsmd.service %{buildroot}%{_unitdir}/vdsmd.service
 install -Dm 0644 init/systemd/supervdsmd.service %{buildroot}%{_unitdir}/supervdsmd.service
 
+install -Dm 0644 init/systemd/vdsm-restore-net-config.service \
+                 %{buildroot}%{_unitdir}/vdsm-restore-net-config.service
 install -Dm 0755 vdsm_reg/vdsm-reg.init \
                  %{buildroot}/lib/systemd/systemd-vdsm-reg
 install -Dm 0644 vdsm_reg/vdsm-reg.service \
@@ -660,6 +625,8 @@ install -Dm 0755 init/sysvinit/vdsmd.init %{buildroot}%{_initrddir}/vdsmd
 install -Dm 0755 init/sysvinit/supervdsmd.init %{buildroot}%{_initrddir}/supervdsmd
 
 install -Dm 0755 vdsm_reg/vdsm-reg.init %{buildroot}%{_initrddir}/vdsm-reg
+install -Dm 0755 init/sysvinit/vdsm-restore-net-config.init \
+    %{buildroot}%{_initrddir}/vdsm-restore-net-config
 %endif
 
 %if 0%{?with_tmpfiles_macro}
@@ -702,6 +669,7 @@ export LC_ALL=C
     /usr/sbin/useradd -r -u 36 -g %{vdsm_group} -d /var/lib/vdsm \
         -s /sbin/nologin -c "Node Virtualization Manager" %{vdsm_user}
 /usr/sbin/usermod -a -G %{qemu_group},%{snlk_group} %{vdsm_user}
+/usr/sbin/usermod -a -G %{qemu_group},%{vdsm_group} %{snlk_user}
 
 %post
 %{_bindir}/vdsm-tool sebool-config || :
@@ -722,20 +690,24 @@ fi
 /sbin/restorecon -R /var/log/core >/dev/null 2>&1
 # hack until we replace core dump with abrt
 
-%if ! 0%{?with_systemd}
+%if 0%{?rhel}
 if [ "$1" -eq 1 ] ; then
     /sbin/chkconfig --add vdsmd
     /sbin/chkconfig --add supervdsmd
+    /sbin/chkconfig --add vdsm-restore-net-config
 fi
 %else
+%if 0%{?with_systemd}
 /bin/systemctl restart systemd-modules-load.service >/dev/null 2>&1 || :
 if [ "$1" -eq 1 ] ; then
     /bin/systemctl enable vdsmd.service >/dev/null 2>&1 || :
     /bin/systemctl enable supervdsmd.service >/dev/null 2>&1 || :
+    /bin/systemctl enable vdsm-restore-net-config.service >/dev/null 2>&1 || :
     /bin/systemctl daemon-reload >/dev/null 2>&1 || :
 fi
 exit 0
 %endif
+%endif
 
 %preun
 if [ "$1" -eq 0 ]; then
@@ -756,13 +728,14 @@ if [ "$1" -eq 0 ]; then
         /bin/sed -i -e 's/# VDSM backup//' %{_sysconfdir}/logrotate.d/libvirtd
 fi
 
-%if ! 0%{?with_systemd}
+%if 0%{?rhel}
 if [ "$1" -eq 0 ]
 then
     /sbin/service vdsmd stop > /dev/null 2>&1 || :
     /sbin/chkconfig --del vdsmd
     /sbin/service supervdsmd stop > /dev/null 2>&1 || :
     /sbin/chkconfig --del supervdsmd
+    /sbin/chkconfig --del vdsm-restore-net-config
 
     /bin/sed -i '/# VDSM section begin/,/# VDSM section end/d' \
         /etc/sysctl.conf
@@ -783,10 +756,12 @@ fi
 %if 0%{?with_systemd_macros}
 %systemd_preun vdsmd.service
 %systemd_preun supervdsmd.service
+%systemd_preun vdsm-restore-net-config.service
 %else
 if [ "$1" -eq 0 ]; then
     /bin/systemctl --no-reload disable vdsmd.service > /dev/null 2>&1 || :
     /bin/systemctl --no-reload disable supervdsmd.service > /dev/null 2>&1 || :
+    /bin/systemctl --no-reload disable vdsm-restore-net-config.service > /dev/null 2>&1 || :
     /bin/systemctl stop vdsmd.service > /dev/null 2>&1 || :
     /bin/systemctl stop supervdsmd.service > /dev/null 2>&1 || :
 fi
@@ -798,46 +773,27 @@ exit 0
 if [ "$1" -ge 1 ]; then
     supervdsmd_start_required='no'
     vdsmd_start_required='no'
-
-    # Both vdsm and supervdsm should be managed here and must be restarted if
-    # ran before (code might changed)
     if %{_bindir}/vdsm-tool service-status vdsmd >/dev/null 2>&1; then
-        %{_bindir}/vdsm-tool service-stop vdsmd >/dev/null 2>&1 || :
+        %{_bindir}/vdsm-tool service-stop vdsmd >/dev/null 2>&1
         vdsmd_start_required='yes'
     fi
     if %{_bindir}/vdsm-tool service-status supervdsmd >/dev/null 2>&1; then
-        %{_bindir}/vdsm-tool service-stop supervdsmd >/dev/null 2>&1 || :
+        %{_bindir}/vdsm-tool service-stop supervdsmd >/dev/null 2>&1
         supervdsmd_start_required='yes'
     fi
 
-    if ! %{_bindir}/vdsm-tool is-configured --module libvirt >/dev/null 2>&1;
-    then
-        if ! %{_bindir}/vdsm-tool configure --module libvirt --force \
-                >/dev/null 2>&1; then
-            # fallback to vdsmd reconfigure api - This change may be removed
-            # when vdsm won't support any downgrade\upgrade to versions that
-            # don't include vdsm-tool configure api (vdsm <= 3.3)
-            for f in '/lib/systemd/systemd-vdsmd' '/etc/init.d/vdsmd'; do
-                if [ -f "${f}" ]; then
-                    "${f}" reconfigure >/dev/null 2>&1 || :
-                fi
-            done
-        fi
-    fi
+    %{_bindir}/vdsm-tool libvirt-configure >/dev/null 2>&1
 
     if [ "${supervdsmd_start_required}" = 'yes' ]; then
-        %{_bindir}/vdsm-tool service-start supervdsmd >/dev/null 2>&1 || :
+        %{_bindir}/vdsm-tool service-start supervdsmd >/dev/null 2>&1
     fi
     if [ "${vdsmd_start_required}" = 'yes' ]; then
-        %{_bindir}/vdsm-tool service-start vdsmd >/dev/null 2>&1 || :
+        %{_bindir}/vdsm-tool service-start vdsmd >/dev/null 2>&1
     fi
 fi
 exit 0
 
-%if 0%{?rhel} == 6
-# In el6, We configure libvirt to use upstart without the libvirt.rpm's
-# awareness. Thus, we must stop/restart libvirt ourselves when the
-# libvirt.rpm is removed/upgraded.
+%if 0%{?rhel}
 %triggerun -- libvirt
 if [ "$2" -eq "0" ]; then
     /sbin/initctl stop libvirtd > /dev/null 2>&1 || :
@@ -850,7 +806,7 @@ fi
 %endif
 
 %post reg
-%if ! 0%{?with_systemd}
+%if 0%{?rhel}
 if [ "$1" -eq 1 ] ; then
     /sbin/chkconfig --add vdsm-reg
 fi
@@ -867,7 +823,7 @@ exit 0
 %endif
 
 %preun reg
-%if ! 0%{?with_systemd}
+%if 0%{?rhel}
 if [ "$1" -eq 0 ]
 then
     /sbin/service vdsm-reg stop > /dev/null 2>&1 || :
@@ -892,9 +848,11 @@ exit 0
 /lib/systemd/systemd-vdsmd
 %{_unitdir}/vdsmd.service
 %{_unitdir}/supervdsmd.service
+%{_unitdir}/vdsm-restore-net-config.service
 %else
 %{_initrddir}/vdsmd
 %{_initrddir}/supervdsmd
+%{_initrddir}/vdsm-restore-net-config
 %endif
 
 %dir %attr(-, %{vdsm_user}, %{vdsm_group}) /rhev/data-center
@@ -904,7 +862,6 @@ exit 0
 %dir %{_sysconfdir}/%{vdsm_name}
 %dir %{_sysconfdir}/%{vdsm_name}/mom.d
 %dir %{_datadir}/%{vdsm_name}
-%dir %{_datadir}/%{vdsm_name}/netconf
 %dir %{_datadir}/%{vdsm_name}/storage
 %dir %{_datadir}/%{vdsm_name}/storage/imageRepository
 %{_datadir}/%{vdsm_name}/alignmentScan.py*
@@ -921,7 +878,6 @@ exit 0
 %{_datadir}/%{vdsm_name}/mk_sysprep_floppy
 %{_datadir}/%{vdsm_name}/parted_utils.py*
 %{_datadir}/%{vdsm_name}/mkimage.py*
-%{_datadir}/%{vdsm_name}/ppc64HardwareInfo.py*
 %{_datadir}/%{vdsm_name}/sourceRoute.py*
 %{_datadir}/%{vdsm_name}/sourceRouteThread.py*
 %{_datadir}/%{vdsm_name}/supervdsm.py*
@@ -932,10 +888,9 @@ exit 0
 %{_datadir}/%{vdsm_name}/vdsm-restore-net-config
 %{_datadir}/%{vdsm_name}/vdsm-store-net-config
 %{_datadir}/%{vdsm_name}/vm.py*
-
+%{_datadir}/%{vdsm_name}/zombieReaper.py*
 %config(noreplace) %{_sysconfdir}/%{vdsm_name}/logger.conf
 %config(noreplace) %{_sysconfdir}/%{vdsm_name}/svdsm.logger.conf
-%config(noreplace) %{_sysconfdir}/%{vdsm_name}/upgrade.logger.conf
 %config(noreplace) %{_sysconfdir}/%{vdsm_name}/mom.conf
 %config(noreplace) %{_sysconfdir}/%{vdsm_name}/mom.d/*.policy
 %config(noreplace) %{_sysconfdir}/logrotate.d/vdsm
@@ -980,7 +935,6 @@ exit 0
 %{_datadir}/%{vdsm_name}/storage/iscsiadm.py*
 %{_datadir}/%{vdsm_name}/storage/iscsi.py*
 %{_datadir}/%{vdsm_name}/storage/localFsSD.py*
-%{_datadir}/%{vdsm_name}/storage/lvm.env
 %{_datadir}/%{vdsm_name}/storage/lvm.py*
 %{_datadir}/%{vdsm_name}/storage/misc.py*
 %{_datadir}/%{vdsm_name}/storage/mount.py*
@@ -996,7 +950,6 @@ exit 0
 %{_datadir}/%{vdsm_name}/storage/sd.py*
 %{_datadir}/%{vdsm_name}/storage/securable.py*
 %{_datadir}/%{vdsm_name}/storage/sp.py*
-%{_datadir}/%{vdsm_name}/storage/spbackends.py*
 %{_datadir}/%{vdsm_name}/storage/storageConstants.py*
 %{_datadir}/%{vdsm_name}/storage/storage_exception.py*
 %{_datadir}/%{vdsm_name}/storage/storage_mailbox.py*
@@ -1012,7 +965,6 @@ exit 0
 %{_libexecdir}/%{vdsm_name}/safelease
 %{_libexecdir}/%{vdsm_name}/spmprotect.sh
 %{_libexecdir}/%{vdsm_name}/spmstop.sh
-%dir %{_libexecdir}/%{vdsm_name}/hooks
 %dir %{_libexecdir}/%{vdsm_name}/hooks/before_device_create
 %dir %{_libexecdir}/%{vdsm_name}/hooks/after_device_create
 %dir %{_libexecdir}/%{vdsm_name}/hooks/before_device_destroy
@@ -1054,10 +1006,6 @@ exit 0
 %dir %{_libexecdir}/%{vdsm_name}/hooks/after_disk_hotunplug
 %dir %{_libexecdir}/%{vdsm_name}/hooks/before_vdsm_start
 %dir %{_libexecdir}/%{vdsm_name}/hooks/after_vdsm_stop
-%dir %{_libexecdir}/%{vdsm_name}/hooks/before_network_setup
-%dir %{_libexecdir}/%{vdsm_name}/hooks/after_network_setup
-%dir %{_libexecdir}/%{vdsm_name}/hooks/before_set_num_of_cpus
-%dir %{_libexecdir}/%{vdsm_name}/hooks/after_set_num_of_cpus
 %{_datadir}/%{vdsm_name}/addNetwork
 %{_datadir}/%{vdsm_name}/configNetwork.py*
 %{_datadir}/%{vdsm_name}/delNetwork
@@ -1067,7 +1015,6 @@ exit 0
 %{_datadir}/%{vdsm_name}/ksm.py*
 %{_datadir}/%{vdsm_name}/momIF.py*
 %{_datadir}/%{vdsm_name}/netconf/__init__.py*
-%{_datadir}/%{vdsm_name}/netconf/dhclient.py*
 %{_datadir}/%{vdsm_name}/netconf/ifcfg.py*
 %{_datadir}/%{vdsm_name}/netconf/libvirtCfg.py*
 %{_datadir}/%{vdsm_name}/netconf/iproute2.py*
@@ -1110,11 +1057,10 @@ exit 0
 %config(noreplace) %{_sysconfdir}/pki/%{vdsm_name}/keys/libvirt_password
 %dir %{_localstatedir}/lib/%{vdsm_name}
 %dir %{_localstatedir}/lib/%{vdsm_name}/netconfback
-%dir %{_localstatedir}/lib/%{vdsm_name}/persistence
-%dir %{_localstatedir}/lib/%{vdsm_name}/upgrade
 %dir %{_localstatedir}/run/%{vdsm_name}
 %dir %{_localstatedir}/run/%{vdsm_name}/sourceRoutes
 %dir %{_localstatedir}/run/%{vdsm_name}/trackedInterfaces
+%ghost %dir %{_localstatedir}/run/%{vdsm_name}/pools
 %ghost %dir %{_localstatedir}/run/%{vdsm_name}/payload
 %dir %{_localstatedir}/log/%{vdsm_name}
 %dir %{_localstatedir}/log/%{vdsm_name}/backup
@@ -1125,8 +1071,6 @@ exit 0
 %if !0%{?rhel}
 %config(noreplace) %{_sysconfdir}/%{vdsm_name}/vdsm.conf
 %endif
-%dir %{python_sitearch}/%{vdsm_name}
-%dir %{python_sitearch}/%{vdsm_name}/tool
 %{python_sitearch}/%{vdsm_name}/__init__.py*
 %{python_sitearch}/%{vdsm_name}/config.py*
 %{python_sitearch}/%{vdsm_name}/constants.py*
@@ -1135,10 +1079,8 @@ exit 0
 %{python_sitearch}/%{vdsm_name}/ipwrapper.py*
 %{python_sitearch}/%{vdsm_name}/libvirtconnection.py*
 %{python_sitearch}/%{vdsm_name}/netinfo.py*
-%{python_sitearch}/%{vdsm_name}/netlink.py*
 %{python_sitearch}/%{vdsm_name}/qemuImg.py*
 %{python_sitearch}/%{vdsm_name}/SecureXMLRPCServer.py*
-%{python_sitearch}/%{vdsm_name}/netconfpersistence.py*
 %{python_sitearch}/%{vdsm_name}/utils.py*
 %{python_sitearch}/%{vdsm_name}/vdscli.py*
 %{python_sitearch}/%{vdsm_name}/tool/__init__.py*
@@ -1149,34 +1091,25 @@ exit 0
 %endif
 %{python_sitearch}/%{vdsm_name}/tool/dummybr.py*
 %{python_sitearch}/%{vdsm_name}/tool/nwfilter.py*
-%{python_sitearch}/%{vdsm_name}/tool/configurator.py*
+%{python_sitearch}/%{vdsm_name}/tool/libvirt_configure.py*
 %{_libexecdir}/%{vdsm_name}/libvirt_configure.sh
 %{python_sitearch}/%{vdsm_name}/tool/passwd.py*
-%{python_sitearch}/%{vdsm_name}/tool/restore_nets.py*
+%{python_sitearch}/%{vdsm_name}/tool/sanlock.py*
 %{python_sitearch}/%{vdsm_name}/tool/seboolsetup.py*
 %{python_sitearch}/%{vdsm_name}/tool/service.py*
-%{python_sitearch}/%{vdsm_name}/tool/transient.py*
-%{python_sitearch}/%{vdsm_name}/tool/unified_persistence.py*
-%{python_sitearch}/%{vdsm_name}/tool/upgrade.py*
-%{python_sitearch}/%{vdsm_name}/tool/upgrade_300_networks.py*
 %{python_sitearch}/%{vdsm_name}/tool/validate_ovirt_certs.py*
 %{python_sitearch}/%{vdsm_name}/tool/vdsm-id.py*
 
 %files tests
 %doc %{_datadir}/%{vdsm_name}/tests/README
 %defattr(-, root, root, -)
-%dir %{_datadir}/%{vdsm_name}/tests
-%dir %{_datadir}/%{vdsm_name}/tests/functional
 %{_datadir}/%{vdsm_name}/tests/*.py*
 %{_datadir}/%{vdsm_name}/tests/cpu_info.out
 %{_datadir}/%{vdsm_name}/tests/caps_libvirt_intel_E5649.out
 %{_datadir}/%{vdsm_name}/tests/caps_libvirt_amd_6274.out
 %{_datadir}/%{vdsm_name}/tests/caps_libvirt_intel_E31220.out
-%{_datadir}/%{vdsm_name}/tests/caps_lscpu_ppc64_1_4_4.out
-%{_datadir}/%{vdsm_name}/tests/caps_lscpu_ppc64_2_4_8.out
 %{_datadir}/%{vdsm_name}/tests/glob_1c60971a-8647-44ac-ae33-6520887f8843.out
 %{_datadir}/%{vdsm_name}/tests/lvs_3386c6f2-926f-42c4-839c-38287fac8998.out
-%{_datadir}/%{vdsm_name}/tests/mem_info.out
 %{_datadir}/%{vdsm_name}/tests/netmaskconversions
 %{_datadir}/%{vdsm_name}/tests/run_tests.sh
 %{_datadir}/%{vdsm_name}/tests/tc_filter_show.out
@@ -1184,7 +1117,6 @@ exit 0
 %{_datadir}/%{vdsm_name}/tests/glusterVolumeProfileInfoNfs.xml
 %{_datadir}/%{vdsm_name}/tests/glusterVolumeRebalanceStatus.xml
 %{_datadir}/%{vdsm_name}/tests/glusterVolumeRemoveBricksStatus.xml
-%{_datadir}/%{vdsm_name}/tests/glusterVolumeTasks.xml
 %{_datadir}/%{vdsm_name}/tests/functional/*.py*
 %{_datadir}/%{vdsm_name}/tests/functional/*.policy
 
@@ -1192,21 +1124,16 @@ exit 0
 %defattr(-, root, root, -)
 %{_sysconfdir}/sudoers.d/50_vdsm_hook_openstacknet
 %{_libexecdir}/%{vdsm_name}/hooks/after_device_create/50_openstacknet
-%{_libexecdir}/%{vdsm_name}/hooks/after_device_create/openstacknet_utils.py*
-%{_libexecdir}/%{vdsm_name}/hooks/after_device_destroy/50_openstacknet
-%{_libexecdir}/%{vdsm_name}/hooks/after_device_destroy/openstacknet_utils.py*
+%{_libexecdir}/%{vdsm_name}/hooks/after_device_create/openstacknet_consts.py*
 %{_libexecdir}/%{vdsm_name}/hooks/after_device_migrate_destination/50_openstacknet
-%{_libexecdir}/%{vdsm_name}/hooks/after_device_migrate_destination/openstacknet_utils.py*
+%{_libexecdir}/%{vdsm_name}/hooks/after_device_migrate_destination/openstacknet_consts.py*
 %{_libexecdir}/%{vdsm_name}/hooks/after_nic_hotplug/50_openstacknet
-%{_libexecdir}/%{vdsm_name}/hooks/after_nic_hotplug/openstacknet_utils.py*
-%{_libexecdir}/%{vdsm_name}/hooks/after_nic_hotunplug/50_openstacknet
-%{_libexecdir}/%{vdsm_name}/hooks/after_nic_hotunplug/openstacknet_utils.py*
+%{_libexecdir}/%{vdsm_name}/hooks/after_nic_hotplug/openstacknet_consts.py*
 %{_libexecdir}/%{vdsm_name}/hooks/before_device_create/50_openstacknet
-%{_libexecdir}/%{vdsm_name}/hooks/before_device_create/openstacknet_utils.py*
+%{_libexecdir}/%{vdsm_name}/hooks/before_device_create/openstacknet_consts.py*
 %{_libexecdir}/%{vdsm_name}/hooks/before_nic_hotplug/50_openstacknet
-%{_libexecdir}/%{vdsm_name}/hooks/before_nic_hotplug/openstacknet_utils.py*
+%{_libexecdir}/%{vdsm_name}/hooks/before_nic_hotplug/openstacknet_consts.py*
 
-%if 0%{?with_vhostmd}
 %files hook-vhostmd
 %defattr(-, root, root, -)
 %doc COPYING
@@ -1215,13 +1142,6 @@ exit 0
 %{_libexecdir}/%{vdsm_name}/hooks/before_vm_migrate_destination/50_vhostmd
 %{_libexecdir}/%{vdsm_name}/hooks/before_vm_dehibernate/50_vhostmd
 %{_libexecdir}/%{vdsm_name}/hooks/after_vm_destroy/50_vhostmd
-%else
-%exclude %{_sysconfdir}/sudoers.d/50_vdsm_hook_vhostmd
-%exclude %{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_vhostmd
-%exclude %{_libexecdir}/%{vdsm_name}/hooks/before_vm_migrate_destination/50_vhostmd
-%exclude %{_libexecdir}/%{vdsm_name}/hooks/before_vm_dehibernate/50_vhostmd
-%exclude %{_libexecdir}/%{vdsm_name}/hooks/after_vm_destroy/50_vhostmd
-%endif
 
 %files hook-qemucmdline
 %defattr(-, root, root, -)
@@ -1274,11 +1194,6 @@ exit 0
 %{_libexecdir}/%{vdsm_name}/hooks/before_device_create/50_macspoof
 %{_libexecdir}/%{vdsm_name}/hooks/before_nic_hotplug/50_macspoof
 
-%files hook-extnet
-%defattr(-, root, root, -)
-%{_libexecdir}/%{vdsm_name}/hooks/before_device_create/50_extnet
-%{_libexecdir}/%{vdsm_name}/hooks/before_nic_hotplug/50_extnet
-
 %files hook-nestedvt
 %defattr(-, root, root, -)
 %{_sysconfdir}/modprobe.d/vdsm-nestedvt.conf
@@ -1327,12 +1242,6 @@ exit 0
 %defattr(-, root, root, -)
 %{_libexecdir}/%{vdsm_name}/hooks/before_vm_migrate_destination/50_vmfex
 %{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_vmfex
-
-%files hook-vmfex-dev
-%defattr(-, root, root, -)
-%{_libexecdir}/%{vdsm_name}/hooks/before_device_create/50_vmfex
-%{_libexecdir}/%{vdsm_name}/hooks/before_device_migrate_destination/50_vmfex
-%{_libexecdir}/%{vdsm_name}/hooks/before_nic_hotplug/50_vmfex
 %endif
 
 %files debug-plugin
@@ -1351,7 +1260,6 @@ exit 0
 
 %files xmlrpc
 %defattr(-, root, root, -)
-%dir %{_datadir}/%{vdsm_name}
 %{_datadir}/%{vdsm_name}/BindingXMLRPC.py*
 
 %files api
@@ -1364,15 +1272,11 @@ exit 0
 %{_datadir}/%{vdsm_name}/Bridge.py*
 
 %files yajsonrpc
-%dir %{python_sitelib}/yajsonrpc
 %{python_sitelib}/yajsonrpc/__init__.py*
 %{python_sitelib}/yajsonrpc/asyncoreReactor.py*
 %{python_sitelib}/yajsonrpc/protonReactor.py*
 %{python_sitelib}/yajsonrpc/client.py*
 
-%files python-zombiereaper
-%{python_sitelib}/zombiereaper/__init__.py*
-
 %files bootstrap
 %defattr(-, root, root, -)
 %doc COPYING
@@ -1426,18 +1330,15 @@ exit 0
 %{_datadir}/%{vdsm_name}/gluster/vdsmapi-gluster-schema.json
 %{_datadir}/%{vdsm_name}/gluster/hooks.py*
 %{_datadir}/%{vdsm_name}/gluster/services.py*
-%{_datadir}/%{vdsm_name}/gluster/tasks.py*
 %endif
 
-%changelog
-* Tue Jan 21 2014 Douglas Schilling Landgraf <dougsland at redhat.com> - 4.14.1-2
-- vdsm.spec: Add BuildRequires to python-argparse
-
-* Mon Jan 20 2014 Douglas Schilling Landgraf <dougsland at redhat.com> - 4.14.1-1
-- Rebuild 4.14.1 from ovirt-3.4
+%files python-cpopen
+%{python_sitearch}/cpopen/__init__.py*
+%attr(755, root, root) %{python_sitearch}/cpopen/cpopen.so*
 
-* Mon Jan 20 2014 Douglas Schilling Landgraf <dougsland at redhat.com> - 4.14.1-0
-- Build 4.14.1-0
+%changelog
+* Thu Jan 23 2014 Douglas Schilling Landgraf <dougsland at redhat.com> - 4.13.3-2
+- Report conflict when python-cpopen is installed
 
 * Mon Jan 13 2014 Yaniv Bronhaim <ybronhei at redhat.com> - 4.13.3-1
 - Reverting iscsi changes that caused a regression by importing


More information about the scm-commits mailing list