summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorBrian Waldon <brian.waldon@rackspace.com>2011-03-17 23:07:40 -0400
committerBrian Waldon <brian.waldon@rackspace.com>2011-03-17 23:07:40 -0400
commit47bec2abb39f76d5b3ea634dbb7012d55d7f99ce (patch)
tree965b042ce0a7e0f396aaf787f4a7af3146196ab7 /nova/api
parent79f2f90feec74b97d55af058c9bec4177bc47a54 (diff)
adding servers container to openstack api v1.1 servers entities
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/servers.py11
-rw-r--r--nova/api/openstack/views/servers.py56
2 files changed, 55 insertions, 12 deletions
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py
index e3141934b..de35aca8d 100644
--- a/nova/api/openstack/servers.py
+++ b/nova/api/openstack/servers.py
@@ -47,11 +47,15 @@ class Controller(wsgi.Controller):
""" The Server API controller for the OpenStack API """
_serialization_metadata = {
- 'application/xml': {
+ "application/xml": {
"attributes": {
"server": ["id", "imageId", "name", "flavorId", "hostId",
"status", "progress", "adminPass", "flavorRef",
- "imageRef"]}}}
+ "imageRef"],
+ "link": ["rel", "type", "href"],
+ },
+ },
+ }
def __init__(self):
self.compute_api = compute.API()
@@ -513,6 +517,7 @@ class Controller(wsgi.Controller):
return kernel_id, ramdisk_id
+
class ControllerV10(Controller):
def _image_id_from_req_data(self, data):
return data['server']['imageId']
@@ -546,7 +551,7 @@ class ControllerV11(Controller):
base_url)
addresses_builder = nova.api.openstack.views.addresses.ViewBuilderV11()
return nova.api.openstack.views.servers.ViewBuilderV11(
- addresses_builder, flavor_builder, image_builder)
+ addresses_builder, flavor_builder, image_builder, base_url)
def _get_addresses_view_builder(self, req):
return nova.api.openstack.views.addresses.ViewBuilderV11(req)
diff --git a/nova/api/openstack/views/servers.py b/nova/api/openstack/views/servers.py
index 8d47ac757..477f3caa0 100644
--- a/nova/api/openstack/views/servers.py
+++ b/nova/api/openstack/views/servers.py
@@ -39,12 +39,16 @@ class ViewBuilder(object):
Rackspace-like attributes for return
"""
if is_detail:
- return self._build_detail(inst)
+ server = self._build_detail(inst)
else:
- return self._build_simple(inst)
+ server = self._build_simple(inst)
+
+ self._build_extra(server, inst)
+
+ return dict(server=server)
def _build_simple(self, inst):
- return dict(server=dict(id=inst['id'], name=inst['display_name']))
+ return dict(id=inst['id'], name=inst['display_name'])
def _build_detail(self, inst):
power_mapping = {
@@ -79,7 +83,7 @@ class ViewBuilder(object):
self._build_image(inst_dict, inst)
self._build_flavor(inst_dict, inst)
- return dict(server=inst_dict)
+ return inst_dict
def _build_image(self, response, inst):
raise NotImplementedError()
@@ -87,6 +91,9 @@ class ViewBuilder(object):
def _build_flavor(self, response, inst):
raise NotImplementedError()
+ def _build_extra(self, response, inst):
+ pass
+
class ViewBuilderV10(ViewBuilder):
def _build_image(self, response, inst):
@@ -99,19 +106,50 @@ class ViewBuilderV10(ViewBuilder):
class ViewBuilderV11(ViewBuilder):
- def __init__(self, addresses_builder, flavor_builder, image_builder):
+ def __init__(self, addresses_builder, flavor_builder, image_builder,
+ base_url):
ViewBuilder.__init__(self, addresses_builder)
self.flavor_builder = flavor_builder
self.image_builder = image_builder
+ self.base_url = base_url
def _build_image(self, response, inst):
- if inst.get('image_id') == None:
+ image_id = inst.get("image_id", None)
+ if image_id == None:
return
- image_id = inst["image_id"]
response["imageRef"] = self.image_builder.generate_href(image_id)
def _build_flavor(self, response, inst):
- if inst.get('instance_type') == None:
+ flavor_id = inst.get("instance_type", None)
+ if flavor_id == None:
return
- flavor_id = inst["instance_type"]
response["flavorRef"] = self.flavor_builder.generate_href(flavor_id)
+
+ def _build_extra(self, response, inst):
+ self._build_links(response, inst)
+
+ def _build_links(self, response, inst):
+ href = self.generate_href(inst["id"])
+
+ links = [
+ {
+ "rel": "self",
+ "href": href,
+ },
+ {
+ "rel": "bookmark",
+ "type": "application/json",
+ "href": href,
+ },
+ {
+ "rel": "bookmark",
+ "type": "application/xml",
+ "href": href,
+ },
+ ]
+
+ response["links"] = links
+
+ def generate_href(self, server_id):
+ """Create an url that refers to a specific server id."""
+ return "%s/servers/%s" % (self.base_url, server_id)