diff --git a/coriolis/osmorphing/base.py b/coriolis/osmorphing/base.py index e7a99f04..9ba0dc84 100644 --- a/coriolis/osmorphing/base.py +++ b/coriolis/osmorphing/base.py @@ -140,6 +140,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 @@ -473,7 +477,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: @@ -487,6 +491,12 @@ def _configure_cloud_init(self): modules = [m for m in modules if m != 'update_etc_hosts'] cloud_cfg_mods.update({'cloud_init_modules': modules}) + 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 2d121a7b..a9b5a65b 100644 --- a/coriolis/tests/osmorphing/test_base.py +++ b/coriolis/tests/osmorphing/test_base.py @@ -730,6 +730,7 @@ def test__create_cloudinit_user_already_exists( @ddt.data( ( + None, ["vim"], {}, False, @@ -738,6 +739,7 @@ def test__create_cloudinit_user_already_exists( False ), ( + ["Oracle"], ["cloud-init"], {"retain_user_credentials": True, "set_dhcp": False}, False, @@ -745,12 +747,14 @@ def test__create_cloudinit_user_already_exists( { "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, @@ -759,6 +763,7 @@ def test__create_cloudinit_user_already_exists( False ), ( + [], ["cloud-init", "vim"], {"retain_user_credentials": False, "set_dhcp": False}, True, @@ -769,6 +774,16 @@ def test__create_cloudinit_user_already_exists( }, 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, @@ -785,16 +800,20 @@ 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, - cloud_init_modules, - 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__get_cloud_init_modules, 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