diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-08-23 20:05:10 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-08-23 20:05:10 +0000 |
| commit | 87bc968f1b0546dd131683efa7e9d1a1dfcad1e7 (patch) | |
| tree | f15d5235482e98c7af34a9ab882d0f97dec750aa | |
| parent | 44512748bc6fa8dd24ae57643d368675aee29e4e (diff) | |
| parent | d034ff1cc12889d3812545a5e1a74c70f66270f5 (diff) | |
Merge "Let admin list instances in vm_states.DELETED"
| -rw-r--r-- | nova/api/openstack/compute/servers.py | 7 | ||||
| -rw-r--r-- | nova/tests/api/openstack/compute/test_servers.py | 25 |
2 files changed, 32 insertions, 0 deletions
diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py index 104f6ab99..229c3b5aa 100644 --- a/nova/api/openstack/compute/servers.py +++ b/nova/api/openstack/compute/servers.py @@ -428,6 +428,13 @@ class Controller(wsgi.Controller): # No 'changes-since', so we only want non-deleted servers search_opts['deleted'] = False + if search_opts.get("vm_state") == "deleted": + if context.is_admin: + search_opts['deleted'] = True + else: + msg = _("Only administrators may list deleted instances") + raise exc.HTTPBadRequest(explanation=msg) + # NOTE(dprince) This prevents computes' get_all() from returning # instances from multiple tenants when an admin accounts is used. # By default non-admin accounts are always limited to project/user diff --git a/nova/tests/api/openstack/compute/test_servers.py b/nova/tests/api/openstack/compute/test_servers.py index 6fc7c2fbe..3edf7a5ab 100644 --- a/nova/tests/api/openstack/compute/test_servers.py +++ b/nova/tests/api/openstack/compute/test_servers.py @@ -718,6 +718,31 @@ class ServersControllerTest(test.TestCase): use_admin_context=False) self.assertRaises(webob.exc.HTTPBadRequest, self.controller.index, req) + def test_get_servers_deleted_status_as_user(self): + req = fakes.HTTPRequest.blank('/v2/fake/servers?status=deleted', + use_admin_context=False) + self.assertRaises(webob.exc.HTTPBadRequest, + self.controller.detail, req) + + def test_get_servers_deleted_status_as_admin(self): + server_uuid = str(utils.gen_uuid()) + + def fake_get_all(compute_self, context, search_opts=None, + sort_key=None, sort_dir='desc'): + self.assertTrue('vm_state' in search_opts) + self.assertEqual(search_opts['vm_state'], 'deleted') + + return [fakes.stub_instance(100, uuid=server_uuid)] + + self.stubs.Set(nova.compute.API, 'get_all', fake_get_all) + + req = fakes.HTTPRequest.blank('/v2/fake/servers?status=deleted', + use_admin_context=True) + + servers = self.controller.detail(req)['servers'] + self.assertEqual(len(servers), 1) + self.assertEqual(servers[0]['id'], server_uuid) + def test_get_servers_allows_name(self): server_uuid = str(utils.gen_uuid()) |
