URL: https://github.com/freeipa/freeipa/pull/4992 Author: tiran Title: #4992: Treat container subplatforms like main platform Action: opened
PR body: """ ipa-server-upgrade does not like platform mismatches. Upgrade from an old container to recent container fails with error message: ``` IPA server upgrade failed: Inspect /var/log/ipaupgrade.log and run command ipa-server-upgrade manually. ("Unable to execute IPA upgrade: platform mismatch (expected 'fedora', current 'fedora_container')", 1) ``` Upgrade state now treats a container subplatform like its main platform. ``fedora_container`` is really a ``fedora`` platform with some paths redirected to ``/data`` partition. The patch also enhances debug logging for installer and upgrader. Related: https://pagure.io/freeipa/issue/8401 Signed-off-by: Christian Heimes <chei...@redhat.com> """ To pull the PR as Git branch: git remote add ghfreeipa https://github.com/freeipa/freeipa git fetch ghfreeipa pull/4992/head:pr4992 git checkout pr4992
From 1ead1d4f68c8048ada804b34c24bde68ea824c3f Mon Sep 17 00:00:00 2001 From: Christian Heimes <chei...@redhat.com> Date: Wed, 5 Aug 2020 12:27:59 +0200 Subject: [PATCH] Treat container subplatforms like main platform ipa-server-upgrade does not like platform mismatches. Upgrade from an old container to recent container fails with error message: ``` IPA server upgrade failed: Inspect /var/log/ipaupgrade.log and run command ipa-server-upgrade manually. ("Unable to execute IPA upgrade: platform mismatch (expected 'fedora', current 'fedora_container')", 1) ``` Upgrade state now treats a container subplatform like its main platform. ``fedora_container`` is really a ``fedora`` platform with some paths redirected to ``/data`` partition. The patch also enhances debug logging for installer and upgrader. Related: https://pagure.io/freeipa/issue/8401 Signed-off-by: Christian Heimes <chei...@redhat.com> --- ipapython/admintool.py | 3 +++ ipaserver/install/installutils.py | 25 ++++++++++++++++++++----- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/ipapython/admintool.py b/ipapython/admintool.py index ededb28bfd..991e85e016 100644 --- a/ipapython/admintool.py +++ b/ipapython/admintool.py @@ -28,6 +28,7 @@ import traceback from optparse import OptionGroup # pylint: disable=deprecated-module +from ipaplatform.osinfo import osinfo from ipapython import version from ipapython import config from ipapython.ipa_log_manager import standard_logging_setup @@ -304,6 +305,8 @@ def run(self): logger.debug('%s was invoked with arguments %s and options: %s', self.command_name, self.args, self.safe_options) logger.debug('IPA version %s', version.VENDOR_VERSION) + logger.debug('IPA platform %s', osinfo.platform) + logger.debug('IPA os-release %s %s', osinfo.name, osinfo.version) def log_failure(self, error_message, return_value, exception, backtrace): logger.debug('%s', ''.join(traceback.format_tb(backtrace))) diff --git a/ipaserver/install/installutils.py b/ipaserver/install/installutils.py index ba98e8bed3..32e1e9965f 100644 --- a/ipaserver/install/installutils.py +++ b/ipaserver/install/installutils.py @@ -1069,13 +1069,26 @@ def load_external_cert(files, ca_subject): return cert_file, ca_file +def get_current_platform(): + """Get current platform (without container suffix) + + 'fedora' and 'fedora_container' are considered the same platform. This + normalization ensures that older freeipa-container images can be upgraded + without a platform mismatch. + """ + platform = ipaplatform.NAME + if platform.endswith('_container'): + platform = platform[:-10] + return platform + + def store_version(): """Store current data version and platform. This is required for check if upgrade is required. """ sysupgrade.set_upgrade_state('ipa', 'data_version', version.VENDOR_VERSION) - sysupgrade.set_upgrade_state('ipa', 'platform', ipaplatform.NAME) + sysupgrade.set_upgrade_state('ipa', 'platform', get_current_platform()) def check_version(): @@ -1085,12 +1098,14 @@ def check_version(): :raise UpgradeDataNewerVersionError: older version of IPA was detected than data :raise UpgradeMissingVersionError: if platform or version is missing """ - platform = sysupgrade.get_upgrade_state('ipa', 'platform') - if platform is not None: - if platform != ipaplatform.NAME: + state_platform = sysupgrade.get_upgrade_state('ipa', 'platform') + current_platform = get_current_platform() + if state_platform is not None: + if state_platform != current_platform: raise UpgradePlatformError( "platform mismatch (expected '%s', current '%s')" % ( - platform, ipaplatform.NAME) + state_platform, current_platform + ) ) else: raise UpgradeMissingVersionError("no platform stored")
_______________________________________________ FreeIPA-devel mailing list -- freeipa-devel@lists.fedorahosted.org To unsubscribe send an email to freeipa-devel-le...@lists.fedorahosted.org Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedorahosted.org/archives/list/freeipa-devel@lists.fedorahosted.org