summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/servers.py13
-rw-r--r--nova/api/openstack/views/servers.py42
2 files changed, 44 insertions, 11 deletions
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py
index ea8321e8d..7bb7250ba 100644
--- a/nova/api/openstack/servers.py
+++ b/nova/api/openstack/servers.py
@@ -27,7 +27,8 @@ from nova import wsgi
from nova import utils
from nova.api.openstack import common
from nova.api.openstack import faults
-from nova.api.openstack.views.servers import get_view_builder
+from nova.api.openstack.views import servers as servers_views
+from nova.api.openstack.views import addresses as addresses_views
from nova.auth import manager as auth_manager
from nova.compute import instance_types
from nova.compute import power_state
@@ -55,8 +56,8 @@ class Controller(wsgi.Controller):
def ips(self, req, id):
try:
instance = self.compute_api.get(req.environ['nova.context'], id)
- builder = get_view_builder(req)
- return builder._build_addresses(instance)
+ builder = addresses_views.get_view_builder(req)
+ return builder.build(instance)
except exception.NotFound:
return faults.Fault(exc.HTTPNotFound())
@@ -75,7 +76,7 @@ class Controller(wsgi.Controller):
"""
instance_list = self.compute_api.get_all(req.environ['nova.context'])
limited_list = common.limited(instance_list, req)
- builder = get_view_builder(req)
+ builder = servers_views.get_view_builder(req)
servers = [builder.build(inst, is_detail)['server']
for inst in limited_list]
return dict(servers=servers)
@@ -84,7 +85,7 @@ class Controller(wsgi.Controller):
""" Returns server details by server id """
try:
instance = self.compute_api.get(req.environ['nova.context'], id)
- builder = get_view_builder(req)
+ builder = servers_views.get_view_builder(req)
return builder.build(instance, is_detail=True)
except exception.NotFound:
return faults.Fault(exc.HTTPNotFound())
@@ -137,7 +138,7 @@ class Controller(wsgi.Controller):
metadata=metadata,
onset_files=env.get('onset_files', []))
- builder = get_view_builder(req)
+ builder = servers_views.get_view_builder(req)
server = builder.build(instances[0], is_detail=False)
password = "%s%s" % (server['server']['name'][:4],
utils.generate_password(12))
diff --git a/nova/api/openstack/views/servers.py b/nova/api/openstack/views/servers.py
index 3ccfd8dba..950662747 100644
--- a/nova/api/openstack/views/servers.py
+++ b/nova/api/openstack/views/servers.py
@@ -1,6 +1,8 @@
import hashlib
from nova.compute import power_state
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
@@ -12,7 +14,9 @@ def get_view_builder(req):
version = req.environ['nova.context'].version
addresses_builder = addresses_view.get_view_builder(req)
if version == '1.1':
- return ViewBuilder_1_1(addresses_builder)
+ flavor_builder = flavors_view.get_view_builder(req)
+ image_builder = images_view.get_view_builder(req)
+ return ViewBuilder_1_1(addresses_builder, flavor_builder, image_builder)
else:
return ViewBuilder_1_0(addresses_builder)
@@ -48,8 +52,10 @@ class ViewBuilder(object):
power_state.FAILED: 'error'}
inst_dict = {}
- mapped_keys = dict(status='state', imageId='image_id',
- flavorId='instance_type', name='display_name', id='id')
+ #mapped_keys = dict(status='state', imageId='image_id',
+ # flavorId='instance_type', name='display_name', id='id')
+
+ mapped_keys = dict(status='state', name='display_name', id='id')
for k, v in mapped_keys.iteritems():
inst_dict[k] = inst[v]
@@ -67,13 +73,39 @@ class ViewBuilder(object):
if inst['host']:
inst_dict['hostId'] = hashlib.sha224(inst['host']).hexdigest()
+ inst_dict = self._decorate_response(inst_dict, inst)
+
return dict(server=inst_dict)
+ def _build_image_data(self, response, inst):
+ raise NotImplementedError()
+
class ViewBuilder_1_0(ViewBuilder):
- pass
+ def _decorate_response(self, response, inst):
+ response["imageId"] = inst["image_id"]
+ response["flavorId"] = inst["instance_type"]
+ return response
class ViewBuilder_1_1(ViewBuilder):
- pass
+ def __init__(self, addresses_builder, flavor_builder, image_builder):
+ ViewBuilder.__init__(self, addresses_builder)
+ self.flavor_builder = flavor_builder
+ self.image_builder = image_builder
+
+ def _decorate_response(self, response, inst):
+ response = self._build_image_ref(response, inst)
+ response = self._build_flavor_ref(response, inst)
+ return response
+
+ def _build_image_ref(self, response, inst):
+ image_id = inst["image_id"]
+ response["imageRef"] = self.image_builder.generate_href(image_id)
+ return response
+
+ def _build_flavor_ref(self, response, inst):
+ flavor_id = inst["instance_type"]
+ response["flavorRef"]= self.flavor_builder.generate_href(flavor_id)
+ return response