Alon Bar-Lev has uploaded a new change for review.

Change subject: packaging: periodically check if ovirt-engine upgrade available
......................................................................

packaging: periodically check if ovirt-engine upgrade available

Using yum API and version lock plugin disabled check if there is a newer
version of ovirt-engine package.

If there is, create a trigger file at:

 /var/cache/ovirt-engine/engine-upgrade.available

It is the responsibility of the engine to monitor this trigger and clean
when act upon.

COMPONENTS

engine-upgrade-check.py
        A simple utility to check if update is available.
        It will echo AVAILABLE if it finds update.

engine-upgrade-check.cron
        cron.d script to be executed daily. Uses
        engine-upgrade-check.py to detect update and creates the
        trigger.

Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=836659
Signed-off-by: Alon Bar-Lev <alo...@redhat.com>
Change-Id: I76019e8ccc3e77d70b812bd9187c0cbdbb3f4f07
---
M Makefile
A packaging/fedora/setup/engine-upgrade-check.py
M packaging/fedora/spec/ovirt-engine.spec.in
A packaging/resources/engine-upgrade-check.cron
4 files changed, 120 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/76/10976/1

diff --git a/Makefile b/Makefile
index 509b354..ad21d8f 100644
--- a/Makefile
+++ b/Makefile
@@ -256,6 +256,7 @@
        install -m 644 packaging/fedora/setup/setup_controller.py 
$(DESTDIR)$(DATA_DIR)/scripts
        install -m 644 packaging/fedora/setup/common_utils.py 
$(DESTDIR)$(DATA_DIR)/scripts
        install -m 644 packaging/fedora/setup/miniyum.py 
$(DESTDIR)$(DATA_DIR)/scripts
+       install -m 755 packaging/fedora/setup/engine-upgrade-check.py 
$(DESTDIR)$(DATA_DIR)/scripts
        install -m 644 packaging/fedora/setup/output_messages.py 
$(DESTDIR)$(DATA_DIR)/scripts
        install -m 644 packaging/fedora/setup/post_upgrade.py 
$(DESTDIR)$(DATA_DIR)/scripts
        install -m 644 
packaging/fedora/setup/add_fn_db_get_async_tasks_function.sql 
$(DESTDIR)$(DATA_DIR)/scripts
@@ -361,6 +362,7 @@
        install -m 644 backend/manager/conf/engine.conf.defaults 
$(DESTDIR)$(DATA_DIR)/conf
        install -m 755 packaging/resources/ovirtlogrot.sh 
${DESTDIR}$(DATA_DIR)/scripts/
        install -m 755 packaging/resources/ovirt-cron 
${DESTDIR}$(SYSCONF_DIR)/cron.daily/
+       install -m 755 packaging/resources/engine-upgrade-check.cron 
${DESTDIR}$(SYSCONF_DIR)/cron.daily/
 
        # USB filter:
        install -m 644 frontend/usbfilter.txt $(DESTDIR)$(PKG_SYSCONF_DIR)
