forked from rpms/leapp-repository
277 lines
13 KiB
Diff
277 lines
13 KiB
Diff
From b716765e638156c9a5cb21a474d1203b695acf8d Mon Sep 17 00:00:00 2001
|
|
From: Vinzenz Feenstra <vfeenstr@redhat.com>
|
|
Date: Wed, 19 Oct 2022 21:42:14 +0200
|
|
Subject: [PATCH] checksaphana: Adjust for el7toel8 and el8toel9 requirements
|
|
|
|
Previously only upgrade from el7toel8 were supported for SAP Hana.
|
|
This patch will introduce the adjustments necessary to allow the
|
|
upgrade of RHEL with SAP Hana installed even on el8toel9.
|
|
|
|
Signed-off-by: Vinzenz Feenstra <vfeenstr@redhat.com>
|
|
---
|
|
.../checksaphana/libraries/checksaphana.py | 64 ++++++++++++----
|
|
.../checksaphana/tests/test_checksaphana.py | 73 +++++++++++++++++--
|
|
2 files changed, 117 insertions(+), 20 deletions(-)
|
|
|
|
diff --git a/repos/system_upgrade/common/actors/checksaphana/libraries/checksaphana.py b/repos/system_upgrade/common/actors/checksaphana/libraries/checksaphana.py
|
|
index e540ccd1..564d86b8 100644
|
|
--- a/repos/system_upgrade/common/actors/checksaphana/libraries/checksaphana.py
|
|
+++ b/repos/system_upgrade/common/actors/checksaphana/libraries/checksaphana.py
|
|
@@ -1,5 +1,5 @@
|
|
from leapp import reporting
|
|
-from leapp.libraries.common.config import architecture
|
|
+from leapp.libraries.common.config import architecture, version
|
|
from leapp.libraries.stdlib import api
|
|
from leapp.models import SapHanaInfo
|
|
|
|
@@ -7,8 +7,17 @@ from leapp.models import SapHanaInfo
|
|
# Requirement is SAP HANA 2.00 rev 54 which is the minimal supported revision for both RHEL 7.9 and RHEL 8.2
|
|
|
|
SAP_HANA_MINIMAL_MAJOR_VERSION = 2
|
|
-SAP_HANA_RHEL8_REQUIRED_PATCH_LEVELS = ((5, 54, 0),)
|
|
-SAP_HANA_MINIMAL_VERSION_STRING = 'HANA 2.0 SPS05 rev 54 or later'
|
|
+# RHEL 8.2 target requirements
|
|
+SAP_HANA_RHEL82_REQUIRED_PATCH_LEVELS = ((5, 54, 0),)
|
|
+SAP_HANA_RHEL82_MINIMAL_VERSION_STRING = 'HANA 2.0 SPS05 rev 54 or later'
|
|
+
|
|
+# RHEL 8.6 target requirements
|
|
+SAP_HANA_RHEL86_REQUIRED_PATCH_LEVELS = ((5, 59, 2),)
|
|
+SAP_HANA_RHEL86_MINIMAL_VERSION_STRING = 'HANA 2.0 SPS05 rev 59.02 or later'
|
|
+
|
|
+# RHEL 9 target requirements
|
|
+SAP_HANA_RHEL9_REQUIRED_PATCH_LEVELS = ((5, 59, 4), (6, 63, 0))
|
|
+SAP_HANA_RHEL9_MINIMAL_VERSION_STRING = 'HANA 2.0 SPS05 rev 59.04 or later, or SPS06 rev 63 or later'
|
|
|
|
|
|
def _manifest_get(manifest, key, default_value=None):
|
|
@@ -56,6 +65,16 @@ def _create_detected_instances_list(details):
|
|
return ''
|
|
|
|
|
|
+def _min_ver_string():
|
|
+ if version.get_target_major_version() == '8':
|
|
+ ver_str = SAP_HANA_RHEL86_MINIMAL_VERSION_STRING
|
|
+ if version.matches_target_version('8.2'):
|
|
+ ver_str = SAP_HANA_RHEL82_MINIMAL_VERSION_STRING
|
|
+ else:
|
|
+ ver_str = SAP_HANA_RHEL9_MINIMAL_VERSION_STRING
|
|
+ return ver_str
|
|
+
|
|
+
|
|
def version1_check(info):
|
|
""" Creates a report for SAP HANA instances running on version 1 """
|
|
found = {}
|
|
@@ -64,6 +83,7 @@ def version1_check(info):
|
|
_add_hana_details(found, instance)
|
|
|
|
if found:
|
|
+ min_ver_string = _min_ver_string()
|
|
detected = _create_detected_instances_list(found)
|
|
reporting.create_report([
|
|
reporting.Title('Found SAP HANA 1 which is not supported with the target version of RHEL'),
|
|
@@ -75,7 +95,7 @@ def version1_check(info):
|
|
reporting.Severity(reporting.Severity.HIGH),
|
|
reporting.RemediationHint((
|
|
'In order to upgrade RHEL, you will have to upgrade your SAP HANA 1.0 software to '
|
|
- '{supported}.'.format(supported=SAP_HANA_MINIMAL_VERSION_STRING))),
|
|
+ '{supported}.'.format(supported=min_ver_string))),
|
|
reporting.ExternalLink(url='https://launchpad.support.sap.com/#/notes/2235581',
|
|
title='SAP HANA: Supported Operating Systems'),
|
|
reporting.Groups([reporting.Groups.SANITY]),
|
|
@@ -100,11 +120,11 @@ def _major_version_check(instance):
|
|
return False
|
|
|
|
|
|
-def _sp_rev_patchlevel_check(instance):
|
|
+def _sp_rev_patchlevel_check(instance, patchlevels):
|
|
""" Checks whether this SP, REV & PatchLevel are eligible """
|
|
number = _manifest_get(instance.manifest, 'rev-number', '000')
|
|
if len(number) > 2 and number.isdigit():
|
|
- required_sp_levels = [r[0] for r in SAP_HANA_RHEL8_REQUIRED_PATCH_LEVELS]
|
|
+ required_sp_levels = [r[0] for r in patchlevels]
|
|
lowest_sp = min(required_sp_levels)
|
|
highest_sp = max(required_sp_levels)
|
|
sp = int(number[0:2].lstrip('0') or '0')
|
|
@@ -114,7 +134,7 @@ def _sp_rev_patchlevel_check(instance):
|
|
if sp > highest_sp:
|
|
# Less than minimal required SP
|
|
return True
|
|
- for requirements in SAP_HANA_RHEL8_REQUIRED_PATCH_LEVELS:
|
|
+ for requirements in patchlevels:
|
|
req_sp, req_rev, req_pl = requirements
|
|
if sp == req_sp:
|
|
rev = int(number.lstrip('0') or '0')
|
|
@@ -134,7 +154,13 @@ def _sp_rev_patchlevel_check(instance):
|
|
|
|
def _fullfills_hana_min_version(instance):
|
|
""" Performs a check whether the version of SAP HANA fullfills the minimal requirements for the target RHEL """
|
|
- return _major_version_check(instance) and _sp_rev_patchlevel_check(instance)
|
|
+ if version.get_target_major_version() == '8':
|
|
+ patchlevels = SAP_HANA_RHEL86_REQUIRED_PATCH_LEVELS
|
|
+ if version.matches_target_version('8.2'):
|
|
+ patchlevels = SAP_HANA_RHEL82_REQUIRED_PATCH_LEVELS
|
|
+ else:
|
|
+ patchlevels = SAP_HANA_RHEL9_REQUIRED_PATCH_LEVELS
|
|
+ return _major_version_check(instance) and _sp_rev_patchlevel_check(instance, patchlevels)
|
|
|
|
|
|
def version2_check(info):
|
|
@@ -147,17 +173,18 @@ def version2_check(info):
|
|
_add_hana_details(found, instance)
|
|
|
|
if found:
|
|
+ min_ver_string = _min_ver_string()
|
|
detected = _create_detected_instances_list(found)
|
|
reporting.create_report([
|
|
- reporting.Title('SAP HANA needs to be updated before upgrade'),
|
|
+ reporting.Title('SAP HANA needs to be updated before the RHEL upgrade'),
|
|
reporting.Summary(
|
|
('A newer version of SAP HANA is required in order continue with the upgrade.'
|
|
' {min_hana_version} is required for the target version of RHEL.\n\n'
|
|
- 'The following SAP HANA instances have been detected to be running with a lower version'
|
|
+ 'The following SAP HANA instances have been detected to be installed with a lower version'
|
|
' than required on the target system:\n'
|
|
- '{detected}').format(detected=detected, min_hana_version=SAP_HANA_MINIMAL_VERSION_STRING)
|
|
+ '{detected}').format(detected=detected, min_hana_version=min_ver_string)
|
|
),
|
|
- reporting.RemediationHint('Update SAP HANA at least to {}'.format(SAP_HANA_MINIMAL_VERSION_STRING)),
|
|
+ reporting.RemediationHint('Update SAP HANA at least to {}'.format(min_ver_string)),
|
|
reporting.ExternalLink(url='https://launchpad.support.sap.com/#/notes/2235581',
|
|
title='SAP HANA: Supported Operating Systems'),
|
|
reporting.Severity(reporting.Severity.HIGH),
|
|
@@ -170,6 +197,15 @@ def version2_check(info):
|
|
def platform_check():
|
|
""" Creates an inhibitor report in case the system is not running on x86_64 """
|
|
if not architecture.matches_architecture(architecture.ARCH_X86_64):
|
|
+ if version.get_target_major_version() == '8':
|
|
+ elink = reporting.ExternalLink(
|
|
+ url='https://access.redhat.com/solutions/5533441',
|
|
+ title='How do I upgrade from Red Hat Enterprise Linux 7 to Red Hat Enterprise Linux 8 with SAP HANA')
|
|
+ else:
|
|
+ elink = reporting.ExternalLink(
|
|
+ url='https://access.redhat.com/solutions/6980855',
|
|
+ title='How to in-place upgrade SAP environments from RHEL 8 to RHEL 9')
|
|
+
|
|
reporting.create_report([
|
|
reporting.Title('SAP HANA upgrades are only supported on X86_64 systems'),
|
|
reporting.Summary(
|
|
@@ -180,9 +216,7 @@ def platform_check():
|
|
reporting.Groups([reporting.Groups.SANITY]),
|
|
reporting.Groups([reporting.Groups.INHIBITOR]),
|
|
reporting.Audience('sysadmin'),
|
|
- reporting.ExternalLink(
|
|
- url='https://access.redhat.com/solutions/5533441',
|
|
- title='How do I upgrade from Red Hat Enterprise Linux 7 to Red Hat Enterprise Linux 8 with SAP HANA')
|
|
+ elink,
|
|
])
|
|
return False
|
|
|
|
diff --git a/repos/system_upgrade/common/actors/checksaphana/tests/test_checksaphana.py b/repos/system_upgrade/common/actors/checksaphana/tests/test_checksaphana.py
|
|
index 3f1d4230..6f61d0bf 100644
|
|
--- a/repos/system_upgrade/common/actors/checksaphana/tests/test_checksaphana.py
|
|
+++ b/repos/system_upgrade/common/actors/checksaphana/tests/test_checksaphana.py
|
|
@@ -2,7 +2,7 @@ import pytest
|
|
|
|
from leapp.libraries.actor import checksaphana
|
|
from leapp.libraries.common import testutils
|
|
-from leapp.libraries.stdlib import run
|
|
+from leapp.libraries.common.config import version
|
|
from leapp.models import SapHanaManifestEntry
|
|
|
|
SAPHANA1_MANIFEST = '''comptype: HDB
|
|
@@ -77,7 +77,7 @@ def _report_has_pattern(report, pattern):
|
|
EXPECTED_TITLE_PATTERNS = {
|
|
'running': lambda report: _report_has_pattern(report, 'running SAP HANA'),
|
|
'v1': lambda report: _report_has_pattern(report, 'Found SAP HANA 1'),
|
|
- 'low': lambda report: _report_has_pattern(report, 'SAP HANA needs to be updated before upgrade'),
|
|
+ 'low': lambda report: _report_has_pattern(report, 'SAP HANA needs to be updated before the RHEL upgrade'),
|
|
}
|
|
|
|
|
|
@@ -180,8 +180,69 @@ class MockSAPHanaVersionInstance(object):
|
|
(2, 49, 0, True),
|
|
)
|
|
)
|
|
-def test_checksaphana__fullfills_hana_min_version(monkeypatch, major, rev, patchlevel, result):
|
|
- monkeypatch.setattr(checksaphana, 'SAP_HANA_RHEL8_REQUIRED_PATCH_LEVELS', ((4, 48, 2), (5, 52, 0)))
|
|
+def test_checksaphana__fullfills_rhel82_hana_min_version(monkeypatch, major, rev, patchlevel, result):
|
|
+ monkeypatch.setattr(version, 'get_target_major_version', lambda: '8')
|
|
+ monkeypatch.setattr(version, 'get_target_version', lambda: '8.2')
|
|
+ monkeypatch.setattr(checksaphana, 'SAP_HANA_RHEL82_REQUIRED_PATCH_LEVELS', ((4, 48, 2), (5, 52, 0)))
|
|
+ assert checksaphana._fullfills_hana_min_version(
|
|
+ MockSAPHanaVersionInstance(
|
|
+ major=major,
|
|
+ rev=rev,
|
|
+ patchlevel=patchlevel,
|
|
+ )
|
|
+ ) == result
|
|
+
|
|
+
|
|
+@pytest.mark.parametrize(
|
|
+ 'major,rev,patchlevel,result', (
|
|
+ (2, 52, 0, True),
|
|
+ (2, 52, 1, True),
|
|
+ (2, 52, 2, True),
|
|
+ (2, 53, 0, True),
|
|
+ (2, 60, 0, True),
|
|
+ (2, 48, 2, True),
|
|
+ (2, 48, 1, False),
|
|
+ (2, 48, 0, False),
|
|
+ (2, 38, 2, False),
|
|
+ (2, 49, 0, True),
|
|
+ )
|
|
+)
|
|
+def test_checksaphana__fullfills_rhel86_hana_min_version(monkeypatch, major, rev, patchlevel, result):
|
|
+ monkeypatch.setattr(version, 'get_target_major_version', lambda: '8')
|
|
+ monkeypatch.setattr(version, 'get_target_version', lambda: '8.6')
|
|
+ monkeypatch.setattr(checksaphana, 'SAP_HANA_RHEL86_REQUIRED_PATCH_LEVELS', ((4, 48, 2), (5, 52, 0)))
|
|
+ assert checksaphana._fullfills_hana_min_version(
|
|
+ MockSAPHanaVersionInstance(
|
|
+ major=major,
|
|
+ rev=rev,
|
|
+ patchlevel=patchlevel,
|
|
+ )
|
|
+ ) == result
|
|
+
|
|
+
|
|
+@pytest.mark.parametrize(
|
|
+ 'major,rev,patchlevel,result', (
|
|
+ (2, 59, 4, True),
|
|
+ (2, 59, 5, True),
|
|
+ (2, 59, 6, True),
|
|
+ (2, 60, 0, False),
|
|
+ (2, 61, 0, False),
|
|
+ (2, 62, 0, False),
|
|
+ (2, 63, 2, True),
|
|
+ (2, 48, 1, False),
|
|
+ (2, 48, 0, False),
|
|
+ (2, 59, 0, False),
|
|
+ (2, 59, 1, False),
|
|
+ (2, 59, 2, False),
|
|
+ (2, 59, 3, False),
|
|
+ (2, 38, 2, False),
|
|
+ (2, 64, 0, True),
|
|
+ )
|
|
+)
|
|
+def test_checksaphana__fullfills_hana_rhel9_min_version(monkeypatch, major, rev, patchlevel, result):
|
|
+ monkeypatch.setattr(version, 'get_target_major_version', lambda: '9')
|
|
+ monkeypatch.setattr(version, 'get_target_version', lambda: '9.0')
|
|
+ monkeypatch.setattr(checksaphana, 'SAP_HANA_RHEL9_REQUIRED_PATCH_LEVELS', ((5, 59, 4), (6, 63, 0)))
|
|
assert checksaphana._fullfills_hana_min_version(
|
|
MockSAPHanaVersionInstance(
|
|
major=major,
|
|
@@ -196,7 +257,9 @@ def test_checksaphana_perform_check(monkeypatch):
|
|
v2names = ('JKL', 'MNO', 'PQR', 'STU')
|
|
v2lownames = ('VWX', 'YZA')
|
|
reports = []
|
|
- monkeypatch.setattr(checksaphana, 'SAP_HANA_RHEL8_REQUIRED_PATCH_LEVELS', ((4, 48, 2), (5, 52, 0)))
|
|
+ monkeypatch.setattr(checksaphana, 'SAP_HANA_RHEL86_REQUIRED_PATCH_LEVELS', ((4, 48, 2), (5, 52, 0)))
|
|
+ monkeypatch.setattr(version, 'get_target_major_version', lambda: '8')
|
|
+ monkeypatch.setattr(version, 'get_target_version', lambda: '8.6')
|
|
monkeypatch.setattr(checksaphana.reporting, 'create_report', _report_collector(reports))
|
|
monkeypatch.setattr(checksaphana.api, 'consume', _consume_mock_sap_hana_info(
|
|
v1names=v1names, v2names=v2names, v2lownames=v2lownames, running=True))
|
|
--
|
|
2.37.3
|
|
|