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