From 5dc7956eed749c33b6cfaaaf122e829feec62ea9 Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Fri, 26 Aug 2011 09:54:53 -0400 Subject: Update compute API and manager so that the image_ref is set before spawning the rebuilt instance. Fixes issue where rebuild didn't actually change the image_id. --- nova/compute/api.py | 3 +-- nova/compute/manager.py | 14 +++----------- nova/tests/integrated/test_servers.py | 3 ++- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/nova/compute/api.py b/nova/compute/api.py index 60a13631a..3b4bde8ea 100644 --- a/nova/compute/api.py +++ b/nova/compute/api.py @@ -1035,7 +1035,7 @@ class API(base.Base): files_to_inject = files_to_inject or [] self._check_injected_file_quota(context, files_to_inject) - values = {} + values = {"image_ref": image_href} if metadata is not None: self._check_metadata_properties_quota(context, metadata) values['metadata'] = metadata @@ -1045,7 +1045,6 @@ class API(base.Base): rebuild_params = { "new_pass": admin_password, - "image_ref": image_href, "injected_files": files_to_inject, } diff --git a/nova/compute/manager.py b/nova/compute/manager.py index ade15e310..6fcb3786c 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -201,11 +201,6 @@ class ComputeManager(manager.SchedulerDependentManager): data = {'launched_at': launched_at or utils.utcnow()} self.db.instance_update(context, instance_id, data) - def _update_image_ref(self, context, instance_id, image_ref): - """Update the image_id for the given instance.""" - data = {'image_ref': image_ref} - self.db.instance_update(context, instance_id, data) - def get_console_topic(self, context, **kwargs): """Retrieves the console host for a project on this host. @@ -526,7 +521,7 @@ class ComputeManager(manager.SchedulerDependentManager): :param context: `nova.RequestContext` object :param instance_id: Instance identifier (integer) - :param image_ref: Image identifier (href or integer) + :param injected_files: Files to inject :param new_pass: password to set on rebuilt instance """ context = context.elevated() @@ -539,8 +534,6 @@ class ComputeManager(manager.SchedulerDependentManager): network_info = self._get_instance_nw_info(context, instance_ref) self.driver.destroy(instance_ref, network_info) - image_ref = kwargs.get('image_ref') - instance_ref.image_ref = image_ref instance_ref.injected_files = kwargs.get('injected_files', []) network_info = self.network_api.get_instance_nw_info(context, instance_ref) @@ -552,11 +545,10 @@ class ComputeManager(manager.SchedulerDependentManager): self.driver.spawn(context, instance_ref, network_info, bd_mapping) - self._update_image_ref(context, instance_id, image_ref) self._update_launched_at(context, instance_id) self._update_state(context, instance_id) - usage_info = utils.usage_from_instance(instance_ref, - image_ref=image_ref) + usage_info = utils.usage_from_instance(instance_ref) + notifier.notify('compute.%s' % self.host, 'compute.instance.rebuild', notifier.INFO, diff --git a/nova/tests/integrated/test_servers.py b/nova/tests/integrated/test_servers.py index c2f800689..b9382038a 100644 --- a/nova/tests/integrated/test_servers.py +++ b/nova/tests/integrated/test_servers.py @@ -193,7 +193,7 @@ class ServersTest(integrated_helpers._IntegratedTestBase): # rebuild the server with metadata post = {} post['rebuild'] = { - "imageRef": "https://localhost/v1.1/32278/images/2", + "imageRef": "https://localhost/v1.1/32278/images/3", "name": "blah", } @@ -205,6 +205,7 @@ class ServersTest(integrated_helpers._IntegratedTestBase): self.assertEqual(created_server_id, found_server['id']) self.assertEqual({}, found_server.get('metadata')) self.assertEqual('blah', found_server.get('name')) + self.assertEqual('3', found_server.get('image')['id']) # Cleanup self._delete_server(created_server_id) -- cgit