From 6a7c29d140c75cdaaad68517f0a210a2cf0f3b28 Mon Sep 17 00:00:00 2001 From: Mihaela Balutoiu Date: Mon, 25 May 2026 10:54:48 +0300 Subject: [PATCH] Add `SLE` module activation into `BaseSUSEMorphingTools` Providers override `_get_sle_modules()` to declare which SLE modules are needed. Signed-off-by: Mihaela Balutoiu --- coriolis/osmorphing/suse.py | 17 +++++++ coriolis/tests/osmorphing/test_suse.py | 62 ++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) diff --git a/coriolis/osmorphing/suse.py b/coriolis/osmorphing/suse.py index 6c4fd8a6..8bdd1af6 100644 --- a/coriolis/osmorphing/suse.py +++ b/coriolis/osmorphing/suse.py @@ -129,6 +129,23 @@ def _has_systemd(self): except Exception: return False + def _get_sle_modules(self): + return [] + + def pre_packages_install(self, package_names): + super(BaseSUSEMorphingTools, self).pre_packages_install(package_names) + if package_names: + if self._distro == SLES_DISTRO_IDENTIFIER: + if self._version_supported_util(self._version, minimum=16): + LOG.info( + "SLES %s does not use the module system. " + "Skipping module activation.", self._version) + else: + for module in self._get_sle_modules(): + self._enable_sles_module(module) + else: + self._add_cloud_tools_repo() + def post_packages_install(self, package_names): self._configure_cloud_init() self._run_dracut() diff --git a/coriolis/tests/osmorphing/test_suse.py b/coriolis/tests/osmorphing/test_suse.py index fd526cda..822781e3 100644 --- a/coriolis/tests/osmorphing/test_suse.py +++ b/coriolis/tests/osmorphing/test_suse.py @@ -393,3 +393,65 @@ def test_uninstall_packages_with_exception(self, mock_exec_cmd_chroot): with self.assertLogs('coriolis.osmorphing.suse', level=logging.WARN): self.morphing_tools.uninstall_packages(self.package_names) + + def test__get_sle_modules_default(self): + result = self.morphing_tools._get_sle_modules() + + self.assertEqual(result, []) + + @mock.patch.object(suse.BaseSUSEMorphingTools, '_enable_sles_module') + @mock.patch.object(suse.BaseSUSEMorphingTools, '_get_sle_modules') + @mock.patch.object(base.BaseLinuxOSMorphingTools, 'pre_packages_install') + def test_pre_packages_install_sles_old_version( + self, mock_super_pre, mock_get_sle_modules, + mock_enable_sles_module): + mock_get_sle_modules.return_value = ["mod1", "mod2"] + + self.morphing_tools.pre_packages_install(self.package_names) + + mock_super_pre.assert_called_once_with(self.package_names) + mock_enable_sles_module.assert_has_calls([ + mock.call("mod1"), + mock.call("mod2"), + ]) + + @mock.patch.object(suse.BaseSUSEMorphingTools, '_enable_sles_module') + @mock.patch.object(suse.BaseSUSEMorphingTools, '_get_sle_modules') + @mock.patch.object(base.BaseLinuxOSMorphingTools, 'pre_packages_install') + def test_pre_packages_install_sles_16( + self, mock_super_pre, mock_get_sle_modules, + mock_enable_sles_module): + self.morphing_tools._version = "16" + + with self.assertLogs('coriolis.osmorphing.suse', level=logging.INFO): + self.morphing_tools.pre_packages_install(self.package_names) + + mock_super_pre.assert_called_once_with(self.package_names) + mock_get_sle_modules.assert_not_called() + mock_enable_sles_module.assert_not_called() + + @mock.patch.object(suse.BaseSUSEMorphingTools, '_add_cloud_tools_repo') + @mock.patch.object(suse.BaseSUSEMorphingTools, '_enable_sles_module') + @mock.patch.object(base.BaseLinuxOSMorphingTools, 'pre_packages_install') + def test_pre_packages_install_opensuse( + self, mock_super_pre, mock_enable_sles_module, + mock_add_cloud_tools_repo): + self.morphing_tools._distro = suse.OPENSUSE_DISTRO_IDENTIFIER + + self.morphing_tools.pre_packages_install(self.package_names) + + mock_super_pre.assert_called_once_with(self.package_names) + mock_add_cloud_tools_repo.assert_called_once() + mock_enable_sles_module.assert_not_called() + + @mock.patch.object(suse.BaseSUSEMorphingTools, '_add_cloud_tools_repo') + @mock.patch.object(suse.BaseSUSEMorphingTools, '_enable_sles_module') + @mock.patch.object(base.BaseLinuxOSMorphingTools, 'pre_packages_install') + def test_pre_packages_install_no_packages( + self, mock_super_pre, mock_enable_sles_module, + mock_add_cloud_tools_repo): + self.morphing_tools.pre_packages_install([]) + + mock_super_pre.assert_called_once_with([]) + mock_enable_sles_module.assert_not_called() + mock_add_cloud_tools_repo.assert_not_called()