commit adc29948faa4e033e10dbc7c440427437cd555a3 Author: Andy Botting Date: Fri Aug 25 11:33:46 2017 +1000 Add user/project/trove-id metadata to trove server instances This can be handy when wanting to trace back what trove instance and real user/project the nova instance belongs too. Change-Id: I6ba7ea392df3b51ed9d230cacab14869348c217c diff --git a/trove/taskmanager/models.py b/trove/taskmanager/models.py index d1bfed8..5ddfc85 100755 --- a/trove/taskmanager/models.py +++ b/trove/taskmanager/models.py @@ -958,6 +958,9 @@ class FreshInstanceTasks(FreshInstance, NotifyMixin, ConfigurationMixin): block_device_mapping_v2, availability_zone, nics, files={}, scheduler_hints=None): userdata = self.prepare_userdata(datastore_manager) + metadata = {'trove_project_id': self.tenant_id, + 'trove_user_id': self.context.user, + 'trove_instance_id': self.id} name = self.hostname or self.name bdmap_v2 = block_device_mapping_v2 config_drive = CONF.use_nova_server_config_drive @@ -969,6 +972,7 @@ class FreshInstanceTasks(FreshInstance, NotifyMixin, ConfigurationMixin): files=files, userdata=userdata, availability_zone=availability_zone, config_drive=config_drive, scheduler_hints=scheduler_hints, + meta=metadata, ) LOG.debug("Created new compute instance %(server_id)s " "for database instance %(id)s", diff --git a/trove/tests/unittests/taskmanager/test_models.py b/trove/tests/unittests/taskmanager/test_models.py index 81f10a8..ece9113 100644 --- a/trove/tests/unittests/taskmanager/test_models.py +++ b/trove/tests/unittests/taskmanager/test_models.py @@ -79,17 +79,19 @@ class fake_Server(object): self.flavor_id = None self.files = None self.userdata = None + self.meta = None self.block_device_mapping_v2 = None self.status = 'HEALTHY' self.key_name = None class fake_ServerManager(object): + def create(self, name, image_id, flavor_id, files, userdata, block_device_mapping_v2=None, availability_zone=None, nics=None, config_drive=False, - scheduler_hints=None, key_name=None): + scheduler_hints=None, key_name=None, meta=None): server = fake_Server() server.id = "server_id" server.name = name @@ -101,7 +103,7 @@ class fake_ServerManager(object): server.availability_zone = availability_zone server.nics = nics server.key_name = key_name - + server.meta = meta return server @@ -211,6 +213,8 @@ class BaseFreshInstanceTasksTest(trove_testtools.TestCase): f.write(self.guestconfig_content) self.freshinstancetasks = taskmanager_models.FreshInstanceTasks( None, Mock(), None, None) + self.freshinstancetasks.context = trove.common.context.TroveContext( + user='test_user') def tearDown(self): super(BaseFreshInstanceTasksTest, self).tearDown() @@ -306,6 +310,9 @@ class FreshInstanceTasksTest(BaseFreshInstanceTasksTest): 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-hostname', 'fake-image', 'fake-flavor', files={}, @@ -315,7 +322,8 @@ class FreshInstanceTasksTest(BaseFreshInstanceTasksTest): nics=None, config_drive=True, scheduler_hints=None, - key_name=None + key_name=None, + meta=meta, ) @patch.object(InstanceServiceStatus, 'find_by',