URL: https://github.com/freeipa/freeipa/pull/5018 Author: abbra Title: #5018: [Backport][ipa-4-8] Treat container subplatforms like main platform Action: opened
PR body: """ This PR was opened automatically because PR #4992 was pushed to master and backport to ipa-4-8 is required. """ To pull the PR as Git branch: git remote add ghfreeipa https://github.com/freeipa/freeipa git fetch ghfreeipa pull/5018/head:pr5018 git checkout pr5018
From 5a09058683b77bef6cb4497f8aec874ce3977724 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 +++++++++++++++---- .../test_install/test_installutils.py | 16 ++++++++++++ 3 files changed, 39 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 ce57772ff8..583b1aca0b 100644 --- a/ipaserver/install/installutils.py +++ b/ipaserver/install/installutils.py @@ -1054,13 +1054,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(): @@ -1070,12 +1083,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") diff --git a/ipatests/test_ipaserver/test_install/test_installutils.py b/ipatests/test_ipaserver/test_install/test_installutils.py index 86e595167e..739a64f470 100644 --- a/ipatests/test_ipaserver/test_install/test_installutils.py +++ b/ipatests/test_ipaserver/test_install/test_installutils.py @@ -140,3 +140,19 @@ def test_gpg_asymmetric(tempdir, gpgkey): assert os.path.isfile(src) with open(src) as f: assert f.read() == payload + + +@pytest.mark.parametrize( + "platform, expected", + [ + ("fedora", "fedora"), + ("fedora_container", "fedora"), + ("fedora_containers", "fedora_containers"), + ("fedoracontainer", "fedoracontainer"), + ("rhel", "rhel"), + ("rhel_container", "rhel"), + ] +) +def test_get_current_platform(monkeypatch, platform, expected): + monkeypatch.setattr(installutils.ipaplatform, "NAME", platform) + assert installutils.get_current_platform() == expected
_______________________________________________ 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