diff options
-rw-r--r-- | nova/api/openstack/compute/contrib/admin_actions.py | 10 | ||||
-rw-r--r-- | nova/compute/api.py | 14 | ||||
-rw-r--r-- | nova/tests/api/openstack/compute/contrib/test_admin_actions.py | 3 |
3 files changed, 18 insertions, 9 deletions
diff --git a/nova/api/openstack/compute/contrib/admin_actions.py b/nova/api/openstack/compute/contrib/admin_actions.py index 7cda220db..18adf8377 100644 --- a/nova/api/openstack/compute/contrib/admin_actions.py +++ b/nova/api/openstack/compute/contrib/admin_actions.py @@ -25,7 +25,6 @@ from nova import compute from nova import exception from nova import flags from nova import log as logging -from nova.scheduler import rpcapi as scheduler_rpcapi FLAGS = flags.FLAGS @@ -41,7 +40,6 @@ class AdminActionsController(wsgi.Controller): def __init__(self, *args, **kwargs): super(AdminActionsController, self).__init__(*args, **kwargs) self.compute_api = compute.API() - self.scheduler_rpcapi = scheduler_rpcapi.SchedulerAPI() # TODO(bcwaldon): These action names should be prefixed with 'os-' @@ -275,12 +273,8 @@ class AdminActionsController(wsgi.Controller): try: instance = self.compute_api.get(context, id) - self.scheduler_rpcapi.live_migration(context, - block_migration, - disk_over_commit, - instance["id"], - host, - topic=FLAGS.compute_topic) + self.compute_api.live_migrate(context, instance, block_migration, + disk_over_commit, host) except Exception: msg = _("Live migration of instance %(id)s to host %(host)s" " failed") % locals() diff --git a/nova/compute/api.py b/nova/compute/api.py index a0672cfff..37f93f9b3 100644 --- a/nova/compute/api.py +++ b/nova/compute/api.py @@ -1824,6 +1824,20 @@ class API(base.Base): return self.db.block_device_mapping_get_all_by_instance(context, instance['uuid']) + @check_instance_state(vm_state=[vm_states.ACTIVE]) + def live_migrate(self, context, instance, block_migration, + disk_over_commit, host): + """Migrate a server lively to a new host.""" + instance_uuid = instance["uuid"] + LOG.debug(_("Going to try to live migrate instance"), + instance=instance) + self.scheduler_rpcapi.live_migration(context, + block_migration, + disk_over_commit, + instance["id"], + host, + topic=FLAGS.compute_topic) + class HostAPI(base.Base): def __init__(self): diff --git a/nova/tests/api/openstack/compute/contrib/test_admin_actions.py b/nova/tests/api/openstack/compute/contrib/test_admin_actions.py index cc48b7c66..ebab28472 100644 --- a/nova/tests/api/openstack/compute/contrib/test_admin_actions.py +++ b/nova/tests/api/openstack/compute/contrib/test_admin_actions.py @@ -19,6 +19,7 @@ import webob from nova.api.openstack import compute as compute_api from nova import compute +from nova.compute import vm_states from nova import context from nova import exception from nova import flags @@ -56,7 +57,7 @@ def fake_compute_api_raises_invalid_state(*args, **kwargs): def fake_compute_api_get(self, context, instance_id): - return {'id': 1, 'uuid': instance_id} + return {'id': 1, 'uuid': instance_id, 'vm_state': vm_states.ACTIVE} def fake_scheduler_api_live_migration(self, context, block_migration, |