Convert unrescue_instance to objects

Related to blueprint icehouse-objects.
Related to blueprint compute-manager-objects.

Change-Id: Id1311064354ee055a3557ce6aafca148c76524ec
This commit is contained in:
Michael Still 2013-12-15 12:47:20 +11:00
parent 7d95d729a3
commit ec78b42d7b
6 changed files with 24 additions and 17 deletions

View File

@ -75,7 +75,7 @@ class RescueController(wsgi.Controller):
"""Unrescue an instance."""
context = req.environ["nova.context"]
authorize(context)
instance = self._get_instance(context, id)
instance = self._get_instance(context, id, want_objects=True)
try:
self.compute_api.unrescue(context, instance)
except exception.InstanceInvalidState as state_error:

View File

@ -77,7 +77,8 @@ class RescueController(wsgi.Controller):
"""Unrescue an instance."""
context = req.environ["nova.context"]
authorize(context)
instance = common.get_instance(self.compute_api, context, id)
instance = common.get_instance(self.compute_api, context, id,
want_objects=True)
try:
self.compute_api.unrescue(context, instance)
except exception.InstanceInvalidState as state_error:

View File

@ -412,7 +412,7 @@ class ComputeVirtAPI(virtapi.VirtAPI):
class ComputeManager(manager.Manager):
"""Manages the running instances from creation to destruction."""
target = messaging.Target(version='3.10')
target = messaging.Target(version='3.11')
def __init__(self, compute_driver=None, *args, **kwargs):
"""Load configuration options and connect to the hypervisor."""
@ -2746,6 +2746,7 @@ class ComputeManager(manager.Manager):
"rescue.end", extra_usage_info=extra_usage_info,
network_info=network_info)
@object_compat
@wrap_exception()
@reverts_task_state
@wrap_instance_event
@ -2763,12 +2764,11 @@ class ComputeManager(manager.Manager):
network_info)
current_power_state = self._get_power_state(context, instance)
instance = self._instance_update(context,
instance['uuid'],
vm_state=vm_states.ACTIVE,
task_state=None,
expected_task_state=task_states.UNRESCUING,
power_state=current_power_state)
instance.vm_state = vm_states.ACTIVE
instance.task_state = None
instance.power_state = current_power_state
instance.save(expected_task_state=task_states.UNRESCUING)
self._notify_about_instance_usage(context,
instance,
"unrescue.end",

View File

@ -224,6 +224,7 @@ class ComputeAPI(object):
3.8 - Update set_admin_password() to take an instance object
3.9 - Update rescue_instance() to take an instance object
3.10 - Added get_rdp_console method
3.11 - Update unrescue_instance() to take an object
'''
VERSION_ALIASES = {
@ -826,12 +827,15 @@ class ComputeAPI(object):
cctxt.cast(ctxt, 'unpause_instance', instance=instance)
def unrescue_instance(self, ctxt, instance):
# NOTE(russellb) Havana compat
version = self._get_compat_version('3.0', '2.0')
instance_p = jsonutils.to_primitive(instance)
if self.client.can_send_version('3.11'):
version = '3.11'
else:
# NOTE(russellb) Havana compat
version = self._get_compat_version('3.0', '2.0')
instance = jsonutils.to_primitive(instance)
cctxt = self.client.prepare(server=_compute_host(None, instance),
version=version)
cctxt.cast(ctxt, 'unrescue_instance', instance=instance_p)
cctxt.cast(ctxt, 'unrescue_instance', instance=instance)
def soft_delete_instance(self, ctxt, instance, reservations=None):
# NOTE(russellb) Havana compat

View File

@ -1814,7 +1814,8 @@ class ComputeTestCase(BaseTestCase):
self.assertTrue(called['rescued'])
db.instance_update(self.context, instance_uuid,
{"task_state": task_states.UNRESCUING})
self.compute.unrescue_instance(self.context, instance=instance)
self.compute.unrescue_instance(self.context,
instance=self._objectify(instance))
self.assertTrue(called['unrescued'])
self.compute.terminate_instance(self.context,
@ -1879,7 +1880,8 @@ class ComputeTestCase(BaseTestCase):
fake_notifier.NOTIFICATIONS = []
db.instance_update(self.context, instance_uuid,
{"task_state": task_states.UNRESCUING})
self.compute.unrescue_instance(self.context, instance=instance)
self.compute.unrescue_instance(self.context,
instance=self._objectify(instance))
expected_notifications = ['compute.instance.unrescue.start',
'compute.instance.unrescue.end']
@ -7008,7 +7010,7 @@ class ComputeAPITestCase(BaseTestCase):
db.instance_update(self.context, instance_uuid, params)
instance = db.instance_get_by_uuid(self.context, instance_uuid)
self.compute_api.unrescue(self.context, instance)
self.compute_api.unrescue(self.context, self._objectify(instance))
instance = db.instance_get_by_uuid(self.context, instance_uuid)
self.assertEqual(instance['vm_state'], vm_states.RESCUED)

View File

@ -751,7 +751,7 @@ class ComputeRpcAPITestCase(test.TestCase):
def test_unrescue_instance(self):
self._test_compute_api('unrescue_instance', 'cast',
instance=self.fake_instance)
instance=self.fake_instance, version='3.11')
# NOTE(russellb) Havana compat
self.flags(compute='havana', group='upgrade_levels')