Merge "Converting rebuild to use instance objects."

This commit is contained in:
Jenkins 2011-11-09 20:22:22 +00:00 committed by Gerrit Code Review
commit cc3fe3f71d
3 changed files with 23 additions and 7 deletions

View File

@ -145,7 +145,7 @@ class Controller(object):
def _get_server(self, context, instance_uuid):
"""Utility function for looking up an instance by uuid"""
try:
return self.compute_api.get(context, instance_uuid)
return self.compute_api.routing_get(context, instance_uuid)
except exception.NotFound:
raise exc.HTTPNotFound()
@ -774,6 +774,7 @@ class Controller(object):
def _action_rebuild(self, info, request, instance_id):
context = request.environ['nova.context']
instance = self._get_server(context, instance_id)
try:
image_href = info["rebuild"]["imageRef"]
@ -799,7 +800,7 @@ class Controller(object):
password = utils.generate_password(FLAGS.password_length)
try:
self.compute_api.rebuild(context, instance_id, image_href,
self.compute_api.rebuild(context, instance, image_href,
password, name=name, metadata=metadata,
files_to_inject=injected_files)
except exception.RebuildRequiresActiveInstance:
@ -809,7 +810,7 @@ class Controller(object):
msg = _("Instance %s could not be found") % instance_id
raise exc.HTTPNotFound(explanation=msg)
instance = self.compute_api.routing_get(context, instance_id)
instance = self._get_server(context, instance_id)
view = self._build_view(request, instance, is_detail=True)
view['server']['adminPass'] = password

View File

@ -1190,10 +1190,9 @@ class API(base.Base):
params={'reboot_type': reboot_type})
@scheduler_api.reroute_compute("rebuild")
def rebuild(self, context, instance_id, image_href, admin_password,
def rebuild(self, context, instance, image_href, admin_password,
name=None, metadata=None, files_to_inject=None):
"""Rebuild the given instance with the provided metadata."""
instance = self.db.instance_get(context, instance_id)
name = name or instance["display_name"]
if instance["vm_state"] != vm_states.ACTIVE:
@ -1207,7 +1206,7 @@ class API(base.Base):
self._check_metadata_properties_quota(context, metadata)
self.update(context,
instance_id,
instance["id"],
metadata=metadata,
display_name=name,
image_ref=image_href,
@ -1222,7 +1221,7 @@ class API(base.Base):
self._cast_compute_message('rebuild_instance',
context,
instance_id,
instance["id"],
params=rebuild_params)
@scheduler_api.reroute_compute("revert_resize")

View File

@ -343,6 +343,22 @@ class ComputeTestCase(test.TestCase):
self.compute.resume_instance(self.context, instance_id)
self.compute.terminate_instance(self.context, instance_id)
def test_rebuild(self):
instance_id = self._create_instance()
self.compute.run_instance(self.context, instance_id)
instance = db.instance_get(self.context, instance_id)
self.assertEqual(instance['task_state'], None)
image_ref = instance["image_ref"]
password = "new_password"
self.compute_api.rebuild(self.context, instance, image_ref, password)
instance = db.instance_get(self.context, instance_id)
self.assertEqual(instance['task_state'], task_states.REBUILDING)
db.instance_destroy(self.context, instance_id)
def test_reboot_soft_api(self):
"""Ensure instance can be soft rebooted"""
instance_id = self._create_instance()