Skip to content

Commit 475eae8

Browse files
Cristi1324Dany9966
authored andcommitted
Remove cloud_etc_hosts module when DHCP is disabled
1 parent 0751f60 commit 475eae8

2 files changed

Lines changed: 53 additions & 0 deletions

File tree

coriolis/osmorphing/base.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,16 @@ def _ensure_cloud_init_not_disabled(self):
433433
def _reset_cloud_init_run(self):
434434
self._exec_cmd_chroot("cloud-init clean --logs")
435435

436+
def _get_cloud_init_modules(self):
437+
cloud_cfg_path = 'etc/cloud/cloud.cfg'
438+
if not self._test_path(cloud_cfg_path):
439+
return
440+
cloud_cfg_content = self._read_file_sudo(cloud_cfg_path)
441+
cloud_cfg = yaml.load(cloud_cfg_content, Loader=yaml.SafeLoader)
442+
modules = cloud_cfg.get('cloud_init_modules', [])
443+
444+
return modules
445+
436446
def _get_default_cloud_user(self):
437447
cloud_cfg_path = 'etc/cloud/cloud.cfg'
438448
if not self._test_path(cloud_cfg_path):
@@ -472,6 +482,10 @@ def _configure_cloud_init(self):
472482
if not self._osmorphing_parameters.get('set_dhcp', True):
473483
disabled_network_config = {"network": {"config": "disabled"}}
474484
cloud_cfg_mods.update(disabled_network_config)
485+
modules = self._get_cloud_init_modules()
486+
if 'update_etc_hosts' in modules:
487+
modules = [m for m in modules if m != 'update_etc_hosts']
488+
cloud_cfg_mods.update({'cloud_init_modules': modules})
475489

476490
self._write_cloud_init_mods_config(cloud_cfg_mods)
477491

coriolis/tests/osmorphing/test_base.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,26 @@ def test__reset_cloud_init_run(self, mock__exec_cmd_chroot):
661661
mock__exec_cmd_chroot.assert_called_once_with(
662662
"cloud-init clean --logs")
663663

664+
@ddt.data(
665+
(False, None, None),
666+
(True, "other_modules:\n - not_update_etc_hosts\n"
667+
"cloud_init_modules:\n - set_hostname\n - update_etc_hosts\n",
668+
["set_hostname", "update_etc_hosts"]),
669+
(True, "other_modules:\n - update_etc_hosts\n", [])
670+
)
671+
@ddt.unpack
672+
@mock.patch.object(base.BaseLinuxOSMorphingTools, "_read_file_sudo")
673+
@mock.patch.object(base.BaseLinuxOSMorphingTools, "_test_path")
674+
def test__get_cloud_init_modules(
675+
self, test_path_result, file_content,
676+
expected_result, mock__test_path, mock__read_file_sudo):
677+
mock__test_path.return_value = test_path_result
678+
mock__read_file_sudo.return_value = file_content
679+
680+
result = self.os_morphing_tools._get_cloud_init_modules()
681+
682+
self.assertEqual(result, expected_result)
683+
664684
@ddt.data(
665685
(False, None, base.DEFAULT_CLOUD_USER),
666686
(True, "system_info:\n default_user:\n name: mock_user\n",
@@ -713,13 +733,15 @@ def test__create_cloudinit_user_already_exists(
713733
["vim"],
714734
{},
715735
False,
736+
[],
716737
None,
717738
False
718739
),
719740
(
720741
["cloud-init"],
721742
{"retain_user_credentials": True, "set_dhcp": False},
722743
False,
744+
["set_hostname"],
723745
{
724746
"disable_root": False,
725747
"ssh_pwauth": True,
@@ -732,14 +754,28 @@ def test__create_cloudinit_user_already_exists(
732754
["cloud-init", "vim"],
733755
{"retain_user_credentials": False, "set_dhcp": True},
734756
True,
757+
[],
735758
{},
736759
False
737760
),
761+
(
762+
["cloud-init", "vim"],
763+
{"retain_user_credentials": False, "set_dhcp": False},
764+
True,
765+
["update_etc_hosts", "set_hostname", "write_files"],
766+
{
767+
"network": {"config": "disabled"},
768+
"cloud_init_modules": ["set_hostname", "write_files"]
769+
},
770+
False
771+
),
738772
)
739773
@ddt.unpack
740774
@mock.patch.object(base.BaseLinuxOSMorphingTools,
741775
'_enable_systemd_service')
742776
@mock.patch.object(base.BaseLinuxOSMorphingTools, '_has_systemd_chroot')
777+
@mock.patch.object(base.BaseLinuxOSMorphingTools,
778+
'_get_cloud_init_modules')
743779
@mock.patch.object(base.BaseLinuxOSMorphingTools,
744780
'_write_cloud_init_mods_config')
745781
@mock.patch.object(base.BaseLinuxOSMorphingTools, '_create_cloudinit_user')
@@ -751,15 +787,18 @@ def test__create_cloudinit_user_already_exists(
751787
@mock.patch.object(base.BaseLinuxOSMorphingTools, 'get_packages')
752788
def test__configure_cloud_init(
753789
self, returned_packages, osmorphing_params, creates_cloudinit_user,
790+
cloud_init_modules,
754791
expected_result, has_systemd_chroot, mock_get_packages,
755792
mock__disable_installer_cloud_config,
756793
mock__ensure_cloud_init_not_disabled, mock__reset_cloud_init_run,
757794
mock__create_cloudinit_user, mock__write_cloud_init_mods_config,
795+
mock__get_cloud_init_modules,
758796
mock__has_systemd_chroot, mock__enable_systemd_service
759797
):
760798
mock_get_packages.return_value = returned_packages
761799
self.os_morphing_tools._osmorphing_parameters = osmorphing_params
762800
mock__has_systemd_chroot.return_value = has_systemd_chroot
801+
mock__get_cloud_init_modules.return_value = cloud_init_modules
763802

764803
self.os_morphing_tools._configure_cloud_init()
765804

0 commit comments

Comments
 (0)