Procházet zdrojové kódy

Improve upon Ubuntu OSMorphing tool check

This patch drops OSMorphing support for any non-LTS Ubuntu release.
This will allow for provider-side refactoring and tool grouping.
Daniel Vincze před 6 dny
rodič
revize
75f05dedeb

+ 8 - 7
coriolis/osmorphing/ubuntu.py

@@ -24,15 +24,16 @@ class BaseUbuntuMorphingTools(debian.BaseDebianMorphingTools):
                 UBUNTU_DISTRO_IDENTIFIER):
             return False
 
-        lts_releases = [12.04, 14.04, 16.04, 18.04, 20.04]
-        for lts_release in lts_releases:
-            if cls._version_supported_util(
-                    detected_os_info['release_version'],
-                    minimum=lts_release, maximum=lts_release):
-                return True
+        version, subversion = detected_os_info['release_version'].split('.', 1)
+        if int(version) % 2 != 0 or not subversion.startswith("04"):
+            LOG.warning(
+                "Detected Ubuntu release version "
+                f"'{detected_os_info['release_version']}' is not an LTS one. "
+                "Coriolis only supports morphing Ubuntu LTS versions.")
+            return False
 
         return cls._version_supported_util(
-            detected_os_info['release_version'], minimum=22.04)
+            detected_os_info['release_version'], minimum=12.04)
 
     def _set_netplan_ethernet_configs(
             self, nics_info, dhcp=False, iface_name_prefix=None):

+ 14 - 9
coriolis/tests/osmorphing/test_ubuntu.py

@@ -4,11 +4,14 @@
 import logging
 from unittest import mock
 
+import ddt
+
 from coriolis.osmorphing import base
 from coriolis.osmorphing import ubuntu
 from coriolis.tests import test_base
 
 
+@ddt.ddt
 class BaseUbuntuMorphingToolsTestCase(test_base.CoriolisBaseTestCase):
     """Test suite for the BaseUbuntuMophingTools class."""
 
@@ -37,19 +40,21 @@ class BaseUbuntuMorphingToolsTestCase(test_base.CoriolisBaseTestCase):
 
         self.assertFalse(result)
 
-    def test_check_os_supported_lts_release(self):
-        self.detected_os_info['release_version'] = '20.04'
-
-        result = ubuntu.BaseUbuntuMorphingTools.check_os_supported(
-            self.detected_os_info)
-
-        self.assertTrue(result)
+    @ddt.data(
+        ("20.04", True),
+        ("20.04.2 LTS", True),
+        ("20.10", False),
+        ("20.054", False),
+        ("19.04", False),
+    )
+    @ddt.unpack
+    def test_check_os_supported_lts_release(self, release_version, expected):
+        self.detected_os_info['release_version'] = release_version
 
-    def test_check_os_supported_non_lts_release(self):
         result = ubuntu.BaseUbuntuMorphingTools.check_os_supported(
             self.detected_os_info)
 
-        self.assertTrue(result)
+        self.assertEqual(expected, result)
 
     @mock.patch.object(base.BaseLinuxOSMorphingTools, '_exec_cmd')
     @mock.patch.object(base.BaseLinuxOSMorphingTools, '_write_file_sudo')