summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/api/openstack/compute/contrib/admin_actions.py10
-rw-r--r--nova/compute/api.py14
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_admin_actions.py3
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,