summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Meade <alex.meade@rackspace.com>2011-11-10 15:52:04 -0500
committerAlex Meade <alex.meade@rackspace.com>2011-11-11 11:00:43 -0500
commit43fb6880d90197735b0b9bf4587fcece825c1ed0 (patch)
tree26066ad20308b4b85f8b4229293654d1067fb2f9
parent59dfaf9e02ff0064a6844c9c986737267317776f (diff)
downloadnova-43fb6880d90197735b0b9bf4587fcece825c1ed0.tar.gz
nova-43fb6880d90197735b0b9bf4587fcece825c1ed0.tar.xz
nova-43fb6880d90197735b0b9bf4587fcece825c1ed0.zip
Convert pause/unpause, sus/res to use instance obj
Related to blueprint internal-uuids Change-Id: I02bd212b4878ed0fcb971c223518ecf7126bd597
-rw-r--r--nova/api/openstack/contrib/admin_actions.py12
-rw-r--r--nova/compute/api.py12
-rw-r--r--nova/tests/api/openstack/contrib/test_admin_actions.py23
-rw-r--r--nova/tests/test_compute.py60
4 files changed, 99 insertions, 8 deletions
diff --git a/nova/api/openstack/contrib/admin_actions.py b/nova/api/openstack/contrib/admin_actions.py
index 2e75e7237..8ed0827b8 100644
--- a/nova/api/openstack/contrib/admin_actions.py
+++ b/nova/api/openstack/contrib/admin_actions.py
@@ -52,7 +52,8 @@ class Admin_actions(extensions.ExtensionDescriptor):
"""Permit Admins to pause the server"""
ctxt = req.environ['nova.context']
try:
- self.compute_api.pause(ctxt, id)
+ server = self.compute_api.get(ctxt, id)
+ self.compute_api.pause(ctxt, server)
except Exception:
readable = traceback.format_exc()
LOG.exception(_("Compute.api::pause %s"), readable)
@@ -66,7 +67,8 @@ class Admin_actions(extensions.ExtensionDescriptor):
"""Permit Admins to unpause the server"""
ctxt = req.environ['nova.context']
try:
- self.compute_api.unpause(ctxt, id)
+ server = self.compute_api.get(ctxt, id)
+ self.compute_api.unpause(ctxt, server)
except Exception:
readable = traceback.format_exc()
LOG.exception(_("Compute.api::unpause %s"), readable)
@@ -80,7 +82,8 @@ class Admin_actions(extensions.ExtensionDescriptor):
"""Permit admins to suspend the server"""
context = req.environ['nova.context']
try:
- self.compute_api.suspend(context, id)
+ server = self.compute_api.get(context, id)
+ self.compute_api.suspend(context, server)
except Exception:
readable = traceback.format_exc()
LOG.exception(_("compute.api::suspend %s"), readable)
@@ -94,7 +97,8 @@ class Admin_actions(extensions.ExtensionDescriptor):
"""Permit admins to resume the server from suspend"""
context = req.environ['nova.context']
try:
- self.compute_api.resume(context, id)
+ server = self.compute_api.get(context, id)
+ self.compute_api.resume(context, server)
except Exception:
readable = traceback.format_exc()
LOG.exception(_("compute.api::resume %s"), readable)
diff --git a/nova/compute/api.py b/nova/compute/api.py
index 820a7b9b6..dd1357d6c 100644
--- a/nova/compute/api.py
+++ b/nova/compute/api.py
@@ -1343,8 +1343,9 @@ class API(base.Base):
self.network_api.add_network_to_project(context, project_id)
@scheduler_api.reroute_compute("pause")
- def pause(self, context, instance_id):
+ def pause(self, context, instance):
"""Pause the given instance."""
+ instance_id = instance["id"]
self.update(context,
instance_id,
vm_state=vm_states.ACTIVE,
@@ -1352,8 +1353,9 @@ class API(base.Base):
self._cast_compute_message('pause_instance', context, instance_id)
@scheduler_api.reroute_compute("unpause")
- def unpause(self, context, instance_id):
+ def unpause(self, context, instance):
"""Unpause the given instance."""
+ instance_id = instance["id"]
self.update(context,
instance_id,
vm_state=vm_states.PAUSED,
@@ -1388,8 +1390,9 @@ class API(base.Base):
return self.db.instance_get_actions(context, instance_id)
@scheduler_api.reroute_compute("suspend")
- def suspend(self, context, instance_id):
+ def suspend(self, context, instance):
"""Suspend the given instance."""
+ instance_id = instance["id"]
self.update(context,
instance_id,
vm_state=vm_states.ACTIVE,
@@ -1397,8 +1400,9 @@ class API(base.Base):
self._cast_compute_message('suspend_instance', context, instance_id)
@scheduler_api.reroute_compute("resume")
- def resume(self, context, instance_id):
+ def resume(self, context, instance):
"""Resume the given instance."""
+ instance_id = instance["id"]
self.update(context,
instance_id,
vm_state=vm_states.SUSPENDED,
diff --git a/nova/tests/api/openstack/contrib/test_admin_actions.py b/nova/tests/api/openstack/contrib/test_admin_actions.py
index 8b5697609..84df0f9bc 100644
--- a/nova/tests/api/openstack/contrib/test_admin_actions.py
+++ b/nova/tests/api/openstack/contrib/test_admin_actions.py
@@ -12,6 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
+import datetime
import json
import webob
@@ -23,11 +24,32 @@ from nova.tests.api.openstack import fakes
FLAGS = flags.FLAGS
+INSTANCE = {
+ "id": 1,
+ "name": "fake",
+ "display_name": "test_server",
+ "uuid": "abcd",
+ "user_id": 'fake_user_id',
+ "tenant_id": 'fake_tenant_id',
+ "created_at": datetime.datetime(2010, 10, 10, 12, 0, 0),
+ "updated_at": datetime.datetime(2010, 11, 11, 11, 0, 0),
+ "security_groups": [{"id": 1, "name": "test"}],
+ "progress": 0,
+ "image_ref": 'http://foo.com/123',
+ "fixed_ips": [],
+ "instance_type": {"flavorid": '124'},
+ }
+
def fake_compute_api(cls, req, id):
return True
+def return_server_by_id(context, id, session=None):
+ INSTANCE['id'] = id
+ return INSTANCE
+
+
class AdminActionsTest(test.TestCase):
_actions = ('pause', 'unpause', 'suspend', 'resume', 'migrate',
@@ -41,6 +63,7 @@ class AdminActionsTest(test.TestCase):
self.flags(allow_admin_api=True)
for _method in self._methods:
self.stubs.Set(compute.API, _method, fake_compute_api)
+ self.stubs.Set(compute.API, 'get', return_server_by_id)
def test_admin_api_enabled(self):
app = fakes.wsgi_app()
diff --git a/nova/tests/test_compute.py b/nova/tests/test_compute.py
index 0e8d53751..a81fadffe 100644
--- a/nova/tests/test_compute.py
+++ b/nova/tests/test_compute.py
@@ -1121,6 +1121,66 @@ class ComputeAPITestCase(BaseTestCase):
instance = db.instance_get(self.context, instance_id)
self.assertEqual(instance['task_state'], task_states.DELETING)
+ def test_suspend(self):
+ """Ensure instance can be suspended"""
+ instance_id = self._create_instance()
+ self.compute.run_instance(self.context, instance_id)
+
+ inst_ref = db.instance_get(self.context, instance_id)
+ self.assertEqual(inst_ref['task_state'], None)
+
+ self.compute_api.suspend(self.context, inst_ref)
+
+ inst_ref = db.instance_get(self.context, instance_id)
+ self.assertEqual(inst_ref['task_state'], task_states.SUSPENDING)
+
+ db.instance_destroy(self.context, instance_id)
+
+ def test_resume(self):
+ """Ensure instance can be resumed"""
+ instance_id = self._create_instance()
+ self.compute.run_instance(self.context, instance_id)
+
+ inst_ref = db.instance_get(self.context, instance_id)
+ self.assertEqual(inst_ref['task_state'], None)
+
+ self.compute_api.resume(self.context, inst_ref)
+
+ inst_ref = db.instance_get(self.context, instance_id)
+ self.assertEqual(inst_ref['task_state'], task_states.RESUMING)
+
+ db.instance_destroy(self.context, instance_id)
+
+ def test_pause(self):
+ """Ensure instance can be paused"""
+ instance_id = self._create_instance()
+ self.compute.run_instance(self.context, instance_id)
+
+ inst_ref = db.instance_get(self.context, instance_id)
+ self.assertEqual(inst_ref['task_state'], None)
+
+ self.compute_api.pause(self.context, inst_ref)
+
+ inst_ref = db.instance_get(self.context, instance_id)
+ self.assertEqual(inst_ref['task_state'], task_states.PAUSING)
+
+ db.instance_destroy(self.context, instance_id)
+
+ def test_unpause(self):
+ """Ensure instance can be unpaused"""
+ instance_id = self._create_instance()
+ self.compute.run_instance(self.context, instance_id)
+
+ inst_ref = db.instance_get(self.context, instance_id)
+ self.assertEqual(inst_ref['task_state'], None)
+
+ self.compute.pause_instance(self.context, instance_id)
+
+ self.compute_api.unpause(self.context, inst_ref)
+
+ inst_ref = db.instance_get(self.context, instance_id)
+ self.assertEqual(inst_ref['task_state'], task_states.UNPAUSING)
+
db.instance_destroy(self.context, instance_id)
def test_rebuild(self):