Merge "Adds new configurations for injected file owner"

This commit is contained in:
Zuul 2022-05-11 14:33:21 +00:00 committed by Gerrit Code Review
commit fd9a789949
3 changed files with 63 additions and 16 deletions

View File

@ -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 '

View File

@ -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')

View File

@ -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()