فهرست منبع

Add cloud-init datasources

Cristian Matiut 10 ماه پیش
والد
کامیت
3f29060e6f
2فایلهای تغییر یافته به همراه35 افزوده شده و 5 حذف شده
  1. 11 1
      coriolis/osmorphing/base.py
  2. 24 4
      coriolis/tests/osmorphing/test_base.py

+ 11 - 1
coriolis/osmorphing/base.py

@@ -271,6 +271,10 @@ class BaseLinuxOSMorphingTools(BaseOSMorphingTools):
         self._ssh = conn
         self._grub2_update_scheduled = False
 
+    @property
+    def datasource_list(self):
+        return []
+
     @classmethod
     def get_required_detected_os_info_fields(cls):
         return REQUIRED_DETECTED_OS_FIELDS
@@ -707,7 +711,7 @@ class BaseLinuxOSMorphingTools(BaseOSMorphingTools):
             cloud_cfg_user_retention = {
                 'disable_root': False,
                 'ssh_pwauth': True,
-                'users': None
+                'users': []
             }
             cloud_cfg_mods.update(cloud_cfg_user_retention)
         else:
@@ -721,6 +725,12 @@ class BaseLinuxOSMorphingTools(BaseOSMorphingTools):
                 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():

+ 24 - 4
coriolis/tests/osmorphing/test_base.py

@@ -993,6 +993,7 @@ class BaseLinuxOSMorphingToolsTestBase(test_base.CoriolisBaseTestCase):
 
     @ddt.data(
         (
+            None,
             ["vim"],
             {},
             False,
@@ -1001,6 +1002,7 @@ class BaseLinuxOSMorphingToolsTestBase(test_base.CoriolisBaseTestCase):
             False
         ),
         (
+            ["Oracle"],
             ["cloud-init"],
             {"retain_user_credentials": True, "set_dhcp": False},
             False,
@@ -1008,12 +1010,14 @@ class BaseLinuxOSMorphingToolsTestBase(test_base.CoriolisBaseTestCase):
             {
                 "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,
@@ -1022,6 +1026,7 @@ class BaseLinuxOSMorphingToolsTestBase(test_base.CoriolisBaseTestCase):
             False
         ),
         (
+            [],
             ["cloud-init", "vim"],
             {"retain_user_credentials": False, "set_dhcp": False},
             True,
@@ -1032,6 +1037,17 @@ class BaseLinuxOSMorphingToolsTestBase(test_base.CoriolisBaseTestCase):
             },
             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,
@@ -1048,16 +1064,20 @@ class BaseLinuxOSMorphingToolsTestBase(test_base.CoriolisBaseTestCase):
     @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, cloud_init_modules, 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