diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-08-01 18:39:57 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-08-01 18:39:57 +0000 |
| commit | 74ee613d40d722398586fd7c9df5a90c72744803 (patch) | |
| tree | 58d6d18ac58f8d9206e8547e9e300e55a3b8c5b9 | |
| parent | 3a5ea16bec06fceddfe06af343ee505cfc419a1b (diff) | |
| parent | 0a956de32c2fa24cf00461803914fe3ffba2b492 (diff) | |
Merge "Send a full instance in terminate_instance."
| -rw-r--r-- | nova/compute/manager.py | 18 | ||||
| -rw-r--r-- | nova/compute/rpcapi.py | 8 | ||||
| -rw-r--r-- | nova/tests/compute/test_compute.py | 172 | ||||
| -rw-r--r-- | nova/tests/compute/test_rpcapi.py | 24 | ||||
| -rw-r--r-- | nova/tests/test_compute_utils.py | 12 |
5 files changed, 128 insertions, 106 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py index f49563871..4540b76cf 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -272,7 +272,7 @@ def _get_image_meta(context, image_ref): class ComputeManager(manager.SchedulerDependentManager): """Manages the running instances from creation to destruction.""" - RPC_API_VERSION = '1.36' + RPC_API_VERSION = '1.37' def __init__(self, compute_driver=None, *args, **kwargs): """Load configuration options and connect to the hypervisor.""" @@ -900,21 +900,23 @@ class ComputeManager(manager.SchedulerDependentManager): @exception.wrap_exception(notifier=notifier, publisher_id=publisher_id()) @checks_instance_lock @wrap_instance_fault - def terminate_instance(self, context, instance_uuid): + def terminate_instance(self, context, instance=None, instance_uuid=None): """Terminate an instance on this host.""" @utils.synchronized(instance_uuid) - def do_terminate_instance(): + def do_terminate_instance(instance, instance_uuid): elevated = context.elevated() - instance = self.db.instance_get_by_uuid(elevated, instance_uuid) + if not instance: + instance = self.db.instance_get_by_uuid(elevated, + instance_uuid) try: self._delete_instance(context, instance) except exception.InstanceTerminationFailure as error: msg = _('%s. Setting instance vm_state to ERROR') - LOG.error(msg % error, instance_uuid=instance_uuid) - self._set_instance_error_state(context, instance_uuid) + LOG.error(msg % error, instance=instance) + self._set_instance_error_state(context, instance['uuid']) except exception.InstanceNotFound as e: - LOG.warn(e, instance_uuid=instance_uuid) - do_terminate_instance() + LOG.warn(e, instance=instance) + do_terminate_instance(instance, instance_uuid) @exception.wrap_exception(notifier=notifier, publisher_id=publisher_id()) @checks_instance_lock diff --git a/nova/compute/rpcapi.py b/nova/compute/rpcapi.py index c71b6193e..526654d9f 100644 --- a/nova/compute/rpcapi.py +++ b/nova/compute/rpcapi.py @@ -112,6 +112,8 @@ class ComputeAPI(nova.openstack.common.rpc.proxy.RpcProxy): unrescue_instance() 1.36 - Remove instance_uuid, add instance argument to change_instance_metadata() + 1.37 - Remove instance_uuid, add instance argument to + terminate_instance() ''' BASE_RPC_API_VERSION = '1.0' @@ -459,9 +461,11 @@ class ComputeAPI(nova.openstack.common.rpc.proxy.RpcProxy): version='1.6') def terminate_instance(self, ctxt, instance): + instance_p = jsonutils.to_primitive(instance) self.cast(ctxt, self.make_msg('terminate_instance', - instance_uuid=instance['uuid']), - topic=_compute_topic(self.topic, ctxt, None, instance)) + instance=instance_p), + topic=_compute_topic(self.topic, ctxt, None, instance), + version='1.37') def unpause_instance(self, ctxt, instance): instance_p = jsonutils.to_primitive(instance) diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index 5bfe17ad8..4988a4be9 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -370,13 +370,15 @@ class ComputeTestCase(BaseTestCase): #check failed to schedule --> terminate instance_uuid = self._create_instance(params={'vm_state': vm_states.ERROR}) - self.compute.terminate_instance(self.context, instance_uuid) + inst_ref = db.instance_get_by_uuid(elevated, instance_uuid) + instance = jsonutils.to_primitive(inst_ref) + self.compute.terminate_instance(self.context, instance=instance) self.assertRaises(exception.InstanceNotFound, db.instance_get_by_uuid, elevated, instance_uuid) def test_run_terminate(self): """Make sure it is possible to run and terminate instance""" - instance = self._create_fake_instance() + instance = jsonutils.to_primitive(self._create_fake_instance()) self.compute.run_instance(self.context, instance['uuid']) @@ -384,7 +386,7 @@ class ComputeTestCase(BaseTestCase): LOG.info(_("Running instances: %s"), instances) self.assertEqual(len(instances), 1) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, instance=instance) instances = db.instance_get_all(context.get_admin_context()) LOG.info(_("After terminating instances: %s"), instances) @@ -392,7 +394,7 @@ class ComputeTestCase(BaseTestCase): def test_run_terminate_timestamps(self): """Make sure timestamps are set for launched and destroyed""" - instance = self._create_fake_instance() + instance = jsonutils.to_primitive(self._create_fake_instance()) self.assertEqual(instance['launched_at'], None) self.assertEqual(instance['deleted_at'], None) launch = timeutils.utcnow() @@ -401,7 +403,7 @@ class ComputeTestCase(BaseTestCase): self.assert_(instance['launched_at'] > launch) self.assertEqual(instance['deleted_at'], None) terminate = timeutils.utcnow() - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, instance=instance) context = self.context.elevated(read_deleted="only") instance = db.instance_get_by_uuid(context, instance['uuid']) self.assert_(instance['launched_at'] < terminate) @@ -413,7 +415,7 @@ class ComputeTestCase(BaseTestCase): instance_uuid = instance['uuid'] self.compute.run_instance(self.context, instance_uuid) self.compute.stop_instance(self.context, instance=instance) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, instance=instance) def test_start(self): """Ensure instance can be started""" @@ -422,7 +424,7 @@ class ComputeTestCase(BaseTestCase): self.compute.run_instance(self.context, instance_uuid) self.compute.stop_instance(self.context, instance=instance) self.compute.start_instance(self.context, instance=instance) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, instance=instance) def test_rescue(self): """Ensure instance can be rescued and unrescued""" @@ -458,7 +460,7 @@ class ComputeTestCase(BaseTestCase): instance_uuid=instance_uuid) self.assertTrue(called['unrescued']) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, instance=instance) def test_power_on(self): """Ensure instance can be powered on""" @@ -476,7 +478,7 @@ class ComputeTestCase(BaseTestCase): self.compute.run_instance(self.context, instance_uuid) self.compute.power_on_instance(self.context, instance=instance) self.assertTrue(called['power_on']) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, instance=instance) def test_power_off(self): """Ensure instance can be powered off""" @@ -494,7 +496,7 @@ class ComputeTestCase(BaseTestCase): self.compute.run_instance(self.context, instance_uuid) self.compute.power_off_instance(self.context, instance=instance) self.assertTrue(called['power_off']) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, instance=instance) def test_pause(self): """Ensure instance can be paused and unpaused""" @@ -505,7 +507,7 @@ class ComputeTestCase(BaseTestCase): instance=jsonutils.to_primitive(instance)) self.compute.unpause_instance(self.context, instance=jsonutils.to_primitive(instance)) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, instance=instance) def test_suspend(self): """ensure instance can be suspended and resumed""" @@ -514,7 +516,7 @@ class ComputeTestCase(BaseTestCase): self.compute.run_instance(self.context, instance_uuid) self.compute.suspend_instance(self.context, instance=instance) self.compute.resume_instance(self.context, instance=instance) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, instance=instance) def test_suspend_error(self): """Ensure vm_state is ERROR when suspend error occurs""" @@ -531,7 +533,7 @@ class ComputeTestCase(BaseTestCase): instance=jsonutils.to_primitive(instance)) instance = db.instance_get_by_uuid(self.context, instance_uuid) self.assertEqual(instance['vm_state'], vm_states.ERROR) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, instance=instance) def test_rebuild(self): """Ensure instance can be rebuilt""" @@ -542,7 +544,7 @@ class ComputeTestCase(BaseTestCase): self.compute.run_instance(self.context, instance_uuid) self.compute.rebuild_instance(self.context, image_ref, image_ref, instance=instance) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, instance=instance) def test_rebuild_launch_time(self): """Ensure instance can be rebuilt""" @@ -559,7 +561,8 @@ class ComputeTestCase(BaseTestCase): instance=instance) instance = db.instance_get_by_uuid(self.context, instance_uuid) self.assertEquals(cur_time, instance['launched_at']) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, + instance=jsonutils.to_primitive(instance)) def test_reboot_soft(self): """Ensure instance can be soft rebooted""" @@ -577,7 +580,8 @@ class ComputeTestCase(BaseTestCase): self.assertEqual(inst_ref['power_state'], power_state.RUNNING) self.assertEqual(inst_ref['task_state'], None) - self.compute.terminate_instance(self.context, inst_ref['uuid']) + self.compute.terminate_instance(self.context, + instance=jsonutils.to_primitive(inst_ref)) def test_reboot_hard(self): """Ensure instance can be hard rebooted""" @@ -595,7 +599,8 @@ class ComputeTestCase(BaseTestCase): self.assertEqual(inst_ref['power_state'], power_state.RUNNING) self.assertEqual(inst_ref['task_state'], None) - self.compute.terminate_instance(self.context, inst_ref['uuid']) + self.compute.terminate_instance(self.context, + instance=jsonutils.to_primitive(inst_ref)) def test_set_admin_password(self): """Ensure instance can have its admin password set""" @@ -614,7 +619,8 @@ class ComputeTestCase(BaseTestCase): self.assertEqual(inst_ref['vm_state'], vm_states.ACTIVE) self.assertEqual(inst_ref['task_state'], None) - self.compute.terminate_instance(self.context, inst_ref['uuid']) + self.compute.terminate_instance(self.context, + instance=jsonutils.to_primitive(inst_ref)) def test_set_admin_password_bad_state(self): """Test setting password while instance is rebuilding.""" @@ -642,7 +648,7 @@ class ComputeTestCase(BaseTestCase): self.compute.set_admin_password, self.context, instance=instance) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, instance=instance) def _do_test_set_admin_password_driver_error(self, exc, expected_vm_state, expected_task_state): @@ -679,7 +685,8 @@ class ComputeTestCase(BaseTestCase): self.assertEqual(inst_ref['vm_state'], expected_vm_state) self.assertEqual(inst_ref['task_state'], expected_task_state) - self.compute.terminate_instance(self.context, inst_ref['uuid']) + self.compute.terminate_instance(self.context, + instance=jsonutils.to_primitive(inst_ref)) def test_set_admin_password_driver_not_authorized(self): """ @@ -718,7 +725,7 @@ class ComputeTestCase(BaseTestCase): self.compute.inject_file(self.context, "/tmp/test", "File Contents", instance=instance) self.assertTrue(called['inject']) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, instance=instance) def test_inject_network_info(self): """Ensure we can inject network info""" @@ -735,7 +742,7 @@ class ComputeTestCase(BaseTestCase): self.compute.run_instance(self.context, instance_uuid) self.compute.inject_network_info(self.context, instance=instance) self.assertTrue(called['inject']) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, instance=instance) def test_reset_network(self): """Ensure we can reset networking on an instance""" @@ -757,7 +764,7 @@ class ComputeTestCase(BaseTestCase): self.assertEqual(called['count'], 2) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, instance=instance) def test_agent_update(self): """Ensure instance can have its agent updated""" @@ -776,7 +783,8 @@ class ComputeTestCase(BaseTestCase): self.compute.agent_update(self.context, instance['uuid'], 'http://fake/url/', 'fakehash') self.assertTrue(called['agent_update']) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, + instance=jsonutils.to_primitive(instance)) def test_snapshot(self): """Ensure instance can be snapshotted""" @@ -785,7 +793,7 @@ class ComputeTestCase(BaseTestCase): name = "myfakesnapshot" self.compute.run_instance(self.context, instance_uuid) self.compute.snapshot_instance(self.context, name, instance=instance) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, instance=instance) def test_snapshot_fails(self): """Ensure task_state is set to None if snapshot fails""" @@ -800,7 +808,7 @@ class ComputeTestCase(BaseTestCase): self.compute.snapshot_instance, self.context, "failing_snapshot", instance=instance) self._assert_state({'task_state': None}) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, instance=instance) def _assert_state(self, state_dict): """Assert state of VM is equal to state passed as parameter""" @@ -818,23 +826,23 @@ class ComputeTestCase(BaseTestCase): def test_console_output(self): """Make sure we can get console output from instance""" - instance = self._create_fake_instance() + instance = jsonutils.to_primitive(self._create_fake_instance()) self.compute.run_instance(self.context, instance['uuid']) output = self.compute.get_console_output(self.context, - instance=jsonutils.to_primitive(instance)) + instance=instance) self.assertEqual(output, 'FAKE CONSOLE OUTPUT\nANOTHER\nLAST LINE') - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, instance=instance) def test_console_output_tail(self): """Make sure we can get console output from instance""" - instance = self._create_fake_instance() + instance = jsonutils.to_primitive(self._create_fake_instance()) self.compute.run_instance(self.context, instance['uuid']) output = self.compute.get_console_output(self.context, - instance=jsonutils.to_primitive(instance), tail_length=2) + instance=instance, tail_length=2) self.assertEqual(output, 'ANOTHER\nLAST LINE') - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, instance=instance) def test_novnc_vnc_console(self): """Make sure we can a vnc console for an instance.""" @@ -851,7 +859,7 @@ class ComputeTestCase(BaseTestCase): instance_uuid=instance['uuid']) self.assert_(console) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, instance=instance) def test_xvpvnc_vnc_console(self): """Make sure we can a vnc console for an instance.""" @@ -861,7 +869,7 @@ class ComputeTestCase(BaseTestCase): console = self.compute.get_vnc_console(self.context, 'xvpvnc', instance=instance) self.assert_(console) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, instance=instance) def test_invalid_vnc_console_type(self): """Raise useful error if console type is an unrecognised string""" @@ -871,7 +879,7 @@ class ComputeTestCase(BaseTestCase): self.assertRaises(exception.ConsoleTypeInvalid, self.compute.get_vnc_console, self.context, 'invalid', instance=instance) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, instance=instance) def test_missing_vnc_console_type(self): """Raise useful error is console type is None""" @@ -881,11 +889,11 @@ class ComputeTestCase(BaseTestCase): self.assertRaises(exception.ConsoleTypeInvalid, self.compute.get_vnc_console, self.context, None, instance=instance) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, instance=instance) def test_diagnostics(self): """Make sure we can get diagnostics for an instance.""" - instance = self._create_fake_instance() + instance = jsonutils.to_primitive(self._create_fake_instance()) self.compute.run_instance(self.context, instance['uuid']) diagnostics = self.compute.get_diagnostics(self.context, @@ -895,7 +903,7 @@ class ComputeTestCase(BaseTestCase): diagnostics = self.compute.get_diagnostics(self.context, instance=instance) self.assertEqual(diagnostics, 'FAKE_DIAGNOSTICS') - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, instance=instance) def test_add_fixed_ip_usage_notification(self): def dummy(*args, **kwargs): @@ -916,7 +924,7 @@ class ComputeTestCase(BaseTestCase): instance=instance) self.assertEquals(len(test_notifier.NOTIFICATIONS), 2) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, instance=instance) def test_remove_fixed_ip_usage_notification(self): def dummy(*args, **kwargs): @@ -937,7 +945,7 @@ class ComputeTestCase(BaseTestCase): instance=instance) self.assertEquals(len(test_notifier.NOTIFICATIONS), 2) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, instance=instance) def test_run_instance_usage_notification(self): """Ensure run instance generates appropriate usage notification""" @@ -968,7 +976,8 @@ class ComputeTestCase(BaseTestCase): self.assertTrue(payload['launched_at']) image_ref_url = utils.generate_image_url(FAKE_IMAGE_REF) self.assertEquals(payload['image_ref_url'], image_ref_url) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, + instance=jsonutils.to_primitive(inst_ref)) def test_terminate_usage_notification(self): """Ensure terminate_instance generates correct usage notification""" @@ -980,7 +989,8 @@ class ComputeTestCase(BaseTestCase): self.compute.run_instance(self.context, inst_ref['uuid']) test_notifier.NOTIFICATIONS = [] timeutils.set_time_override(cur_time) - self.compute.terminate_instance(self.context, inst_ref['uuid']) + self.compute.terminate_instance(self.context, + instance=jsonutils.to_primitive(inst_ref)) self.assertEquals(len(test_notifier.NOTIFICATIONS), 4) @@ -1011,13 +1021,13 @@ class ComputeTestCase(BaseTestCase): def test_run_instance_existing(self): """Ensure failure when running an instance that already exists""" - instance = self._create_fake_instance() + instance = jsonutils.to_primitive(self._create_fake_instance()) self.compute.run_instance(self.context, instance['uuid']) self.assertRaises(exception.Invalid, self.compute.run_instance, self.context, instance['uuid']) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, instance=instance) def test_instance_set_to_error_on_uncaught_exception(self): """Test that instance is set to error state when exception is raised""" @@ -1045,7 +1055,8 @@ class ComputeTestCase(BaseTestCase): instance_uuid) self.assertEqual(vm_states.ERROR, instance['vm_state']) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, + instance=jsonutils.to_primitive(instance)) def test_instance_termination_exception_sets_error(self): """Test that we handle InstanceTerminationFailure @@ -1059,7 +1070,8 @@ class ComputeTestCase(BaseTestCase): self.stubs.Set(self.compute, '_delete_instance', fake_delete_instance) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, + instance=jsonutils.to_primitive(instance)) instance = db.instance_get_by_uuid(self.context, instance['uuid']) self.assertEqual(instance['vm_state'], vm_states.ERROR) @@ -1079,7 +1091,8 @@ class ComputeTestCase(BaseTestCase): self.context, instance['uuid']) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, + instance=jsonutils.to_primitive(instance)) def test_get_lock(self): instance = jsonutils.to_primitive(self._create_fake_instance()) @@ -1117,7 +1130,8 @@ class ComputeTestCase(BaseTestCase): instance=jsonutils.to_primitive(instance)) check_task_state(None) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, + instance=jsonutils.to_primitive(instance)) def test_finish_resize(self): """Contrived test to ensure finish_resize doesn't raise anything""" @@ -1136,7 +1150,7 @@ class ComputeTestCase(BaseTestCase): self.compute.finish_resize(context, migration_id=int(migration_ref['id']), disk_info={}, image={}, instance=instance) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, instance=instance) def test_finish_resize_handles_error(self): """Make sure we don't leave the instance in RESIZE on error""" @@ -1162,7 +1176,8 @@ class ComputeTestCase(BaseTestCase): instance = db.instance_get_by_uuid(context, instance['uuid']) self.assertEqual(instance['vm_state'], vm_states.ERROR) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, + instance=jsonutils.to_primitive(instance)) def test_rebuild_instance_notification(self): """Ensure notifications on instance migrate/resize""" @@ -1222,7 +1237,8 @@ class ComputeTestCase(BaseTestCase): self.assertTrue('launched_at' in payload) self.assertEqual(payload['launched_at'], str(cur_time)) self.assertEquals(payload['image_ref_url'], new_image_ref_url) - self.compute.terminate_instance(self.context, inst_ref['uuid']) + self.compute.terminate_instance(self.context, + instance=jsonutils.to_primitive(inst_ref)) def test_finish_resize_instance_notification(self): """Ensure notifications on instance migrate/resize""" @@ -1272,7 +1288,8 @@ class ComputeTestCase(BaseTestCase): self.assertEqual(payload['launched_at'], str(cur_time)) image_ref_url = utils.generate_image_url(FAKE_IMAGE_REF) self.assertEquals(payload['image_ref_url'], image_ref_url) - self.compute.terminate_instance(context, instance['uuid']) + self.compute.terminate_instance(context, + instance=jsonutils.to_primitive(instance)) def test_resize_instance_notification(self): """Ensure notifications on instance migrate/resize""" @@ -1316,7 +1333,8 @@ class ComputeTestCase(BaseTestCase): self.assertTrue('launched_at' in payload) image_ref_url = utils.generate_image_url(FAKE_IMAGE_REF) self.assertEquals(payload['image_ref_url'], image_ref_url) - self.compute.terminate_instance(context, instance['uuid']) + self.compute.terminate_instance(context, + instance=jsonutils.to_primitive(instance)) def test_prep_resize_instance_migration_error(self): """Ensure prep_resize raise a migration error""" @@ -1330,7 +1348,8 @@ class ComputeTestCase(BaseTestCase): self.assertRaises(exception.MigrationError, self.compute.prep_resize, context, instance['uuid'], 1, {}) - self.compute.terminate_instance(context, instance['uuid']) + self.compute.terminate_instance(context, + instance=jsonutils.to_primitive(instance)) def test_resize_instance_driver_error(self): """Ensure instance status set to Error on resize error""" @@ -1357,7 +1376,8 @@ class ComputeTestCase(BaseTestCase): instance = db.instance_get_by_uuid(context, instance['uuid']) self.assertEqual(instance['vm_state'], vm_states.ERROR) - self.compute.terminate_instance(context, instance['uuid']) + self.compute.terminate_instance(context, + instance=jsonutils.to_primitive(instance)) def test_resize_instance(self): """Ensure instance can be migrated/resized""" @@ -1373,7 +1393,8 @@ class ComputeTestCase(BaseTestCase): instance['uuid'], 'pre-migrating') self.compute.resize_instance(context, migration_ref['id'], {}, instance=instance) - self.compute.terminate_instance(context, instance['uuid']) + self.compute.terminate_instance(context, + instance=jsonutils.to_primitive(instance)) def test_finish_revert_resize(self): """Ensure that the flavor is reverted to the original on revert""" @@ -1434,7 +1455,8 @@ class ComputeTestCase(BaseTestCase): self.assertEqual(instance_type_ref['flavorid'], '1') self.assertEqual(inst_ref['host'], migration_ref['source_compute']) - self.compute.terminate_instance(context, inst_ref['uuid']) + self.compute.terminate_instance(context, + instance=jsonutils.to_primitive(inst_ref)) def test_get_by_flavor_id(self): type = instance_types.get_instance_type_by_flavor_id(1) @@ -1448,7 +1470,8 @@ class ComputeTestCase(BaseTestCase): instance = db.instance_get_by_uuid(self.context, instance['uuid']) self.assertRaises(exception.MigrationError, self.compute.prep_resize, self.context, instance['uuid'], 1, {}) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, + instance=jsonutils.to_primitive(instance)) def test_resize_instance_handles_migration_error(self): """Ensure vm_state is ERROR when error occurs""" @@ -1471,7 +1494,8 @@ class ComputeTestCase(BaseTestCase): context, migration_ref['id'], {}, instance=inst_ref) inst_ref = db.instance_get_by_uuid(context, inst_ref['uuid']) self.assertEqual(inst_ref['vm_state'], vm_states.ERROR) - self.compute.terminate_instance(context, inst_ref['uuid']) + self.compute.terminate_instance(context, + instance=jsonutils.to_primitive(inst_ref)) def test_check_can_live_migrate_source_works_correctly(self): """Confirm check_can_live_migrate_source works on positive path""" @@ -2747,7 +2771,8 @@ class ComputeAPITestCase(BaseTestCase): self.assertEqual(inst_ref['task_state'], task_states.UPDATING_PASSWORD) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, + instance=jsonutils.to_primitive(inst_ref)) def test_rescue_unrescue(self): instance = self._create_fake_instance() @@ -2774,7 +2799,8 @@ class ComputeAPITestCase(BaseTestCase): self.assertEqual(instance['vm_state'], vm_states.RESCUED) self.assertEqual(instance['task_state'], task_states.UNRESCUING) - self.compute.terminate_instance(self.context, instance_uuid) + self.compute.terminate_instance(self.context, + instance=jsonutils.to_primitive(instance)) def test_snapshot(self): """Ensure a snapshot of an instance can be created""" @@ -2979,7 +3005,8 @@ class ComputeAPITestCase(BaseTestCase): 'vm_state': vm_states.RESIZED}) self.compute_api.confirm_resize(context, instance) - self.compute.terminate_instance(context, instance['uuid']) + self.compute.terminate_instance(context, + instance=jsonutils.to_primitive(instance)) def test_resize_revert_through_api(self): instance = self._create_fake_instance() @@ -3004,7 +3031,8 @@ class ComputeAPITestCase(BaseTestCase): self.assertEqual(instance['vm_state'], vm_states.RESIZED) self.assertEqual(instance['task_state'], task_states.RESIZE_REVERTING) - self.compute.terminate_instance(context, instance['uuid']) + self.compute.terminate_instance(context, + instance=jsonutils.to_primitive(instance)) def test_resize_invalid_flavor_fails(self): """Ensure invalid flavors raise""" @@ -3016,7 +3044,8 @@ class ComputeAPITestCase(BaseTestCase): self.assertRaises(exception.NotFound, self.compute_api.resize, context, instance, 200) - self.compute.terminate_instance(context, instance['uuid']) + self.compute.terminate_instance(context, + instance=jsonutils.to_primitive(instance)) def test_resize_same_size_fails(self): """Ensure invalid flavors raise""" @@ -3029,7 +3058,8 @@ class ComputeAPITestCase(BaseTestCase): self.assertRaises(exception.CannotResizeToSameSize, self.compute_api.resize, context, instance, 1) - self.compute.terminate_instance(context, instance['uuid']) + self.compute.terminate_instance(context, + instance=jsonutils.to_primitive(instance)) def test_migrate(self): context = self.context.elevated() @@ -3038,7 +3068,8 @@ class ComputeAPITestCase(BaseTestCase): self.compute.run_instance(self.context, instance['uuid']) # Migrate simply calls resize() without a flavor_id. self.compute_api.resize(context, instance, None) - self.compute.terminate_instance(context, instance['uuid']) + self.compute.terminate_instance(context, + instance=jsonutils.to_primitive(instance)) def test_resize_request_spec(self): def _fake_cast(context, topic, msg): @@ -3057,7 +3088,8 @@ class ComputeAPITestCase(BaseTestCase): try: self.compute_api.resize(context, instance, None) finally: - self.compute.terminate_instance(context, instance['uuid']) + self.compute.terminate_instance(context, + instance=jsonutils.to_primitive(instance)) def test_resize_request_spec_noavoid(self): def _fake_cast(context, topic, msg): @@ -3077,7 +3109,8 @@ class ComputeAPITestCase(BaseTestCase): try: self.compute_api.resize(context, instance, None) finally: - self.compute.terminate_instance(context, instance['uuid']) + self.compute.terminate_instance(context, + instance=jsonutils.to_primitive(instance)) def test_get(self): """Test get instance""" @@ -3599,7 +3632,8 @@ class ComputeAPITestCase(BaseTestCase): self.context, instance['uuid']): db.block_device_mapping_destroy(self.context, bdm['id']) instance = db.instance_get_by_uuid(self.context, instance['uuid']) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, + instance_uuid=instance['uuid']) def test_volume_size(self): ephemeral_size = 2 diff --git a/nova/tests/compute/test_rpcapi.py b/nova/tests/compute/test_rpcapi.py index b8e62c2d6..a1062ea57 100644 --- a/nova/tests/compute/test_rpcapi.py +++ b/nova/tests/compute/test_rpcapi.py @@ -48,23 +48,6 @@ class ComputeRpcAPITestCase(test.TestCase): def _test_compute_api(self, method, rpc_method, **kwargs): ctxt = context.RequestContext('fake_user', 'fake_project') - methods_with_instance = [ - 'add_fixed_ip_to_instance', 'attach_volume', - 'change_instance_metadata', 'check_can_live_migrate_destination', - 'check_can_live_migrate_source', 'confirm_resize', - 'detach_volume', 'finish_resize', 'finish_revert_resize', - 'get_console_output', 'get_diagnostics', 'get_vnc_console', - 'inject_file', 'inject_network_info', 'pause_instance', - 'post_live_migration_at_destination', 'power_off_instance', - 'power_on_instance', 'pre_live_migration', 'reboot_instance', - 'rebuild_instance', 'remove_fixed_ip_from_instance', - 'remove_volume_connection', 'rescue_instance', 'reset_network', - 'resize_instance', 'resume_instance', 'revert_resize', - 'rollback_live_migration_at_destination', 'set_admin_password', - 'snapshot_instance', 'start_instance', 'stop_instance', - 'suspend_instance', 'unpause_instance', 'unrescue_instance' - ] - if 'rpcapi_class' in kwargs: rpcapi_class = kwargs['rpcapi_class'] del kwargs['rpcapi_class'] @@ -83,11 +66,6 @@ class ComputeRpcAPITestCase(test.TestCase): del expected_msg['args']['host'] if 'destination' in expected_msg['args']: del expected_msg['args']['destination'] - if 'instance' in expected_msg['args'] and (method not in - methods_with_instance): - instance = expected_msg['args']['instance'] - del expected_msg['args']['instance'] - expected_msg['args']['instance_uuid'] = instance['uuid'] expected_msg['version'] = expected_version cast_and_call = ['confirm_resize', 'stop_instance'] @@ -333,7 +311,7 @@ class ComputeRpcAPITestCase(test.TestCase): def test_terminate_instance(self): self._test_compute_api('terminate_instance', 'cast', - instance=self.fake_instance) + instance=self.fake_instance, version='1.37') def test_unpause_instance(self): self._test_compute_api('unpause_instance', 'cast', diff --git a/nova/tests/test_compute_utils.py b/nova/tests/test_compute_utils.py index ee415da66..d717182af 100644 --- a/nova/tests/test_compute_utils.py +++ b/nova/tests/test_compute_utils.py @@ -112,7 +112,8 @@ class UsageInfoTestCase(test.TestCase): {'md_key1': 'val1', 'md_key2': 'val2'}) image_ref_url = "%s/images/1" % utils.generate_glance_url() self.assertEquals(payload['image_ref_url'], image_ref_url) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, + instance_uuid=instance['uuid']) def test_notify_usage_exists_deleted_instance(self): """Ensure 'exists' notification generates appropriate usage data.""" @@ -124,7 +125,8 @@ class UsageInfoTestCase(test.TestCase): 'other_data': 'meow'} db.instance_system_metadata_update(self.context, instance['uuid'], sys_metadata, False) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, + instance_uuid=instance['uuid']) instance = db.instance_get(self.context.elevated(read_deleted='yes'), instance_id) compute_utils.notify_usage_exists(self.context, instance) @@ -153,7 +155,8 @@ class UsageInfoTestCase(test.TestCase): """Ensure 'exists' notification generates appropriate usage data.""" instance_id = self._create_instance() instance = db.instance_get(self.context, instance_id) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, + instance_uuid=instance['uuid']) compute_utils.notify_usage_exists(self.context, instance) msg = test_notifier.NOTIFICATIONS[-1] self.assertEquals(msg['priority'], 'INFO') @@ -207,4 +210,5 @@ class UsageInfoTestCase(test.TestCase): self.assertEquals(payload['image_name'], 'fake_name') image_ref_url = "%s/images/1" % utils.generate_glance_url() self.assertEquals(payload['image_ref_url'], image_ref_url) - self.compute.terminate_instance(self.context, instance['uuid']) + self.compute.terminate_instance(self.context, + instance_uuid=instance['uuid']) |
