diff options
author | Zuul <zuul@review.opendev.org> | 2022-05-11 14:33:21 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2022-05-11 14:33:21 +0000 |
commit | fd9a789949f3cf6b4ed41630e71a6c006dfb9f20 (patch) | |
tree | 1ed7dbcf030691f9d66ad765c22186bb47a81c68 | |
parent | 45ae487348218fa9c7554508d7f92f9b6fd26921 (diff) | |
parent | 1580c4ca562b01e502d505475d79dd7ac8caf18d (diff) | |
download | trove-fd9a789949f3cf6b4ed41630e71a6c006dfb9f20.tar.gz |
Merge "Adds new configurations for injected file owner"
-rw-r--r-- | trove/common/cfg.py | 6 | ||||
-rw-r--r-- | trove/instance/models.py | 35 | ||||
-rw-r--r-- | trove/tests/unittests/taskmanager/test_models.py | 38 |
3 files changed, 63 insertions, 16 deletions
diff --git a/trove/common/cfg.py b/trove/common/cfg.py index e7d08073..6270d96d 100644 --- a/trove/common/cfg.py +++ b/trove/common/cfg.py @@ -428,6 +428,12 @@ common_opts = [ cfg.StrOpt('injected_config_location', default='/etc/trove/conf.d', help='Path to folder on the Guest where config files will be ' 'injected during instance creation.'), + cfg.StrOpt('injected_config_owner', default='trove', + help='Owner of the Guest Agent directory and files to be ' + 'injected during instance creation.'), + cfg.StrOpt('injected_config_group', default='trove', + help='Group of the Guest Agent directory and files to be ' + 'injected during instance creation.'), cfg.StrOpt('guest_config', default='/etc/trove/trove-guestagent.conf', help='Path to the Guest Agent config file to be injected ' diff --git a/trove/instance/models.py b/trove/instance/models.py index e09ea77a..d21e477d 100644 --- a/trove/instance/models.py +++ b/trove/instance/models.py @@ -968,23 +968,30 @@ class BaseInstance(SimpleInstance): return self._server_group def prepare_cloud_config(self, files): - userdata = ( - "#cloud-config\n" - "write_files:\n" - ) + # This method returns None if the files argument is None + userdata = None - for filename, content in files.items(): - ud = encodeutils.safe_encode(content) - body_userdata = ( - "- encoding: b64\n" - " owner: trove:trove\n" - " path: %s\n" - " content: %s\n" % ( - filename, encodeutils.safe_decode(base64.b64encode(ud))) + if files: + userdata = ( + "#cloud-config\n" + "write_files:\n" ) - userdata = userdata + body_userdata - return userdata + injected_config_owner = CONF.get('injected_config_owner') + injected_config_group = CONF.get('injected_config_group') + for filename, content in files.items(): + ud = encodeutils.safe_encode(content) + body_userdata = ( + "- encoding: b64\n" + " owner: %s:%s\n" + " path: %s\n" + " content: %s\n" % ( + injected_config_owner, injected_config_group, filename, + encodeutils.safe_decode(base64.b64encode(ud))) + ) + userdata = userdata + body_userdata + + return userdata if userdata else "" def get_injected_files(self, datastore_manager, datastore_version): injected_config_location = CONF.get('injected_config_location') diff --git a/trove/tests/unittests/taskmanager/test_models.py b/trove/tests/unittests/taskmanager/test_models.py index 5167bc04..0af1aa16 100644 --- a/trove/tests/unittests/taskmanager/test_models.py +++ b/trove/tests/unittests/taskmanager/test_models.py @@ -242,8 +242,7 @@ class FreshInstanceTasksTest(BaseFreshInstanceTasksTest): server = self.freshinstancetasks._create_server( None, None, datastore_manager, None, None, None) - userdata = self.userdata + "#cloud-config\nwrite_files:\n" - self.assertEqual(server.userdata, userdata) + self.assertEqual(server.userdata, self.userdata) def test_create_instance_with_keypair(self): cfg.CONF.set_override('nova_keypair', 'fake_keypair') @@ -317,6 +316,41 @@ class FreshInstanceTasksTest(BaseFreshInstanceTasksTest): def test_servers_create_block_device_mapping_v2(self, mock_hostname, mock_name): + # This testcase is to test create_server with config_drive=True. + # We need set use_nova_server_config_drive True explicitly + # because use_nova_server_config_drive becomes False since Yoga + cfg.CONF.set_override('use_nova_server_config_drive', True) + self.freshinstancetasks.prepare_userdata = Mock(return_value=None) + mock_nova_client = self.freshinstancetasks.nova_client = Mock() + mock_servers_create = mock_nova_client.servers.create + self.freshinstancetasks._create_server('fake-flavor', 'fake-image', + 'mysql', None, None, None) + meta = {'trove_project_id': self.freshinstancetasks.tenant_id, + 'trove_user_id': 'test_user', + 'trove_instance_id': self.freshinstancetasks.id} + mock_servers_create.assert_called_with( + 'fake-name', 'fake-image', + 'fake-flavor', files={}, + userdata=None, + block_device_mapping_v2=None, + availability_zone=None, + nics=None, + config_drive=True, + scheduler_hints=None, + key_name=None, + meta=meta, + ) + + @patch.object(taskmanager_models.FreshInstanceTasks, 'hostname', + new_callable=PropertyMock, + return_value='fake-hostname') + @patch.object(taskmanager_models.FreshInstanceTasks, 'name', + new_callable=PropertyMock, + return_value='fake-name') + def test_servers_create_block_device_mapping_v2_since_yoga( + self, mock_hostname, mock_name): + + # This testcase is for testing with config_drive=False. self.freshinstancetasks.prepare_userdata = Mock( return_value="#cloud-config\nwrite_files:\n") mock_nova_client = self.freshinstancetasks.nova_client = Mock() |