summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorAlex Meade <alex.meade@rackspace.com>2011-07-13 15:59:05 -0400
committerAlex Meade <alex.meade@rackspace.com>2011-07-13 15:59:05 -0400
commite1eca2190b66c745b425579affd2407e0ffd11c6 (patch)
tree5b8d4324c2ac82a62c664d570544111e2eb0d222 /nova/api
parentce146a76437401882e04305cc8ea64b3c638135e (diff)
beginning server detail spec 1.1 fixup
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/common.py23
-rw-r--r--nova/api/openstack/views/servers.py27
2 files changed, 45 insertions, 5 deletions
diff --git a/nova/api/openstack/common.py b/nova/api/openstack/common.py
index 79969d393..26b8c1946 100644
--- a/nova/api/openstack/common.py
+++ b/nova/api/openstack/common.py
@@ -136,6 +136,29 @@ def get_id_from_href(href):
raise ValueError(_('could not parse id from href'))
+def get_uuid_from_href(href):
+ """Return the uuid portion of a url.
+
+ Given: 'http://www.foo.com/bar/123?q=4'
+ Returns: '123'
+
+ In order to support local hrefs, the href argument can be just an id:
+ Given: '123'
+ Returns: '123'
+
+ """
+ if not '/' in href:
+ return href
+ try:
+ href = urlparse(href).path.split('/')[-1]
+ if href == '':
+ raise Exception
+ return href
+ except:
+ LOG.debug(_("Error extracting uuid from href: %s") % href)
+ raise ValueError(_('could not parse uuid from href'))
+
+
def remove_version_from_href(href):
"""Removes the api version from the href.
diff --git a/nova/api/openstack/views/servers.py b/nova/api/openstack/views/servers.py
index 67fb6a84e..7fb180246 100644
--- a/nova/api/openstack/views/servers.py
+++ b/nova/api/openstack/views/servers.py
@@ -50,7 +50,7 @@ class ViewBuilder(object):
else:
server = self._build_simple(inst)
- self._build_extra(server, inst)
+ self._build_extra(server['server'], inst)
return server
@@ -99,7 +99,6 @@ class ViewBuilder(object):
self._build_image(inst_dict, inst)
self._build_flavor(inst_dict, inst)
- inst_dict['uuid'] = inst['uuid']
return dict(server=inst_dict)
def _build_image(self, response, inst):
@@ -117,6 +116,9 @@ class ViewBuilder(object):
class ViewBuilderV10(ViewBuilder):
"""Model an Openstack API V1.0 server response."""
+ def _build_extra(self, response, inst):
+ response['uuid'] = inst['uuid']
+
def _build_image(self, response, inst):
if 'image_ref' in dict(inst):
image_ref = inst['image_ref']
@@ -143,16 +145,31 @@ class ViewBuilderV11(ViewBuilder):
image_href = inst['image_ref']
if str(image_href).isdigit():
image_href = int(image_href)
- response['imageRef'] = image_href
+ response['image'] = {
+ "id": common.get_uuid_from_href(image_href),
+ "links": [
+ {
+ "rel": "self",
+ "href": image_href,
+ },
+ {
+ "rel": "bookmark",
+ "href": common.remove_version_from_href(image_href),
+ },
+ ]
+ }
def _build_flavor(self, response, inst):
if "instance_type" in dict(inst):
flavor_id = inst["instance_type"]['flavorid']
flavor_ref = self.flavor_builder.generate_href(flavor_id)
- response["flavorRef"] = flavor_ref
+ response["flavor"] = {
+ "id": common.get_uuid_from_href(flavor_ref),
+ }
def _build_extra(self, response, inst):
self._build_links(response, inst)
+ response['id'] = inst['uuid']
def _build_links(self, response, inst):
href = self.generate_href(inst["id"])
@@ -169,7 +186,7 @@ class ViewBuilderV11(ViewBuilder):
},
]
- response["server"]["links"] = links
+ response["links"] = links
def generate_href(self, server_id):
"""Create an url that refers to a specific server id."""