From 8d06b53e2c84ad780792d3b225724ef231e18158 Mon Sep 17 00:00:00 2001 From: Daniel Vincze Date: Fri, 18 Aug 2023 13:29:02 +0300 Subject: [PATCH 1/3] Enable CentOS Stream detection Enables detection and validates `CentOS Stream` for OSMorphing --- coriolis/osmorphing/centos.py | 6 ++++-- coriolis/osmorphing/osdetect/centos.py | 13 ++++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/coriolis/osmorphing/centos.py b/coriolis/osmorphing/centos.py index 60a78e08..bc5db84a 100644 --- a/coriolis/osmorphing/centos.py +++ b/coriolis/osmorphing/centos.py @@ -7,14 +7,16 @@ CENTOS_DISTRO_IDENTIFIER = centos_detect.CENTOS_DISTRO_IDENTIFIER +CENTOS_STREAM_DISTRO_IDENTIFIER = centos_detect.CENTOS_STREAM_DISTRO_IDENTIFIER class BaseCentOSMorphingTools(redhat.BaseRedHatMorphingTools): @classmethod def check_os_supported(cls, detected_os_info): - if detected_os_info['distribution_name'] != ( - CENTOS_DISTRO_IDENTIFIER): + supported_oses = [ + CENTOS_STREAM_DISTRO_IDENTIFIER, CENTOS_DISTRO_IDENTIFIER] + if detected_os_info['distribution_name'] not in supported_oses: return False return cls._version_supported_util( detected_os_info['release_version'], minimum=6) diff --git a/coriolis/osmorphing/osdetect/centos.py b/coriolis/osmorphing/osdetect/centos.py index 414d521a..012c741c 100644 --- a/coriolis/osmorphing/osdetect/centos.py +++ b/coriolis/osmorphing/osdetect/centos.py @@ -4,13 +4,13 @@ import re from oslo_log import log as logging - from coriolis import constants from coriolis.osmorphing.osdetect import base LOG = logging.getLogger(__name__) CENTOS_DISTRO_IDENTIFIER = "CentOS" +CENTOS_STREAM_DISTRO_IDENTIFIER = "CentOS Stream" class CentOSOSDetectTools(base.BaseLinuxOSDetectTools): @@ -22,19 +22,22 @@ def detect_os(self): release_info = self._read_file( redhat_release_path).decode().splitlines() if release_info: - m = re.match(r"^(.*) release ([0-9].*) \((.*)\).*$", + m = re.match(r"^(.*) release ([0-9](\.[0-9])*)( \(.*\))?.*$", release_info[0].strip()) if m: - distro, version, _ = m.groups() + distro, version, _, _ = m.groups() if CENTOS_DISTRO_IDENTIFIER not in distro: LOG.debug( "Distro does not appear to be a CentOS: %s", distro) return {} + distribution_name = CENTOS_DISTRO_IDENTIFIER + if CENTOS_STREAM_DISTRO_IDENTIFIER in distro: + distribution_name = CENTOS_STREAM_DISTRO_IDENTIFIER info = { "os_type": constants.OS_TYPE_LINUX, - "distribution_name": CENTOS_DISTRO_IDENTIFIER, + "distribution_name": distribution_name, "release_version": version, "friendly_release_name": "%s Version %s" % ( - CENTOS_DISTRO_IDENTIFIER, version)} + distribution_name, version)} return info From 8c20aa018a842aa5301288800b9d4b6a3127b2d8 Mon Sep 17 00:00:00 2001 From: Daniel Vincze Date: Fri, 18 Aug 2023 19:43:25 +0300 Subject: [PATCH 2/3] Add support for Oracle Linux 9 & OL Addons repository Fixes repository fetching for Oracle Linux 9 OSes. Also adds `addons` repo enablement, for extra package search (i.e. `ovmd`) --- coriolis/osmorphing/oracle.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/coriolis/osmorphing/oracle.py b/coriolis/osmorphing/oracle.py index 051c818f..cf1bd7bc 100644 --- a/coriolis/osmorphing/oracle.py +++ b/coriolis/osmorphing/oracle.py @@ -23,6 +23,7 @@ def check_os_supported(cls, detected_os_info): def _get_oracle_repos(self): repos = [] major_version = int(self._version.split(".")[0]) + uekr_version = int(major_version) - 2 if major_version < 8: repo_file_path = ( '/etc/yum.repos.d/%s.repo' % str(uuid.uuid4())) @@ -45,7 +46,8 @@ def _get_oracle_repos(self): self._find_yum_repos(['ol%s_baseos_latest' % major_version])) repos_to_enable = ["ol%s_baseos_latest" % major_version, "ol%s_appstream" % major_version, - "ol%s_UEKR6" % major_version] + "ol%d_addons" % major_version, + "ol%s_UEKR%s" % (major_version, uekr_version)] repos = self._find_yum_repos(repos_to_enable) return repos From d0ca7025956ddeb0ba2bf167e51b7825595d33bc Mon Sep 17 00:00:00 2001 From: Daniel Vincze Date: Fri, 18 Aug 2023 19:44:05 +0300 Subject: [PATCH 3/3] Add core OSMorphing support for Rocky Linux Adds core OSMorphing tools and OS detection method for Rocky Linux OS --- coriolis/osmorphing/osdetect/manager.py | 2 ++ coriolis/osmorphing/osdetect/rocky.py | 40 +++++++++++++++++++++++++ coriolis/osmorphing/rocky.py | 19 ++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 coriolis/osmorphing/osdetect/rocky.py create mode 100644 coriolis/osmorphing/rocky.py diff --git a/coriolis/osmorphing/osdetect/manager.py b/coriolis/osmorphing/osdetect/manager.py index c6d2c4c1..dee136e9 100644 --- a/coriolis/osmorphing/osdetect/manager.py +++ b/coriolis/osmorphing/osdetect/manager.py @@ -12,6 +12,7 @@ from coriolis.osmorphing.osdetect import openwrt from coriolis.osmorphing.osdetect import oracle from coriolis.osmorphing.osdetect import redhat +from coriolis.osmorphing.osdetect import rocky from coriolis.osmorphing.osdetect import suse from coriolis.osmorphing.osdetect import ubuntu from coriolis.osmorphing.osdetect import windows @@ -27,6 +28,7 @@ openwrt.OpenWRTOSDetectTools, oracle.OracleOSDetectTools, redhat.RedHatOSDetectTools, + rocky.RockyLinuxOSDetectTools, suse.SUSEOSDetectTools, ubuntu.UbuntuOSDetectTools ] diff --git a/coriolis/osmorphing/osdetect/rocky.py b/coriolis/osmorphing/osdetect/rocky.py new file mode 100644 index 00000000..4bb5b157 --- /dev/null +++ b/coriolis/osmorphing/osdetect/rocky.py @@ -0,0 +1,40 @@ +# Copyright 2023 Cloudbase Solutions Srl +# All Rights Reserved. + +import re + +from oslo_log import log as logging +from coriolis import constants +from coriolis.osmorphing.osdetect import base + + +LOG = logging.getLogger(__name__) +ROCKY_LINUX_DISTRO_IDENTIFIER = "Rocky Linux" + + +class RockyLinuxOSDetectTools(base.BaseLinuxOSDetectTools): + + def detect_os(self): + info = {} + redhat_release_path = "etc/redhat-release" + if self._test_path(redhat_release_path): + release_info = self._read_file( + redhat_release_path).decode().splitlines() + if release_info: + m = re.match(r"^(.*) release ([0-9](\.[0-9])*)( \(.*\))?.*$", + release_info[0].strip()) + if m: + distro, version, _, _ = m.groups() + if ROCKY_LINUX_DISTRO_IDENTIFIER not in distro: + LOG.debug( + "Distro does not appear to be a Rocky Linux: %s", + distro) + return {} + + info = { + "os_type": constants.OS_TYPE_LINUX, + "distribution_name": ROCKY_LINUX_DISTRO_IDENTIFIER, + "release_version": version, + "friendly_release_name": "%s Version %s" % ( + ROCKY_LINUX_DISTRO_IDENTIFIER, version)} + return info diff --git a/coriolis/osmorphing/rocky.py b/coriolis/osmorphing/rocky.py new file mode 100644 index 00000000..997cb4d3 --- /dev/null +++ b/coriolis/osmorphing/rocky.py @@ -0,0 +1,19 @@ +# Copyright 2023 Cloudbase Solutions Srl +# All Rights Reserved. + +from coriolis.osmorphing import centos +from coriolis.osmorphing.osdetect import rocky as rocky_osdetect + + +ROCKY_LINUX_DISTRO_IDENTIFIER = rocky_osdetect.ROCKY_LINUX_DISTRO_IDENTIFIER + + +class BaseRockyLinuxMorphingTools(centos.BaseCentOSMorphingTools): + + @classmethod + def check_os_supported(cls, detected_os_info): + if detected_os_info['distribution_name'] != ( + ROCKY_LINUX_DISTRO_IDENTIFIER): + return False + return cls._version_supported_util( + detected_os_info['release_version'], minimum=8)