summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Day <eday@oddments.org>2011-01-05 09:50:19 -0800
committerEric Day <eday@oddments.org>2011-01-05 09:50:19 -0800
commitdef5583469bd265c9107ed54d461441bc6303151 (patch)
tree36767dd00c4db73c345f76ea611b7873ab0879fe
parente97cb0f19f66ee4d28685575cea57b1eb32c4ed3 (diff)
downloadnova-def5583469bd265c9107ed54d461441bc6303151.tar.gz
nova-def5583469bd265c9107ed54d461441bc6303151.tar.xz
nova-def5583469bd265c9107ed54d461441bc6303151.zip
Split internal API get calls to get and get_all, where the former takes an ID and returns one resource, and the latter can optionally take a filter and return a list of resources.
-rw-r--r--nova/api/ec2/cloud.py9
-rw-r--r--nova/api/openstack/servers.py2
-rw-r--r--nova/compute/api.py12
-rw-r--r--nova/volume/api.py13
4 files changed, 20 insertions, 16 deletions
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index b1eaafc8b..0c0027287 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -119,7 +119,8 @@ class CloudController(object):
def _get_mpi_data(self, context, project_id):
result = {}
- for instance in self.compute_api.get(context, project_id=project_id):
+ for instance in self.compute_api.get_all(context,
+ project_id=project_id):
if instance['fixed_ip']:
line = '%s slots=%d' % (instance['fixed_ip']['address'],
instance['vcpus'])
@@ -141,7 +142,7 @@ class CloudController(object):
def get_metadata(self, address):
ctxt = context.get_admin_context()
- instance_ref = self.compute_api.get(ctxt, fixed_ip=address)
+ instance_ref = self.compute_api.get_all(ctxt, fixed_ip=address)
if instance_ref is None:
return None
mpi = self._get_mpi_data(ctxt, instance_ref['project_id'])
@@ -493,7 +494,7 @@ class CloudController(object):
"output": base64.b64encode(output)}
def describe_volumes(self, context, volume_id=None, **kwargs):
- volumes = self.volume_api.get(context)
+ volumes = self.volume_api.get_all(context)
# NOTE(vish): volume_id is an optional list of volume ids to filter by.
volumes = [self._format_volume(context, v) for v in volumes
if volume_id is None or v['id'] in volume_id]
@@ -597,7 +598,7 @@ class CloudController(object):
def _format_instances(self, context, **kwargs):
reservations = {}
- instances = self.compute_api.get(context, **kwargs)
+ instances = self.compute_api.get_all(context, **kwargs)
for instance in instances:
if not context.user.is_admin():
if instance['image_id'] == FLAGS.vpn_image_id:
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py
index 6be24629a..ce64ac7ad 100644
--- a/nova/api/openstack/servers.py
+++ b/nova/api/openstack/servers.py
@@ -96,7 +96,7 @@ class Controller(wsgi.Controller):
entity_maker - either _translate_detail_keys or _translate_keys
"""
- instance_list = self.compute_api.get(req.environ['nova.context'])
+ instance_list = self.compute_api.get_all(req.environ['nova.context'])
limited_list = common.limited(instance_list, req)
res = [entity_maker(inst)['server'] for inst in limited_list]
return dict(servers=res)
diff --git a/nova/compute/api.py b/nova/compute/api.py
index 74d030c4d..64d47b1ce 100644
--- a/nova/compute/api.py
+++ b/nova/compute/api.py
@@ -245,13 +245,15 @@ class API(base.Base):
else:
self.db.instance_destroy(context, instance_id)
- def get(self, context, instance_id=None, project_id=None,
- reservation_id=None, fixed_ip=None):
- """Get one or more instances, possibly filtered by one of the
+ def get(self, context, instance_id):
+ """Get a single instance with the given ID."""
+ return self.db.instance_get_by_id(context, instance_id)
+
+ def get_all(self, context, project_id=None, reservation_id=None,
+ fixed_ip=None):
+ """Get all instances, possibly filtered by one of the
given parameters. If there is no filter and the context is
an admin, it will retreive all instances in the system."""
- if instance_id is not None:
- return self.db.instance_get_by_id(context, instance_id)
if reservation_id is not None:
return self.db.instance_get_all_by_reservation(context,
reservation_id)
diff --git a/nova/volume/api.py b/nova/volume/api.py
index 48ecdbe68..2d7fe3762 100644
--- a/nova/volume/api.py
+++ b/nova/volume/api.py
@@ -63,7 +63,7 @@ class API(base.Base):
return volume
def delete(self, context, volume_id):
- volume = self.db.volume_get(context, volume_id)
+ volume = self.get(context, volume_id)
if volume['status'] != "available":
raise exception.ApiError(_("Volume status must be available"))
now = datetime.datetime.utcnow()
@@ -78,15 +78,16 @@ class API(base.Base):
def update(self, context, volume_id, fields):
self.db.volume_update(context, volume_id, fields)
- def get(self, context, volume_id=None):
- if volume_id is not None:
- return self.db.volume_get(context, volume_id)
+ def get(self, context, volume_id):
+ return self.db.volume_get(context, volume_id)
+
+ def get_all(self, context):
if context.user.is_admin():
return self.db.volume_get_all(context)
return self.db.volume_get_all_by_project(context, context.project_id)
def check_attach(self, context, volume_id):
- volume = self.db.volume_get(context, volume_id)
+ volume = self.get(context, volume_id)
# TODO(vish): abstract status checking?
if volume['status'] != "available":
raise exception.ApiError(_("Volume status must be available"))
@@ -94,7 +95,7 @@ class API(base.Base):
raise exception.ApiError(_("Volume is already attached"))
def check_detach(self, context, volume_id):
- volume = self.db.volume_get(context, volume_id)
+ volume = self.get(context, volume_id)
# TODO(vish): abstract status checking?
if volume['status'] == "available":
raise exception.ApiError(_("Volume is already detached"))