summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorChris Behrens <cbehrens@codestud.com>2011-07-18 02:45:10 -0700
committerChris Behrens <cbehrens@codestud.com>2011-07-18 02:45:10 -0700
commit102a0e5b9d6ce22a5fc5a00fc260bbe1e3592222 (patch)
tree06f657ebaeb5067d9b21b5c054eed548ac8451ec /nova/api
parent491c90924ac87e533ce61e3bf949a50bfdd6a31d (diff)
added searching by 'image', 'flavor', and 'status'
reverted ip/ip6 searching to be admin only
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/servers.py18
-rw-r--r--nova/api/openstack/views/servers.py15
2 files changed, 14 insertions, 19 deletions
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py
index 218037d14..fb1ce2529 100644
--- a/nova/api/openstack/servers.py
+++ b/nova/api/openstack/servers.py
@@ -119,6 +119,14 @@ class Controller(object):
if search_opts is None:
search_opts = {}
+ # If search by 'status', we need to convert it to 'state'
+ # If the status is unknown, bail
+ status = search_opts.pop('status', None)
+ if status is not None:
+ search_opts['state'] = power_state.states_from_status(status)
+ if len(search_opts['state']) == 0:
+ raise exception.InvalidInput(reason=_(
+ 'Invalid server status'))
instance_list = self.compute_api.get_all(
context, search_opts=search_opts)
limited_list = self._limit_items(instance_list, req)
@@ -464,8 +472,8 @@ class ControllerV10(Controller):
search_opts.update(req.str_GET)
user_api = ['project_id', 'fixed_ip', 'recurse_zones',
- 'reservation_id', 'name', 'fresh', 'ip', 'ip6']
- admin_api = ['instance_name']
+ 'reservation_id', 'name', 'fresh', 'status']
+ admin_api = ['ip', 'ip6', 'instance_name']
context = req.environ['nova.context']
@@ -570,7 +578,7 @@ class ControllerV11(Controller):
search_opts.update(req.str_GET)
user_api = ['image', 'flavor', 'name', 'status',
- 'reservation_id', 'changes-since', 'ip', 'ip6']
+ 'reservation_id', 'changes-since']
admin_api = ['ip', 'ip6', 'instance_name']
context = req.environ['nova.context']
@@ -579,9 +587,9 @@ class ControllerV11(Controller):
check_option_permissions(context, search_opt.keys(),
user_api, admin_api)
except exception.InvalidInput, e:
- raise faults.Fault(exc.HTTPBadRequest(detail=str(e)))
+ raise faults.Fault(exc.HTTPBadRequest(explanation=str(e)))
except exception.AdminRequired, e:
- raise faults.Fault(exc.HTTPForbidden(detail=str(e)))
+ raise faults.Fault(exc.HTTPForbidden(explanation=str(e)))
# NOTE(comstud): Making recurse_zones always be True in v1.1
search_opts['recurse_zones'] = True
diff --git a/nova/api/openstack/views/servers.py b/nova/api/openstack/views/servers.py
index 67fb6a84e..1883ce2a5 100644
--- a/nova/api/openstack/views/servers.py
+++ b/nova/api/openstack/views/servers.py
@@ -60,25 +60,12 @@ class ViewBuilder(object):
def _build_detail(self, inst):
"""Returns a detailed model of a server."""
- power_mapping = {
- None: 'BUILD',
- power_state.NOSTATE: 'BUILD',
- power_state.RUNNING: 'ACTIVE',
- power_state.BLOCKED: 'ACTIVE',
- power_state.SUSPENDED: 'SUSPENDED',
- power_state.PAUSED: 'PAUSED',
- power_state.SHUTDOWN: 'SHUTDOWN',
- power_state.SHUTOFF: 'SHUTOFF',
- power_state.CRASHED: 'ERROR',
- power_state.FAILED: 'ERROR',
- power_state.BUILDING: 'BUILD',
- }
inst_dict = {
'id': inst['id'],
'name': inst['display_name'],
'addresses': self.addresses_builder.build(inst),
- 'status': power_mapping[inst.get('state')]}
+ 'status': power_state.status_from_state(inst.get('state'))}
ctxt = nova.context.get_admin_context()
compute_api = nova.compute.API()