summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Prince <dan.prince@rackspace.com>2011-08-26 09:54:53 -0400
committerDan Prince <dan.prince@rackspace.com>2011-08-26 09:54:53 -0400
commit5dc7956eed749c33b6cfaaaf122e829feec62ea9 (patch)
tree46b19ae4254e6e78c1f759eca212e62a0ec69f69
parente38ba3a6066de8499ea5cc8d1fb2e5daefbf336a (diff)
downloadnova-5dc7956eed749c33b6cfaaaf122e829feec62ea9.tar.gz
nova-5dc7956eed749c33b6cfaaaf122e829feec62ea9.tar.xz
nova-5dc7956eed749c33b6cfaaaf122e829feec62ea9.zip
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.
-rw-r--r--nova/compute/api.py3
-rw-r--r--nova/compute/manager.py14
-rw-r--r--nova/tests/integrated/test_servers.py3
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)