image: don't use is_public with glance V2 API

Glance v2 API has replaced "is_public" argument with "visibility", and,
unlike "is_public" the default value of "visibility" returns all images,
which is what we want to get when no value has been provided.

This patch makes sure that we only send a default value for "is_public"
when it's not defined when working with API v1.

Closes-bug: #1201266
Co-Authored-By: Gorka Eguileor <geguileo@redhat.com>
Change-Id: I9ca13567744dbe5895012429679e013b859dbb03
This commit is contained in:
Mehdi Abaakouk 2016-03-24 11:23:17 +01:00 committed by Gorka Eguileor
parent aa7e0f1c8a
commit 4e7624ed65
2 changed files with 28 additions and 4 deletions

View File

@ -254,10 +254,15 @@ class GlanceImageService(object):
if param in params:
_params[param] = params.get(param)
# ensure filters is a dict
_params.setdefault('filters', {})
# NOTE(vish): don't filter out private images
_params['filters'].setdefault('is_public', 'none')
# NOTE(geguileo): We set is_public default value for v1 because we want
# to retrieve all images by default. We don't need to send v2
# equivalent - "visible" - because its default value when omited is
# "public, private, shared", which will return all.
if CONF.glance_api_version <= 1:
# ensure filters is a dict
_params.setdefault('filters', {})
# NOTE(vish): don't filter out private images
_params['filters'].setdefault('is_public', 'none')
return _params

View File

@ -251,6 +251,25 @@ class TestGlanceImageService(test.TestCase):
self.assertEqual('test image', image_metas[0]['name'])
self.assertFalse(image_metas[0]['is_public'])
def test_detail_v1(self):
"""Confirm we send is_public = None as default when using Glance v1."""
self.override_config('glance_api_version', 1)
with mock.patch.object(self.service, '_client') as client_mock:
client_mock.return_value = []
result = self.service.detail(self.context)
self.assertListEqual([], result)
client_mock.call.assert_called_once_with(self.context, 'list',
filters={'is_public': 'none'})
def test_detail_v2(self):
"""Check we don't send is_public key by default with Glance v2."""
self.override_config('glance_api_version', 2)
with mock.patch.object(self.service, '_client') as client_mock:
client_mock.return_value = []
result = self.service.detail(self.context)
self.assertListEqual([], result)
client_mock.call.assert_called_once_with(self.context, 'list')
def test_detail_marker(self):
fixtures = []
ids = []