summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorBrian Lamar <brian.lamar@rackspace.com>2011-08-19 18:34:34 -0400
committerBrian Lamar <brian.lamar@rackspace.com>2011-08-19 18:34:34 -0400
commitc4e77b67a74cb0828bb9a7ccbedcaa1baeb6188d (patch)
tree93bdbe47903ba961cb85bc49f1a6293ce002117d /nova/api
parent3bd386cdba53f6a54a29e510c0f9eecf9b9ea7d9 (diff)
downloadnova-c4e77b67a74cb0828bb9a7ccbedcaa1baeb6188d.tar.gz
nova-c4e77b67a74cb0828bb9a7ccbedcaa1baeb6188d.tar.xz
nova-c4e77b67a74cb0828bb9a7ccbedcaa1baeb6188d.zip
Lots of modifications surrounding the OSAPI to remove any mention of dealing with power states and exclusively using vm_states and task_state modules. Currently there are still a number of tests failing, but this is a stopping place for today.
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/common.py52
-rw-r--r--nova/api/openstack/servers.py12
-rw-r--r--nova/api/openstack/views/servers.py5
3 files changed, 35 insertions, 34 deletions
diff --git a/nova/api/openstack/common.py b/nova/api/openstack/common.py
index d9eb832f2..eae0fd916 100644
--- a/nova/api/openstack/common.py
+++ b/nova/api/openstack/common.py
@@ -27,7 +27,8 @@ from nova import flags
from nova import log as logging
from nova import quota
from nova.api.openstack import wsgi
-from nova.compute import power_state as compute_power_state
+from nova.compute import vm_states
+from nova.compute import task_state
LOG = logging.getLogger('nova.api.openstack.common')
@@ -38,36 +39,35 @@ XML_NS_V10 = 'http://docs.rackspacecloud.com/servers/api/v1.0'
XML_NS_V11 = 'http://docs.openstack.org/compute/api/v1.1'
-_STATUS_MAP = {
- None: 'BUILD',
- compute_power_state.NOSTATE: 'BUILD',
- compute_power_state.RUNNING: 'ACTIVE',
- compute_power_state.BLOCKED: 'ACTIVE',
- compute_power_state.SUSPENDED: 'SUSPENDED',
- compute_power_state.PAUSED: 'PAUSED',
- compute_power_state.SHUTDOWN: 'SHUTDOWN',
- compute_power_state.SHUTOFF: 'SHUTOFF',
- compute_power_state.CRASHED: 'ERROR',
- compute_power_state.FAILED: 'ERROR',
- compute_power_state.BUILDING: 'BUILD',
+_STATE_MAP = {
+ vm_states.ACTIVE: 'ACTIVE',
+ vm_states.BUILD: 'BUILD',
+ vm_states.REBUILD: 'REBUILD',
+ vm_states.REBOOT: 'REBOOT',
+ vm_states.HARD_REBOOT: 'HARD_REBOOT',
+ vm_states.STOP: 'STOPPED',
+ vm_states.MIGRATE: 'MIGRATING',
+ vm_states.RESIZE: 'RESIZE',
+ vm_states.VERIFY_RESIZE: 'VERIFY_RESIZE',
+ vm_states.PAUSE: 'PAUSED',
+ vm_states.SUSPEND: 'SUSPENDED',
+ vm_states.RESCUE: 'RESCUE',
+ vm_states.ERROR: 'ERROR',
}
-def status_from_power_state(power_state):
- """Map the power state to the server status string"""
- return _STATUS_MAP[power_state]
+def status_from_state(_vm_state, _task_state=None):
+ """Given vm_state and task_state, return a status string."""
+ if _vm_state == vm_states.ACTIVE and _task_state == task_state.PASSWORD:
+ return "PASSWORD"
+ return _STATE_MAP.get(_vm_state, "UNKNOWN_STATE")
-def power_states_from_status(status):
- """Map the server status string to a list of power states"""
- power_states = []
- for power_state, status_map in _STATUS_MAP.iteritems():
- # Skip the 'None' state
- if power_state is None:
- continue
- if status.lower() == status_map.lower():
- power_states.append(power_state)
- return power_states
+def vm_state_from_status(status):
+ """Map the server status string to a vm state."""
+ for state, status_string in _STATE_MAP.iteritems():
+ if status.lower() == status_string.lower():
+ return state
def get_pagination_params(request):
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py
index 41e63ec3c..0a451caee 100644
--- a/nova/api/openstack/servers.py
+++ b/nova/api/openstack/servers.py
@@ -95,17 +95,15 @@ class Controller(object):
search_opts['recurse_zones'] = utils.bool_from_str(
search_opts.get('recurse_zones', False))
- # If search by 'status', we need to convert it to 'state'
- # If the status is unknown, bail.
- # Leave 'state' in search_opts so compute can pass it on to
- # child zones..
+ # If search by 'status', we need to convert it to 'vm_state'
+ # to pass on to child zones.
if 'status' in search_opts:
status = search_opts['status']
- search_opts['state'] = common.power_states_from_status(status)
- if len(search_opts['state']) == 0:
+ state = common.vm_state_from_status(status)
+ if state is None:
reason = _('Invalid server status: %(status)s') % locals()
- LOG.error(reason)
raise exception.InvalidInput(reason=reason)
+ search_opts['vm_state'] = state
# By default, compute's get_all() will return deleted instances.
# If an admin hasn't specified a 'deleted' search option, we need
diff --git a/nova/api/openstack/views/servers.py b/nova/api/openstack/views/servers.py
index edc328129..e9a932b0e 100644
--- a/nova/api/openstack/views/servers.py
+++ b/nova/api/openstack/views/servers.py
@@ -27,6 +27,7 @@ from nova.api.openstack.views import addresses as addresses_view
from nova.api.openstack.views import flavors as flavors_view
from nova.api.openstack.views import images as images_view
from nova import utils
+from nova.compute import vm_states
class ViewBuilder(object):
@@ -60,11 +61,13 @@ class ViewBuilder(object):
def _build_detail(self, inst):
"""Returns a detailed model of a server."""
+ vm_state = inst.get('vm_state', vm_states.BUILD)
+ task_state = inst.get('task_state')
inst_dict = {
'id': inst['id'],
'name': inst['display_name'],
- 'status': common.status_from_power_state(inst.get('state'))}
+ 'status': common.status_from_state(vm_state, task_state)}
ctxt = nova.context.get_admin_context()
compute_api = nova.compute.API()