diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-01-16 18:42:00 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-01-16 18:42:00 +0000 |
| commit | a5e73ffe190f6b42cee592d2d7eceae368c7be1d (patch) | |
| tree | f2e27ab7ff16fb103dbfcf1b407b198bf5229ad5 | |
| parent | c50546df8cbf159af13335813d9cb06098645b2c (diff) | |
| parent | 6e7e3870a4ca047185ba5e3320d63afaa08357b8 (diff) | |
| download | nova-a5e73ffe190f6b42cee592d2d7eceae368c7be1d.tar.gz nova-a5e73ffe190f6b42cee592d2d7eceae368c7be1d.tar.xz nova-a5e73ffe190f6b42cee592d2d7eceae368c7be1d.zip | |
Merge "Increase robustness of image filtering by server"
| -rw-r--r-- | nova/api/openstack/compute/images.py | 11 | ||||
| -rw-r--r-- | nova/api/openstack/compute/servers.py | 5 | ||||
| -rw-r--r-- | nova/tests/api/openstack/compute/test_images.py | 19 | ||||
| -rw-r--r-- | nova/tests/api/openstack/compute/test_server_actions.py | 5 | ||||
| -rw-r--r-- | nova/tests/api/openstack/fakes.py | 10 |
5 files changed, 31 insertions, 19 deletions
diff --git a/nova/api/openstack/compute/images.py b/nova/api/openstack/compute/images.py index 194c5071e..fed326f66 100644 --- a/nova/api/openstack/compute/images.py +++ b/nova/api/openstack/compute/images.py @@ -24,6 +24,7 @@ from nova import exception from nova import flags import nova.image from nova import log +import nova.utils LOG = log.getLogger('nova.api.openstack.compute.images') @@ -33,7 +34,7 @@ SUPPORTED_FILTERS = { 'name': 'name', 'status': 'status', 'changes-since': 'changes-since', - 'server': 'property-instance_ref', + 'server': 'property-instance_uuid', 'type': 'property-image_type', 'minRam': 'min_ram', 'minDisk': 'min_disk', @@ -118,6 +119,14 @@ class Controller(wsgi.Controller): # map filter name or carry through if property-* filter_name = SUPPORTED_FILTERS.get(param, param) filters[filter_name] = req.params.get(param) + + # ensure server filter is the instance uuid + filter_name = 'property-instance_uuid' + try: + filters[filter_name] = filters[filter_name].rsplit('/', 1)[1] + except (AttributeError, IndexError, KeyError): + pass + return filters @wsgi.serializers(xml=ImageTemplate) diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py index e90e30b7d..3a0cc3683 100644 --- a/nova/api/openstack/compute/servers.py +++ b/nova/api/openstack/compute/servers.py @@ -1069,10 +1069,7 @@ class Controller(wsgi.Controller): msg = _("Malformed createImage entity") raise exc.HTTPBadRequest(explanation=msg) - # preserve link to server in image properties - server_ref = os.path.join(req.application_url, 'servers', id) - props = {'instance_ref': server_ref} - + props = {} metadata = entity.get('metadata', {}) common.check_img_metadata_quota_limit(context, metadata) try: diff --git a/nova/tests/api/openstack/compute/test_images.py b/nova/tests/api/openstack/compute/test_images.py index 7bb1d44d9..d8884e934 100644 --- a/nova/tests/api/openstack/compute/test_images.py +++ b/nova/tests/api/openstack/compute/test_images.py @@ -823,7 +823,7 @@ class ImagesControllerTest(test.TestCase): image_service = self.mox.CreateMockAnything() uuid = 'fa95aaf5-ab3b-4cd8-88c0-2be7dd051aaf' ref = 'http://localhost:8774/servers/' + uuid - filters = {'property-instance_ref': ref} + filters = {'property-instance_uuid': uuid} request = fakes.HTTPRequest.blank('/v2/images?server=' + ref) context = request.environ['nova.context'] image_service.index(context, filters=filters).AndReturn([]) @@ -914,12 +914,25 @@ class ImagesControllerTest(test.TestCase): controller.detail(request) self.mox.VerifyAll() - def test_image_detail_filter_server(self): + def test_image_detail_filter_server_href(self): image_service = self.mox.CreateMockAnything() uuid = 'fa95aaf5-ab3b-4cd8-88c0-2be7dd051aaf' ref = 'http://localhost:8774/servers/' + uuid url = '/v2/fake/images/detail?server=' + ref - filters = {'property-instance_ref': ref} + filters = {'property-instance_uuid': uuid} + request = fakes.HTTPRequest.blank(url) + context = request.environ['nova.context'] + image_service.index(context, filters=filters).AndReturn([]) + self.mox.ReplayAll() + controller = images.Controller(image_service=image_service) + controller.index(request) + self.mox.VerifyAll() + + def test_image_detail_filter_server_uuid(self): + image_service = self.mox.CreateMockAnything() + uuid = 'fa95aaf5-ab3b-4cd8-88c0-2be7dd051aaf' + url = '/v2/fake/images/detail?server=' + uuid + filters = {'property-instance_uuid': uuid} request = fakes.HTTPRequest.blank(url) context = request.environ['nova.context'] image_service.index(context, filters=filters).AndReturn([]) diff --git a/nova/tests/api/openstack/compute/test_server_actions.py b/nova/tests/api/openstack/compute/test_server_actions.py index e92816172..ca3094705 100644 --- a/nova/tests/api/openstack/compute/test_server_actions.py +++ b/nova/tests/api/openstack/compute/test_server_actions.py @@ -157,7 +157,7 @@ class ServerActionsControllerTest(test.TestCase): fakes.stub_out_glance(self.stubs) fakes.stub_out_nw_api(self.stubs) fakes.stub_out_rate_limiting(self.stubs) - self.snapshot = fakes.stub_out_compute_api_snapshot(self.stubs) + fakes.stub_out_compute_api_snapshot(self.stubs) service_class = 'nova.image.glance.GlanceImageService' self.service = utils.import_object(service_class) self.context = context.RequestContext(1, None) @@ -579,9 +579,6 @@ class ServerActionsControllerTest(test.TestCase): location = response.headers['Location'] self.assertEqual('http://localhost/v2/fake/images/123', location) - server_location = self.snapshot.extra_props_last_call['instance_ref'] - expected_server_location = 'http://localhost/v2/servers/' + self.uuid - self.assertEqual(expected_server_location, server_location) def test_create_image_snapshots_disabled(self): """Don't permit a snapshot if the allow_instance_snapshots flag is diff --git a/nova/tests/api/openstack/fakes.py b/nova/tests/api/openstack/fakes.py index 728b180a8..d96d8289b 100644 --- a/nova/tests/api/openstack/fakes.py +++ b/nova/tests/api/openstack/fakes.py @@ -162,18 +162,14 @@ def stub_out_networking(stubs): stubs.Set(nova.flags, '_get_my_ip', get_my_ip) -class stub_out_compute_api_snapshot(object): - - def __init__(self, stubs): - self.stubs = stubs - self.extra_props_last_call = None - stubs.Set(nova.compute.API, 'snapshot', self.snapshot) +def stub_out_compute_api_snapshot(stubs): def snapshot(self, context, instance, name, extra_properties=None): - self.extra_props_last_call = extra_properties return dict(id='123', status='ACTIVE', name=name, properties=extra_properties) + stubs.Set(nova.compute.API, 'snapshot', snapshot) + class stub_out_compute_api_backup(object): |
