summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-05-11 14:33:21 +0000
committerGerrit Code Review <review@openstack.org>2022-05-11 14:33:21 +0000
commitfd9a789949f3cf6b4ed41630e71a6c006dfb9f20 (patch)
tree1ed7dbcf030691f9d66ad765c22186bb47a81c68
parent45ae487348218fa9c7554508d7f92f9b6fd26921 (diff)
parent1580c4ca562b01e502d505475d79dd7ac8caf18d (diff)
downloadtrove-fd9a789949f3cf6b4ed41630e71a6c006dfb9f20.tar.gz
Merge "Adds new configurations for injected file owner"
-rw-r--r--trove/common/cfg.py6
-rw-r--r--trove/instance/models.py35
-rw-r--r--trove/tests/unittests/taskmanager/test_models.py38
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()