From e1d846a9c41aa7797e830f595049802e566b0678 Mon Sep 17 00:00:00 2001 From: Cristian Matiut Date: Wed, 22 Oct 2025 14:09:11 +0000 Subject: [PATCH] Add cloud-init datasources --- coriolis/osmorphing/base.py | 12 +++++++++++- coriolis/tests/osmorphing/test_base.py | 25 ++++++++++++++++++++++--- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/coriolis/osmorphing/base.py b/coriolis/osmorphing/base.py index 77564680..5fae1e4b 100644 --- a/coriolis/osmorphing/base.py +++ b/coriolis/osmorphing/base.py @@ -136,6 +136,10 @@ def __init__(self, conn, os_root_dir, os_root_dev, hypervisor, detected_os_info, osmorphing_parameters, operation_timeout) self._ssh = conn + @property + def datasource_list(self): + return [] + @classmethod def get_required_detected_os_info_fields(cls): return REQUIRED_DETECTED_OS_FIELDS @@ -459,7 +463,7 @@ def _configure_cloud_init(self): cloud_cfg_user_retention = { 'disable_root': False, 'ssh_pwauth': True, - 'users': None + 'users': [] } cloud_cfg_mods.update(cloud_cfg_user_retention) else: @@ -469,6 +473,12 @@ def _configure_cloud_init(self): disabled_network_config = {"network": {"config": "disabled"}} cloud_cfg_mods.update(disabled_network_config) + if self.datasource_list: + datasource_cfg = {'datasource_list': self.datasource_list} + cloud_cfg_mods.update(datasource_cfg) + else: + LOG.warning("No datasource_list passed to cloud-init") + self._write_cloud_init_mods_config(cloud_cfg_mods) if self._has_systemd_chroot(): diff --git a/coriolis/tests/osmorphing/test_base.py b/coriolis/tests/osmorphing/test_base.py index af4dd1f0..f3ed0bb3 100644 --- a/coriolis/tests/osmorphing/test_base.py +++ b/coriolis/tests/osmorphing/test_base.py @@ -710,6 +710,7 @@ def test__create_cloudinit_user_already_exists( @ddt.data( ( + None, ["vim"], {}, False, @@ -717,24 +718,37 @@ def test__create_cloudinit_user_already_exists( False ), ( + ["Oracle"], ["cloud-init"], {"retain_user_credentials": True, "set_dhcp": False}, False, { "disable_root": False, "ssh_pwauth": True, - "users": None, + "users": [], "network": {"config": "disabled"}, + "datasource_list": ["Oracle"] }, True ), ( + [], ["cloud-init", "vim"], {"retain_user_credentials": False, "set_dhcp": True}, True, {}, False ), + ( + ["ConfigDrive", "OpenStack"], + ["cloud-init", "vim"], + {"retain_user_credentials": False, "set_dhcp": True}, + True, + { + "datasource_list": ["ConfigDrive", "OpenStack"] + }, + False + ), ) @ddt.unpack @mock.patch.object(base.BaseLinuxOSMorphingTools, @@ -749,14 +763,19 @@ def test__create_cloudinit_user_already_exists( @mock.patch.object(base.BaseLinuxOSMorphingTools, '_disable_installer_cloud_config') @mock.patch.object(base.BaseLinuxOSMorphingTools, 'get_packages') + @mock.patch.object(base.BaseLinuxOSMorphingTools, 'datasource_list', + new_callable=mock.PropertyMock) def test__configure_cloud_init( - self, returned_packages, osmorphing_params, creates_cloudinit_user, - expected_result, has_systemd_chroot, mock_get_packages, + self, datasource_list, returned_packages, osmorphing_params, + creates_cloudinit_user, expected_result, has_systemd_chroot, + mock_datasource_list, mock_get_packages, mock__disable_installer_cloud_config, mock__ensure_cloud_init_not_disabled, mock__reset_cloud_init_run, mock__create_cloudinit_user, mock__write_cloud_init_mods_config, mock__has_systemd_chroot, mock__enable_systemd_service ): + if datasource_list is not None: + mock_datasource_list.return_value = datasource_list mock_get_packages.return_value = returned_packages self.os_morphing_tools._osmorphing_parameters = osmorphing_params mock__has_systemd_chroot.return_value = has_systemd_chroot