diff --git a/packaging/fedora/setup/engine-upgrade-check.py 
b/packaging/fedora/setup/engine-upgrade-check.py
new file mode 100755
index 0000000..c2fdaa3
--- /dev/null
+++ b/packaging/fedora/setup/engine-upgrade-check.py
@@ -0,0 +1,95 @@
+#!/usr/bin/python
+
+import os
+import sys
+import logging
+from optparse import OptionParser
+
+
+import miniyum
+import basedefs
+
+
+class MyMiniYumSink(miniyum.MiniYumSinkBase):
+    """Events."""
+
+    def __init__(self):
+        """dup the stdout as during yum operation so we redirect it."""
+        super(MyMiniYumSink, self).__init__()
+        self._stream = os.dup(sys.stdout.fileno())
+
+    def __del__(self):
+        os.close(self._stream)
+
+    def verbose(self, msg):
+        super(MyMiniYumSink, self).verbose(msg)
+        os.write(self._stream, ('VERB: %s\n' % msg).encode('utf-8'))
+
+    def info(self, msg):
+        super(MyMiniYumSink, self).info(msg)
+        os.write(self._stream, ('OK:   %s\n' % msg).encode('utf-8'))
+
+    def error(self, msg):
+        super(MyMiniYumSink, self).error(msg)
+        os.write(self._stream, ('FAIL: %s\n' % msg).encode('utf-8'))
+
+
+def main():
+    parser = OptionParser()
+    parser.prog = sys.argv[0]
+    parser.add_option(
+        '-q', '--quiet',
+        action='store_true',
+        dest='quiet',
+        default=False,
+        help='Quiet output',
+    )
+    parser.add_option(
+        '-d', '--debug',
+        action='store_true',
+        dest='debug',
+        default=False,
+        help='Enable debugging',
+    )
+    (options, args) = parser.parse_args()
+
+    try:
+        upgradeAvailable = False
+
+        if options.quiet:
+            miniyumsink = miniyum.MiniYumSinkBase()
+        else:
+            miniyumsink = MyMiniYumSink()
+
+        miniyum.MiniYum.setup_log_hook(sink=miniyumsink)
+        _miniyum = miniyum.MiniYum(
+            sink=miniyumsink,
+            blockStdHandles=not options.debug,
+            disabledPlugins=['versionlock'],
+        )
+        _miniyum.selinux_role()
+
+        with _miniyum.transaction():
+            _miniyum.update(packages=[basedefs.ENGINE_RPM_NAME])
+            if _miniyum.buildTransaction():
+                upgradeAvailable = True
+                if not options.quiet:
+                    for p in _miniyum.queryTransaction():
+                        miniyumsink.info('    %s - %s' % (
+                            p['operation'],
+                            p['display_name']
+                        ))
+
+        if upgradeAvailable:
+            print('AVAILABLE')
+        sys.exit(0)
+    except SystemExit:
+        pass
+    except:
+        if not options.quiet:
+            logging.error('Error', exc_info=True)
+        sys.exit(1)
+
+main()
+
+# vim: expandtab tabstop=4 shiftwidth=4
diff --git a/packaging/fedora/spec/ovirt-engine.spec.in 
b/packaging/fedora/spec/ovirt-engine.spec.in
index 67aae80..237828e 100644
--- a/packaging/fedora/spec/ovirt-engine.spec.in
+++ b/packaging/fedora/spec/ovirt-engine.spec.in
@@ -560,6 +560,7 @@
 # Log rotation script:
 %{engine_data}/scripts/ovirtlogrot.sh
 %{_sysconfdir}/cron.daily/ovirt-cron
+%{_sysconfdir}/cron.daily/engine-upgrade-check.cron
 
 # Misc configuration files:
 %{engine_data}/conf
@@ -700,6 +701,7 @@
 %{engine_data}/scripts/setup_controller.py*
 %{engine_data}/scripts/common_utils.py*
 %{engine_data}/scripts/miniyum.py*
+%{engine_data}/scripts/engine-upgrade-check.py*
 %{engine_data}/scripts/output_messages.py*
 %{engine_data}/scripts/nfsutils.py*
 %{engine_data}/scripts/engine-setup.py*
diff --git a/packaging/resources/engine-upgrade-check.cron 
b/packaging/resources/engine-upgrade-check.cron
new file mode 100755
index 0000000..7577207
--- /dev/null
+++ b/packaging/resources/engine-upgrade-check.cron
@@ -0,0 +1,21 @@
+#!/bin/sh
+#
+# Create TRIGGER if upgrade is available.
+#
+
+CACHEDIR="/var/cache/ovirt-engine"
+TRIGGER="${CACHEDIR}/engine-upgrade.available"
+
+umask 0022
+
+if ! [ -w "${CACHEDIR}" ]; then
+    echo "Directory '${CACHEDIR}' is not writable" >&2
+    exit 1
+fi
+
+if /usr/share/ovirt-engine/scripts/engine-upgrade-check.py --quiet 2> 
/dev/null | grep AVAILABLE > /dev/null; then
+    touch "${TRIGGER}"
+    chown ovirt:ovirt "${TRIGGER}"
+fi
+
+exit 0


--
To view, visit http://gerrit.ovirt.org/10976
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I76019e8ccc3e77d70b812bd9187c0cbdbb3f4f07
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alon Bar-Lev <alo...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to