def test_get_ec2_ids(self): expected = { 'instance-id': 'ec2-inst-id', 'ami-id': 'ec2-ami-id', 'kernel-id': 'ami-kernel-ec2-kernelid', 'ramdisk-id': 'ami-ramdisk-ec2-ramdiskid', } inst = { 'uuid': 'fake-uuid', 'kernel_id': 'ec2-kernelid', 'ramdisk_id': 'ec2-ramdiskid', 'image_ref': 'fake-image', } self.mox.StubOutWithMock(ec2utils, 'id_to_ec2_inst_id') self.mox.StubOutWithMock(ec2utils, 'glance_id_to_ec2_id') self.mox.StubOutWithMock(ec2utils, 'image_type') ec2utils.id_to_ec2_inst_id(inst['uuid']).AndReturn( expected['instance-id']) ec2utils.glance_id_to_ec2_id(self.context, inst['image_ref']).AndReturn( expected['ami-id']) for image_type in ['kernel', 'ramdisk']: image_id = inst['%s_id' % image_type] ec2utils.image_type(image_type).AndReturn('ami-' + image_type) ec2utils.glance_id_to_ec2_id(self.context, image_id, 'ami-' + image_type).AndReturn( 'ami-%s-ec2-%sid' % (image_type, image_type)) self.mox.ReplayAll() result = self.conductor.get_ec2_ids(self.context, inst) self.assertEqual(result, expected)
def test_get_ec2_ids(self): expected = { 'instance-id': 'ec2-inst-id', 'ami-id': 'ec2-ami-id', 'kernel-id': 'ami-kernel-ec2-kernelid', 'ramdisk-id': 'ami-ramdisk-ec2-ramdiskid', } inst = { 'uuid': 'fake-uuid', 'kernel_id': 'ec2-kernelid', 'ramdisk_id': 'ec2-ramdiskid', 'image_ref': 'fake-image', } self.mox.StubOutWithMock(ec2utils, 'id_to_ec2_inst_id') self.mox.StubOutWithMock(ec2utils, 'glance_id_to_ec2_id') self.mox.StubOutWithMock(ec2utils, 'image_type') ec2utils.id_to_ec2_inst_id(inst['uuid']).AndReturn( expected['instance-id']) ec2utils.glance_id_to_ec2_id( self.context, inst['image_ref']).AndReturn(expected['ami-id']) for image_type in ['kernel', 'ramdisk']: image_id = inst['%s_id' % image_type] ec2utils.image_type(image_type).AndReturn('ami-' + image_type) ec2utils.glance_id_to_ec2_id( self.context, image_id, 'ami-' + image_type).AndReturn( 'ami-%s-ec2-%sid' % (image_type, image_type)) self.mox.ReplayAll() result = self.conductor.get_ec2_ids(self.context, inst) self.assertEqual(result, expected)
def test_get_ec2_ids(self): expected = { "instance-id": "ec2-inst-id", "ami-id": "ec2-ami-id", "kernel-id": "ami-kernel-ec2-kernelid", "ramdisk-id": "ami-ramdisk-ec2-ramdiskid", } inst = { "uuid": "fake-uuid", "kernel_id": "ec2-kernelid", "ramdisk_id": "ec2-ramdiskid", "image_ref": "fake-image", } self.mox.StubOutWithMock(ec2utils, "id_to_ec2_inst_id") self.mox.StubOutWithMock(ec2utils, "glance_id_to_ec2_id") self.mox.StubOutWithMock(ec2utils, "image_type") ec2utils.id_to_ec2_inst_id(inst["uuid"]).AndReturn(expected["instance-id"]) ec2utils.glance_id_to_ec2_id(self.context, inst["image_ref"]).AndReturn(expected["ami-id"]) for image_type in ["kernel", "ramdisk"]: image_id = inst["%s_id" % image_type] ec2utils.image_type(image_type).AndReturn("ami-" + image_type) ec2utils.glance_id_to_ec2_id(self.context, image_id, "ami-" + image_type).AndReturn( "ami-%s-ec2-%sid" % (image_type, image_type) ) self.mox.ReplayAll() result = self.conductor.get_ec2_ids(self.context, inst) self.assertEqual(result, expected)
def __init__(self, instance, address=None): self.instance = instance ctxt = context.get_admin_context() services = db.service_get_all_by_host(ctxt.elevated(), instance["host"]) self.availability_zone = ec2utils.get_availability_zone_by_host(services, instance["host"]) self.ip_info = ec2utils.get_ip_info_for_instance(ctxt, instance) self.security_groups = db.security_group_get_by_instance(ctxt, instance["id"]) self.mappings = _format_instance_mapping(ctxt, instance) if instance.get("user_data", None) is not None: self.userdata_b64 = base64.b64decode(instance["user_data"]) else: self.userdata_b64 = None self.ec2_ids = {} self.ec2_ids["instance-id"] = ec2utils.id_to_ec2_inst_id(instance["id"]) self.ec2_ids["ami-id"] = ec2utils.glance_id_to_ec2_id(ctxt, instance["image_ref"]) for image_type in ["kernel", "ramdisk"]: if self.instance.get("%s_id" % image_type): image_id = self.instance["%s_id" % image_type] ec2_image_type = ec2utils.image_type(image_type) ec2_id = ec2utils.glance_id_to_ec2_id(ctxt, image_id, ec2_image_type) self.ec2_ids["%s-id" % image_type] = ec2_id self.address = address
def __call__(self, req): context = req.environ['nova.context'] api_request = req.environ['ec2.request'] result = None try: result = api_request.invoke(context) except exception.InstanceNotFound as ex: ec2_id = ec2utils.id_to_ec2_inst_id(ex.kwargs['instance_id']) message = ex.msg_fmt % {'instance_id': ec2_id} return ec2_error_ex(ex, req, message=message) except exception.VolumeNotFound as ex: ec2_id = ec2utils.id_to_ec2_vol_id(ex.kwargs['volume_id']) message = ex.msg_fmt % {'volume_id': ec2_id} return ec2_error_ex(ex, req, message=message) except exception.SnapshotNotFound as ex: ec2_id = ec2utils.id_to_ec2_snap_id(ex.kwargs['snapshot_id']) message = ex.msg_fmt % {'snapshot_id': ec2_id} return ec2_error_ex(ex, req, message=message) except ( exception.CannotDisassociateAutoAssignedFloatingIP, exception.FloatingIpAssociated, exception.FloatingIpNotFound, exception.ImageNotActive, exception.InvalidInstanceIDMalformed, exception.InvalidKeypair, exception.InvalidParameterValue, exception.InvalidPortRange, exception.InvalidVolume, exception.KeyPairExists, exception.KeypairNotFound, exception.MissingParameter, exception.NoFloatingIpInterface, exception.NoMoreFixedIps, exception.NotAuthorized, exception.QuotaError, exception.QuotaError, exception.SecurityGroupExists, exception.SecurityGroupLimitExceeded, exception.SecurityGroupLimitExceeded, exception.SecurityGroupRuleExists, exception.VolumeUnattached, # Following aren't translated to valid EC2 errors. exception.ImageNotFound, exception.ImageNotFoundEC2, exception.InvalidAttribute, exception.InvalidRequest, exception.NotFound) as ex: return ec2_error_ex(ex, req) except Exception as ex: return ec2_error_ex(ex, req, unexpected=True) else: resp = webob.Response() resp.status = 200 resp.headers['Content-Type'] = 'text/xml' resp.body = str(result) return resp
def __call__(self, req): context = req.environ["nova.context"] api_request = req.environ["ec2.request"] try: result = api_request.invoke(context) except exception.InstanceNotFound as ex: ec2_id = ec2utils.id_to_ec2_inst_id(ex.kwargs["instance_id"]) message = ex.msg_fmt % {"instance_id": ec2_id} return ec2_error_ex(ex, req, message=message) except exception.VolumeNotFound as ex: ec2_id = ec2utils.id_to_ec2_vol_id(ex.kwargs["volume_id"]) message = ex.msg_fmt % {"volume_id": ec2_id} return ec2_error_ex(ex, req, message=message) except exception.SnapshotNotFound as ex: ec2_id = ec2utils.id_to_ec2_snap_id(ex.kwargs["snapshot_id"]) message = ex.msg_fmt % {"snapshot_id": ec2_id} return ec2_error_ex(ex, req, message=message) except ( exception.CannotDisassociateAutoAssignedFloatingIP, exception.FloatingIpAssociated, exception.FloatingIpNotFound, exception.FloatingIpBadRequest, exception.ImageNotActive, exception.InvalidInstanceIDMalformed, exception.InvalidVolumeIDMalformed, exception.InvalidKeypair, exception.InvalidParameterValue, exception.InvalidPortRange, exception.InvalidVolume, exception.KeyPairExists, exception.KeypairNotFound, exception.MissingParameter, exception.NoFloatingIpInterface, exception.NoMoreFixedIps, exception.Forbidden, exception.QuotaError, exception.SecurityGroupExists, exception.SecurityGroupLimitExceeded, exception.SecurityGroupRuleExists, exception.VolumeUnattached, # Following aren't translated to valid EC2 errors. exception.ImageNotFound, exception.ImageNotFoundEC2, exception.InvalidAttribute, exception.InvalidRequest, exception.NotFound, ) as ex: return ec2_error_ex(ex, req) except Exception as ex: return ec2_error_ex(ex, req, unexpected=True) else: resp = webob.Response() resp.status = 200 resp.headers["Content-Type"] = "text/xml" resp.body = str(result) return resp
def get_ec2_ids(self, context, instance): ec2_ids = {} ec2_ids["instance-id"] = ec2utils.id_to_ec2_inst_id(instance["uuid"]) ec2_ids["ami-id"] = ec2utils.glance_id_to_ec2_id(context, instance["image_ref"]) for image_type in ["kernel", "ramdisk"]: image_id = instance.get("%s_id" % image_type) if image_id is not None: ec2_image_type = ec2utils.image_type(image_type) ec2_id = ec2utils.glance_id_to_ec2_id(context, image_id, ec2_image_type) ec2_ids["%s-id" % image_type] = ec2_id return ec2_ids
def get_ec2_ids(self, context, instance): ec2_ids = {} ec2_ids['instance-id'] = ec2utils.id_to_ec2_inst_id(instance['uuid']) ec2_ids['ami-id'] = ec2utils.glance_id_to_ec2_id( context, instance['image_ref']) for image_type in ['kernel', 'ramdisk']: image_id = instance.get('%s_id' % image_type) if image_id is not None: ec2_image_type = ec2utils.image_type(image_type) ec2_id = ec2utils.glance_id_to_ec2_id(context, image_id, ec2_image_type) ec2_ids['%s-id' % image_type] = ec2_id return ec2_ids
def get_ec2_ids(self, context, instance): ec2_ids = {} ec2_ids['instance-id'] = ec2utils.id_to_ec2_inst_id(instance['uuid']) ec2_ids['ami-id'] = ec2utils.glance_id_to_ec2_id(context, instance['image_ref']) for image_type in ['kernel', 'ramdisk']: if '%s_id' % image_type in instance: image_id = instance['%s_id' % image_type] ec2_image_type = ec2utils.image_type(image_type) ec2_id = ec2utils.glance_id_to_ec2_id(context, image_id, ec2_image_type) ec2_ids['%s-id' % image_type] = ec2_id return ec2_ids
def _get_ec2_ids(context, instance): ec2_ids = {} ec2_ids['instance_id'] = ec2utils.id_to_ec2_inst_id(instance.uuid) ec2_ids['ami_id'] = ec2utils.glance_id_to_ec2_id(context, instance.image_ref) for image_type in ['kernel', 'ramdisk']: image_id = getattr(instance, '%s_id' % image_type) ec2_id = None if image_id is not None: ec2_image_type = ec2utils.image_type(image_type) ec2_id = ec2utils.glance_id_to_ec2_id(context, image_id, ec2_image_type) ec2_ids['%s_id' % image_type] = ec2_id return ec2_ids
def __call__(self, req): context = req.environ['nova.context'] api_request = req.environ['ec2.request'] result = None try: result = api_request.invoke(context) except exception.InstanceNotFound as ex: ec2_id = ec2utils.id_to_ec2_inst_id(ex.kwargs['instance_id']) message = ex.msg_fmt % {'instance_id': ec2_id} return ec2_error_ex(ex, req, message=message) except exception.VolumeNotFound as ex: ec2_id = ec2utils.id_to_ec2_vol_id(ex.kwargs['volume_id']) message = ex.msg_fmt % {'volume_id': ec2_id} return ec2_error_ex(ex, req, message=message) except exception.SnapshotNotFound as ex: ec2_id = ec2utils.id_to_ec2_snap_id(ex.kwargs['snapshot_id']) message = ex.msg_fmt % {'snapshot_id': ec2_id} return ec2_error_ex(ex, req, message=message) except exception.KeyPairExists as ex: code = 'InvalidKeyPair.Duplicate' return ec2_error_ex(ex, req, code=code) except exception.InvalidKeypair as ex: code = 'InvalidKeyPair.Format' return ec2_error_ex(ex, req, code=code) except (exception.EC2APIError, exception.NotFound, exception.KeypairNotFound, exception.SecurityGroupExists, exception.InvalidParameterValue, exception.InvalidPortRange, exception.NotAuthorized, exception.InvalidRequest, exception.InvalidAttribute, exception.InvalidPortRange, exception.QuotaError, exception.MissingParameter, exception.InvalidInstanceIDMalformedEC2) as ex: return ec2_error_ex(ex, req) except Exception as ex: return ec2_error_ex(ex, req, unexpected=True) else: resp = webob.Response() resp.status = 200 resp.headers['Content-Type'] = 'text/xml' resp.body = str(result) return resp
def __call__(self, req): context = req.environ["nova.context"] api_request = req.environ["ec2.request"] result = None try: result = api_request.invoke(context) except exception.InstanceNotFound as ex: ec2_id = ec2utils.id_to_ec2_inst_id(ex.kwargs["instance_id"]) message = ex.msg_fmt % {"instance_id": ec2_id} return ec2_error_ex(ex, req, message=message) except exception.VolumeNotFound as ex: ec2_id = ec2utils.id_to_ec2_vol_id(ex.kwargs["volume_id"]) message = ex.msg_fmt % {"volume_id": ec2_id} return ec2_error_ex(ex, req, message=message) except exception.SnapshotNotFound as ex: ec2_id = ec2utils.id_to_ec2_snap_id(ex.kwargs["snapshot_id"]) message = ex.msg_fmt % {"snapshot_id": ec2_id} return ec2_error_ex(ex, req, message=message) except exception.KeyPairExists as ex: code = "InvalidKeyPair.Duplicate" return ec2_error_ex(ex, req, code=code) except exception.InvalidKeypair as ex: code = "InvalidKeyPair.Format" return ec2_error_ex(ex, req, code=code) except ( exception.EC2APIError, exception.NotFound, exception.InvalidParameterValue, exception.InvalidPortRange, exception.NotAuthorized, exception.InvalidRequest, exception.QuotaError, exception.InvalidInstanceIDMalformed, ) as ex: return ec2_error_ex(ex, req) except Exception as ex: return ec2_error_ex(ex, req, unexpected=True) else: resp = webob.Response() resp.status = 200 resp.headers["Content-Type"] = "text/xml" resp.body = str(result) return resp
def __call__(self, req): context = req.environ['nova.context'] api_request = req.environ['ec2.request'] result = None try: result = api_request.invoke(context) except exception.InstanceNotFound as ex: ec2_id = ec2utils.id_to_ec2_inst_id(ex.kwargs['instance_id']) message = ex.msg_fmt % {'instance_id': ec2_id} return ec2_error_ex(ex, req, message=message) except exception.VolumeNotFound as ex: ec2_id = ec2utils.id_to_ec2_vol_id(ex.kwargs['volume_id']) message = ex.msg_fmt % {'volume_id': ec2_id} return ec2_error_ex(ex, req, message=message) except exception.SnapshotNotFound as ex: ec2_id = ec2utils.id_to_ec2_snap_id(ex.kwargs['snapshot_id']) message = ex.msg_fmt % {'snapshot_id': ec2_id} return ec2_error_ex(ex, req, message=message) except exception.KeyPairExists as ex: code = 'InvalidKeyPair.Duplicate' return ec2_error_ex(ex, req, code=code) except exception.InvalidKeypair as ex: code = 'InvalidKeyPair.Format' return ec2_error_ex(ex, req, code=code) except (exception.EC2APIError, exception.NotFound, exception.InvalidParameterValue, exception.InvalidPortRange, exception.NotAuthorized, exception.InvalidRequest, exception.QuotaError, exception.InvalidInstanceIDMalformed) as ex: return ec2_error_ex(ex, req) except Exception as ex: return ec2_error_ex(ex, req, unexpected=True) else: resp = webob.Response() resp.status = 200 resp.headers['Content-Type'] = 'text/xml' resp.body = str(result) return resp
def __init__(self, instance, address=None): self.instance = instance ctxt = context.get_admin_context() services = db.service_get_all_by_host(ctxt.elevated(), instance['host']) self.availability_zone = ec2utils.get_availability_zone_by_host( services, instance['host']) self.ip_info = ec2utils.get_ip_info_for_instance(ctxt, instance) self.security_groups = db.security_group_get_by_instance( ctxt, instance['id']) self.mappings = _format_instance_mapping(ctxt, instance) if instance.get('user_data', None) is not None: self.userdata_b64 = base64.b64decode(instance['user_data']) else: self.userdata_b64 = None self.ec2_ids = {} self.ec2_ids['instance-id'] = ec2utils.id_to_ec2_inst_id( instance['id']) self.ec2_ids['ami-id'] = ec2utils.glance_id_to_ec2_id( ctxt, instance['image_ref']) for image_type in ['kernel', 'ramdisk']: if self.instance.get('%s_id' % image_type): image_id = self.instance['%s_id' % image_type] ec2_image_type = ec2utils.image_type(image_type) ec2_id = ec2utils.glance_id_to_ec2_id(ctxt, image_id, ec2_image_type) self.ec2_ids['%s-id' % image_type] = ec2_id self.address = address
def __call__(self, req): context = req.environ['nova.context'] request_id = context.request_id api_request = req.environ['ec2.request'] result = None try: result = api_request.invoke(context) except exception.InstanceNotFound as ex: LOG.info(_('InstanceNotFound raised: %s'), unicode(ex), context=context) ec2_id = ec2utils.id_to_ec2_inst_id(ex.kwargs['instance_id']) message = ex.message % {'instance_id': ec2_id} return ec2_error(req, request_id, type(ex).__name__, message) except exception.VolumeNotFound as ex: LOG.info(_('VolumeNotFound raised: %s'), unicode(ex), context=context) ec2_id = ec2utils.id_to_ec2_vol_id(ex.kwargs['volume_id']) message = ex.message % {'volume_id': ec2_id} return ec2_error(req, request_id, type(ex).__name__, message) except exception.SnapshotNotFound as ex: LOG.info(_('SnapshotNotFound raised: %s'), unicode(ex), context=context) ec2_id = ec2utils.id_to_ec2_snap_id(ex.kwargs['snapshot_id']) message = ex.message % {'snapshot_id': ec2_id} return ec2_error(req, request_id, type(ex).__name__, message) except exception.NotFound as ex: LOG.info(_('NotFound raised: %s'), unicode(ex), context=context) return ec2_error(req, request_id, type(ex).__name__, unicode(ex)) except exception.EC2APIError as ex: LOG.exception(_('EC2APIError raised: %s'), unicode(ex), context=context) if ex.code: return ec2_error(req, request_id, ex.code, unicode(ex)) else: return ec2_error(req, request_id, type(ex).__name__, unicode(ex)) except exception.KeyPairExists as ex: LOG.debug(_('KeyPairExists raised: %s'), unicode(ex), context=context) return ec2_error(req, request_id, type(ex).__name__, unicode(ex)) except exception.InvalidParameterValue as ex: LOG.debug(_('InvalidParameterValue raised: %s'), unicode(ex), context=context) return ec2_error(req, request_id, type(ex).__name__, unicode(ex)) except exception.InvalidPortRange as ex: LOG.debug(_('InvalidPortRange raised: %s'), unicode(ex), context=context) return ec2_error(req, request_id, type(ex).__name__, unicode(ex)) except exception.NotAuthorized as ex: LOG.info(_('NotAuthorized raised: %s'), unicode(ex), context=context) return ec2_error(req, request_id, type(ex).__name__, unicode(ex)) except exception.InvalidRequest as ex: LOG.debug(_('InvalidRequest raised: %s'), unicode(ex), context=context) return ec2_error(req, request_id, type(ex).__name__, unicode(ex)) except exception.QuotaError as ex: LOG.debug(_('QuotaError raised: %s'), unicode(ex), context=context) return ec2_error(req, request_id, type(ex).__name__, unicode(ex)) except exception.InvalidInstanceIDMalformed as ex: LOG.debug(_('Invalid id: bogus (expecting "i-..."): %s'), unicode(ex), context=context) return ec2_error(req, request_id, type(ex).__name__, unicode(ex)) except Exception as ex: env = req.environ.copy() for k in env.keys(): if not isinstance(env[k], basestring): env.pop(k) LOG.exception(_('Unexpected error raised: %s'), unicode(ex)) LOG.error(_('Environment: %s') % jsonutils.dumps(env)) return ec2_error(req, request_id, 'UnknownError', _('An unknown error has occurred. ' 'Please try your request again.')) else: resp = webob.Response() resp.status = 200 resp.headers['Content-Type'] = 'text/xml' resp.body = str(result) return resp
def __init__(self, instance, address=None, content=[], extra_md=None): """Creation of this object should basically cover all time consuming collection. Methods after that should not cause time delays due to network operations or lengthy cpu operations. The user should then get a single instance and make multiple method calls on it. """ self.instance = instance self.extra_md = extra_md ctxt = context.get_admin_context() services = db.service_get_all_by_host(ctxt.elevated(), instance['host']) self.availability_zone = ec2utils.get_availability_zone_by_host( services, instance['host']) self.ip_info = ec2utils.get_ip_info_for_instance(ctxt, instance) self.security_groups = db.security_group_get_by_instance(ctxt, instance['id']) self.mappings = _format_instance_mapping(ctxt, instance) if instance.get('user_data', None) is not None: self.userdata_raw = base64.b64decode(instance['user_data']) else: self.userdata_raw = None self.ec2_ids = {} self.ec2_ids['instance-id'] = ec2utils.id_to_ec2_inst_id( instance['id']) self.ec2_ids['ami-id'] = ec2utils.glance_id_to_ec2_id(ctxt, instance['image_ref']) for image_type in ['kernel', 'ramdisk']: if self.instance.get('%s_id' % image_type): image_id = self.instance['%s_id' % image_type] ec2_image_type = ec2utils.image_type(image_type) ec2_id = ec2utils.glance_id_to_ec2_id(ctxt, image_id, ec2_image_type) self.ec2_ids['%s-id' % image_type] = ec2_id self.address = address # expose instance metadata. self.launch_metadata = {} for item in instance.get('metadata', []): self.launch_metadata[item['key']] = item['value'] self.uuid = instance.get('uuid') self.content = {} self.files = [] # get network info, and the rendered network template ctxt = context.get_admin_context() network_info = network.API().get_instance_nw_info(ctxt, instance) self.network_config = None cfg = netutils.get_injected_network_template(network_info) if cfg: key = "%04i" % len(self.content) self.content[key] = cfg self.network_config = {"name": "network_config", 'content_path': "/%s/%s" % (CONTENT_DIR, key)} # 'content' is passed in from the configdrive code in # nova/virt/libvirt/driver.py. Thats how we get the injected files # (personalities) in. AFAIK they're not stored in the db at all, # so are not available later (web service metadata time). for (path, contents) in content: key = "%04i" % len(self.content) self.files.append({'path': path, 'content_path': "/%s/%s" % (CONTENT_DIR, key)}) self.content[key] = contents
def __call__(self, req): context = req.environ["nova.context"] request_id = context.request_id api_request = req.environ["ec2.request"] result = None try: result = api_request.invoke(context) except exception.InstanceNotFound as ex: LOG.info(_("InstanceNotFound raised: %s"), unicode(ex), context=context) ec2_id = ec2utils.id_to_ec2_inst_id(ex.kwargs["instance_id"]) message = ex.message % {"instance_id": ec2_id} return ec2_error(req, request_id, type(ex).__name__, message) except exception.VolumeNotFound as ex: LOG.info(_("VolumeNotFound raised: %s"), unicode(ex), context=context) ec2_id = ec2utils.id_to_ec2_vol_id(ex.kwargs["volume_id"]) message = ex.message % {"volume_id": ec2_id} return ec2_error(req, request_id, type(ex).__name__, message) except exception.SnapshotNotFound as ex: LOG.info(_("SnapshotNotFound raised: %s"), unicode(ex), context=context) ec2_id = ec2utils.id_to_ec2_snap_id(ex.kwargs["snapshot_id"]) message = ex.message % {"snapshot_id": ec2_id} return ec2_error(req, request_id, type(ex).__name__, message) except exception.NotFound as ex: LOG.info(_("NotFound raised: %s"), unicode(ex), context=context) return ec2_error(req, request_id, type(ex).__name__, unicode(ex)) except exception.EC2APIError as ex: if ex.code: return ec2_error(req, request_id, ex.code, unicode(ex)) else: return ec2_error(req, request_id, type(ex).__name__, unicode(ex)) except exception.KeyPairExists as ex: LOG.debug(_("KeyPairExists raised: %s"), unicode(ex), context=context) code = "InvalidKeyPair.Duplicate" return ec2_error(req, request_id, code, unicode(ex)) except exception.InvalidKeypair as ex: LOG.debug(_("InvalidKeypair raised: %s"), unicode(ex), context) code = "InvalidKeyPair.Format" return ec2_error(req, request_id, code, unicode(ex)) except exception.InvalidParameterValue as ex: LOG.debug(_("InvalidParameterValue raised: %s"), unicode(ex), context=context) return ec2_error(req, request_id, type(ex).__name__, unicode(ex)) except exception.InvalidPortRange as ex: LOG.debug(_("InvalidPortRange raised: %s"), unicode(ex), context=context) return ec2_error(req, request_id, type(ex).__name__, unicode(ex)) except exception.NotAuthorized as ex: LOG.info(_("NotAuthorized raised: %s"), unicode(ex), context=context) return ec2_error(req, request_id, type(ex).__name__, unicode(ex)) except exception.InvalidRequest as ex: LOG.debug(_("InvalidRequest raised: %s"), unicode(ex), context=context) return ec2_error(req, request_id, type(ex).__name__, unicode(ex)) except exception.QuotaError as ex: LOG.debug(_("QuotaError raised: %s"), unicode(ex), context=context) return ec2_error(req, request_id, type(ex).__name__, unicode(ex)) except exception.InvalidInstanceIDMalformed as ex: LOG.debug(_('Invalid id: bogus (expecting "i-..."): %s'), unicode(ex), context=context) return ec2_error(req, request_id, type(ex).__name__, unicode(ex)) except Exception as ex: env = req.environ.copy() for k in env.keys(): if not isinstance(env[k], basestring): env.pop(k) LOG.exception(_("Unexpected error raised: %s"), unicode(ex)) LOG.error(_("Environment: %s") % jsonutils.dumps(env)) return ec2_error( req, request_id, "UnknownError", _("An unknown error has occurred. " "Please try your request again.") ) else: resp = webob.Response() resp.status = 200 resp.headers["Content-Type"] = "text/xml" resp.body = str(result) return resp