Merge pull request #125 from rnirmal/au_revoir_instance_details

Au revoir /instances/detail.
This commit is contained in:
Nirmal Ranganathan 2012-06-14 08:42:19 -07:00
commit 6f0f94514c
2 changed files with 24 additions and 46 deletions

View File

@ -176,25 +176,14 @@ class InstanceController(BaseController):
instance.resize_flavor(new_flavor_id)
return wsgi.Result(None, 202)
def detail(self, req, tenant_id):
"""Return all instances."""
LOG.info(_("req : '%s'\n\n") % req)
LOG.info(_("Detailing database instance for tenant '%s'") % tenant_id)
#TODO(cp16net) return a detailed list instead of index
return self.index(req, tenant_id, detailed=True)
def index(self, req, tenant_id, detailed=False):
def index(self, req, tenant_id):
"""Return all instances."""
LOG.info(_("req : '%s'\n\n") % req)
LOG.info(_("Indexing a database instance for tenant '%s'") % tenant_id)
context = req.environ[wsgi.CONTEXT_KEY]
servers, marker = models.Instances.load(context)
# TODO(cp16net): need to set the return code correctly
if detailed:
view = views.InstancesDetailView(servers, req=req,
add_volumes=self.add_volumes)
else:
view = views.InstancesView(servers, req=req)
view = views.InstancesView(servers, req=req,
add_volumes=self.add_volumes)
paged = pagination.SimplePaginatedDataView(req.url, 'instances', view,
marker)
return wsgi.Result(paged.data(), 200)
@ -348,7 +337,6 @@ class API(wsgi.Router):
instance_resource = InstanceController().create_resource()
path = "/{tenant_id}/instances"
mapper.resource("instance", path, controller=instance_resource,
collection={'detail': 'GET'},
member={'action': 'POST'})
# TODO(ed-): remove this when all mention of flavorservice

View File

@ -51,8 +51,11 @@ class InstanceView(object):
"id": self.instance.id,
"name": self.instance.name,
"status": self.instance.status,
"links": self._build_links()
"links": self._build_links(),
"flavor": self._build_flavor_info(),
}
if self.add_volumes:
instance_dict['volume'] = {'size': self.instance.volume_size}
dns_support = config.Config.get("reddwarf_dns_support", 'False')
if utils.bool_from_string(dns_support):
instance_dict['hostname'] = self.instance.hostname
@ -62,6 +65,16 @@ class InstanceView(object):
def _build_links(self):
return create_links("instances", self.req, self.instance.id)
def _build_flavor_info(self):
return {
"id": self.instance.flavor_id,
"links": self._build_flavor_links()
}
def _build_flavor_links(self):
return create_links("flavors", self.req,
self.instance.flavor_id)
class InstanceDetailView(InstanceView):
"""Works with a full-blown instance."""
@ -74,38 +87,28 @@ class InstanceDetailView(InstanceView):
self.add_addresses = add_addresses
self.add_volumes = add_volumes
def _build_flavor_info(self):
return {
"id": self.instance.flavor_id,
"links": self._build_flavor_links()
}
def data(self):
result = super(InstanceDetailView, self).data()
result['instance']['created'] = self.instance.created
result['instance']['flavor'] = self._build_flavor_info()
result['instance']['updated'] = self.instance.updated
if self.add_volumes:
result['instance']['volume'] = {
'size':self.instance.volume_size
}
if self.add_addresses:
ip = get_ip_address(self.instance.addresses)
if ip is not None and len(ip) > 0:
result['instance']['ip'] = ip
return result
def _build_flavor_links(self):
return create_links("flavors", self.req,
self.instance.flavor_id)
class InstancesView(object):
"""Shows a list of SimpleInstance objects."""
def __init__(self, instances, req=None):
def __init__(self, instances, req=None, add_addresses=False,
add_volumes=True):
self.instances = instances
self.req = req
self.add_addresses = add_addresses
self.add_volumes = add_volumes
def data(self):
data = []
@ -115,19 +118,6 @@ class InstancesView(object):
return {'instances': data}
def data_for_instance(self, instance):
view = InstanceView(instance, req=self.req)
view = InstanceView(instance, req=self.req,
add_volumes=self.add_volumes)
return view.data()['instance']
class InstancesDetailView(InstancesView):
def __init__(self, instances, req=None, add_addresses=False,
add_volumes=True):
super(InstancesDetailView, self).__init__(instances, req)
self.add_addresses = add_addresses
self.add_volumes = add_volumes
def data_for_instance(self, instance):
return InstanceDetailView(instance, req=self.req,
add_addresses=self.add_addresses,
add_volumes=self.add_volumes).data()['instance']