summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/api/ec2/__init__.py15
-rw-r--r--nova/api/ec2/cloud.py16
-rw-r--r--nova/compute/api.py2
-rw-r--r--nova/db/api.py5
-rw-r--r--nova/db/sqlalchemy/api.py38
-rw-r--r--nova/exception.py13
-rw-r--r--nova/tests/api/openstack/test_servers.py2
-rw-r--r--nova/virt/xenapi/vmops.py2
8 files changed, 41 insertions, 52 deletions
diff --git a/nova/api/ec2/__init__.py b/nova/api/ec2/__init__.py
index be9751256..e25943a13 100644
--- a/nova/api/ec2/__init__.py
+++ b/nova/api/ec2/__init__.py
@@ -33,6 +33,7 @@ from nova import log as logging
from nova import utils
from nova import wsgi
from nova.api.ec2 import apirequest
+from nova.api.ec2 import cloud
from nova.auth import manager
@@ -314,8 +315,20 @@ class Executor(wsgi.Application):
result = None
try:
result = api_request.invoke(context)
+ except exception.InstanceNotFound as ex:
+ LOG.info(_('InstanceNotFound raised: %s'), ex.args[0],
+ context=context)
+ ec2_id = cloud.id_to_ec2_id(ex.instance_id)
+ message = _('Instance %s not found') % ec2_id
+ return self._error(req, context, type(ex).__name__, message)
+ except exception.VolumeNotFound as ex:
+ LOG.info(_('VolumeNotFound raised: %s'), ex.args[0],
+ context=context)
+ ec2_id = cloud.id_to_ec2_id(ex.volume_id, 'vol-%08x')
+ message = _('Volume %s not found') % ec2_id
+ return self._error(req, context, type(ex).__name__, message)
except exception.NotFound as ex:
- LOG.info(_('NotFound raised: %s'), ex.args[0], context=context)
+ LOG.info(_('NotFound raised: %s'), ex.args[0], context=context)
return self._error(req, context, type(ex).__name__, ex.args[0])
except exception.ApiError as ex:
LOG.exception(_('ApiError raised: %s'), ex.args[0],
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index 22b8c19cb..9683e2ebd 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -532,12 +532,8 @@ class CloudController(object):
volumes = []
for ec2_id in volume_id:
internal_id = ec2_id_to_id(ec2_id)
- try:
- volume = self.volume_api.get(context, internal_id)
- volumes.append(volume)
- except exception.NotFound:
- raise exception.NotFound(_("Volume %s not found")
- % ec2_id)
+ volume = self.volume_api.get(context, internal_id)
+ volumes.append(volume)
else:
volumes = self.volume_api.get_all(context)
volumes = [self._format_volume(context, v) for v in volumes]
@@ -668,12 +664,8 @@ class CloudController(object):
instances = []
for ec2_id in instance_id:
internal_id = ec2_id_to_id(ec2_id)
- try:
- instance = self.compute_api.get(context, internal_id)
- instances.append(instance)
- except exception.NotFound:
- raise exception.NotFound(_("Instance %s not found")
- % ec2_id)
+ instance = self.compute_api.get(context, internal_id)
+ instances.append(instance)
else:
instances = self.compute_api.get_all(context, **kwargs)
for instance in instances:
diff --git a/nova/compute/api.py b/nova/compute/api.py
index 1d8b9d79f..ac02dbcfa 100644
--- a/nova/compute/api.py
+++ b/nova/compute/api.py
@@ -318,7 +318,7 @@ class API(base.Base):
def get(self, context, instance_id):
"""Get a single instance with the given ID."""
- rv = self.db.instance_get_by_id(context, instance_id)
+ rv = self.db.instance_get(context, instance_id)
return dict(rv.iteritems())
def get_all(self, context, project_id=None, reservation_id=None,
diff --git a/nova/db/api.py b/nova/db/api.py
index c6c03fb0e..789cb8ebb 100644
--- a/nova/db/api.py
+++ b/nova/db/api.py
@@ -379,11 +379,6 @@ def instance_get_project_vpn(context, project_id):
return IMPL.instance_get_project_vpn(context, project_id)
-def instance_get_by_id(context, instance_id):
- """Get an instance by id."""
- return IMPL.instance_get_by_id(context, instance_id)
-
-
def instance_is_vpn(context, instance_id):
"""True if instance is a vpn."""
return IMPL.instance_is_vpn(context, instance_id)
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index fa060228f..895e7eabe 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -685,6 +685,7 @@ def instance_get(context, instance_id, session=None):
options(joinedload_all('fixed_ip.floating_ips')).\
options(joinedload_all('security_groups.rules')).\
options(joinedload('volumes')).\
+ options(joinedload_all('fixed_ip.network')).\
filter_by(id=instance_id).\
filter_by(deleted=can_read_deleted(context)).\
first()
@@ -698,7 +699,9 @@ def instance_get(context, instance_id, session=None):
filter_by(deleted=False).\
first()
if not result:
- raise exception.NotFound(_('No instance for id %s') % instance_id)
+ raise exception.InstanceNotFound(_('Instance %s not found')
+ % instance_id,
+ instance_id)
return result
@@ -782,33 +785,6 @@ def instance_get_project_vpn(context, project_id):
@require_context
-def instance_get_by_id(context, instance_id):
- session = get_session()
-
- if is_admin_context(context):
- result = session.query(models.Instance).\
- options(joinedload_all('fixed_ip.floating_ips')).\
- options(joinedload('security_groups')).\
- options(joinedload_all('fixed_ip.network')).\
- filter_by(id=instance_id).\
- filter_by(deleted=can_read_deleted(context)).\
- first()
- elif is_user_context(context):
- result = session.query(models.Instance).\
- options(joinedload('security_groups')).\
- options(joinedload_all('fixed_ip.floating_ips')).\
- options(joinedload_all('fixed_ip.network')).\
- filter_by(project_id=context.project_id).\
- filter_by(id=instance_id).\
- filter_by(deleted=False).\
- first()
- if not result:
- raise exception.NotFound(_('Instance %s not found') % (instance_id))
-
- return result
-
-
-@require_context
def instance_get_fixed_address(context, instance_id):
session = get_session()
with session.begin():
@@ -1419,7 +1395,8 @@ def volume_get(context, volume_id, session=None):
filter_by(deleted=False).\
first()
if not result:
- raise exception.NotFound(_('No volume for id %s') % volume_id)
+ raise exception.VolumeNotFound(_('Volume %s not found') % volume_id,
+ volume_id)
return result
@@ -1464,7 +1441,8 @@ def volume_get_instance(context, volume_id):
options(joinedload('instance')).\
first()
if not result:
- raise exception.NotFound(_('Volume %s not found') % ec2_id)
+ raise exception.VolumeNotFound(_('Volume %s not found') % volume_id,
+ volume_id)
return result.instance
diff --git a/nova/exception.py b/nova/exception.py
index f604fd63a..7d65bd6a5 100644
--- a/nova/exception.py
+++ b/nova/exception.py
@@ -46,7 +46,6 @@ class Error(Exception):
class ApiError(Error):
-
def __init__(self, message='Unknown', code='Unknown'):
self.message = message
self.code = code
@@ -57,6 +56,18 @@ class NotFound(Error):
pass
+class InstanceNotFound(NotFound):
+ def __init__(self, message, instance_id):
+ self.instance_id = instance_id
+ super(InstanceNotFound, self).__init__(message)
+
+
+class VolumeNotFound(NotFound):
+ def __init__(self, message, volume_id):
+ self.volume_id = volume_id
+ super(VolumeNotFound, self).__init__(message)
+
+
class Duplicate(Error):
pass
diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py
index 29883e7c8..724f14f19 100644
--- a/nova/tests/api/openstack/test_servers.py
+++ b/nova/tests/api/openstack/test_servers.py
@@ -76,7 +76,7 @@ class ServersTest(unittest.TestCase):
fakes.stub_out_key_pair_funcs(self.stubs)
fakes.stub_out_image_service(self.stubs)
self.stubs.Set(nova.db.api, 'instance_get_all', return_servers)
- self.stubs.Set(nova.db.api, 'instance_get_by_id', return_server)
+ self.stubs.Set(nova.db.api, 'instance_get', return_server)
self.stubs.Set(nova.db.api, 'instance_get_all_by_user',
return_servers)
self.stubs.Set(nova.db.api, 'instance_add_security_group',
diff --git a/nova/virt/xenapi/vmops.py b/nova/virt/xenapi/vmops.py
index 628a171fa..e84ce20c4 100644
--- a/nova/virt/xenapi/vmops.py
+++ b/nova/virt/xenapi/vmops.py
@@ -149,7 +149,7 @@ class VMOps(object):
if isinstance(instance_or_vm, (int, long)):
ctx = context.get_admin_context()
try:
- instance_obj = db.instance_get_by_id(ctx, instance_or_vm)
+ instance_obj = db.instance_get(ctx, instance_or_vm)
instance_name = instance_obj.name
except exception.NotFound:
# The unit tests screw this up, as they use an integer for