Merge "Improvement to query cg detail(Part 1)"

This commit is contained in:
Jenkins 2016-08-04 20:15:45 +00:00 committed by Gerrit Code Review
commit 1d5882a3ab
6 changed files with 56 additions and 3 deletions

View File

@ -42,13 +42,13 @@ api_common_opts = [
cfg.ListOpt('query_volume_filters', cfg.ListOpt('query_volume_filters',
default=['name', 'status', 'metadata', default=['name', 'status', 'metadata',
'availability_zone', 'availability_zone',
'bootable'], 'bootable', 'group_id'],
help="Volume filter options which " help="Volume filter options which "
"non-admin user could use to " "non-admin user could use to "
"query volumes. Default values " "query volumes. Default values "
"are: ['name', 'status', " "are: ['name', 'status', "
"'metadata', 'availability_zone' ," "'metadata', 'availability_zone' ,"
"'bootable']") "'bootable', 'group_id']")
] ]
CONF = cfg.CONF CONF = cfg.CONF

View File

@ -57,6 +57,7 @@ REST_API_VERSION_HISTORY = """
* 3.7 - Add cluster API and cluster_name field to service list API * 3.7 - Add cluster API and cluster_name field to service list API
* 3.8 - Adds resources from volume_manage and snapshot_manage extensions. * 3.8 - Adds resources from volume_manage and snapshot_manage extensions.
* 3.9 - Add backup update interface. * 3.9 - Add backup update interface.
* 3.10 - Add group_id filter to list/detail volumes in _get_volumes.
""" """
@ -65,7 +66,7 @@ REST_API_VERSION_HISTORY = """
# minimum version of the API supported. # minimum version of the API supported.
# Explicitly using /v1 or /v2 enpoints will still work # Explicitly using /v1 or /v2 enpoints will still work
_MIN_API_VERSION = "3.0" _MIN_API_VERSION = "3.0"
_MAX_API_VERSION = "3.9" _MAX_API_VERSION = "3.10"
_LEGACY_API_VERSION1 = "1.0" _LEGACY_API_VERSION1 = "1.0"
_LEGACY_API_VERSION2 = "2.0" _LEGACY_API_VERSION2 = "2.0"

View File

@ -165,3 +165,8 @@ user documentation.
"name": "backup_name", "name": "backup_name",
"links": "backup_link", "links": "backup_link",
} }
3.10
----
Added the filter parameters ``group_id`` to
list/detail volumes requests.

View File

@ -36,6 +36,9 @@ class VolumeController(volumes_v2.VolumeController):
if req_version.matches(None, "3.3"): if req_version.matches(None, "3.3"):
filters.pop('glance_metadata', None) filters.pop('glance_metadata', None)
if req_version.matches(None, "3.9"):
filters.pop('group_id', None)
utils.remove_invalid_filter_options(context, filters, utils.remove_invalid_filter_options(context, filters,
self._get_volume_filter_options()) self._get_volume_filter_options())
# NOTE(thingee): v2 API allows name instead of display_name # NOTE(thingee): v2 API allows name instead of display_name
@ -45,6 +48,9 @@ class VolumeController(volumes_v2.VolumeController):
if 'name' in filters: if 'name' in filters:
filters['display_name'] = filters.pop('name') filters['display_name'] = filters.pop('name')
if 'group_id' in filters:
filters['consistencygroup_id'] = filters.pop('group_id')
strict = req.api_version_request.matches("3.2", None) strict = req.api_version_request.matches("3.2", None)
self.volume_api.check_volume_filters(filters, strict) self.volume_api.check_volume_filters(filters, strict)

View File

@ -87,6 +87,19 @@ class VolumeApiTest(test.TestCase):
'qcow2') 'qcow2')
return [vol1, vol2] return [vol1, vol2]
def _create_volume_with_consistency_group(self):
vol1 = db.volume_create(self.ctxt, {'display_name': 'test1',
'project_id':
self.ctxt.project_id,
'consistencygroup_id':
fake.CONSISTENCY_GROUP_ID})
vol2 = db.volume_create(self.ctxt, {'display_name': 'test2',
'project_id':
self.ctxt.project_id,
'consistencygroup_id':
fake.CONSISTENCY_GROUP2_ID})
return [vol1, vol2]
def test_volume_index_filter_by_glance_metadata(self): def test_volume_index_filter_by_glance_metadata(self):
vols = self._create_volume_with_glance_metadata() vols = self._create_volume_with_glance_metadata()
req = fakes.HTTPRequest.blank("/v3/volumes?glance_metadata=" req = fakes.HTTPRequest.blank("/v3/volumes?glance_metadata="
@ -109,3 +122,26 @@ class VolumeApiTest(test.TestCase):
res_dict = self.controller.index(req) res_dict = self.controller.index(req)
volumes = res_dict['volumes'] volumes = res_dict['volumes']
self.assertEqual(2, len(volumes)) self.assertEqual(2, len(volumes))
def test_volume_index_filter_by_group_id(self):
vols = self._create_volume_with_consistency_group()
req = fakes.HTTPRequest.blank(("/v3/volumes?group_id=%s") %
fake.CONSISTENCY_GROUP_ID)
req.headers["OpenStack-API-Version"] = "volume 3.10"
req.api_version_request = api_version.APIVersionRequest('3.10')
req.environ['cinder.context'] = self.ctxt
res_dict = self.controller.index(req)
volumes = res_dict['volumes']
self.assertEqual(1, len(volumes))
self.assertEqual(vols[0].id, volumes[0]['id'])
def test_volume_index_filter_by_group_id_in_unsupport_version(self):
self._create_volume_with_consistency_group()
req = fakes.HTTPRequest.blank(("/v3/volumes?group_id=%s") %
fake.CONSISTENCY_GROUP2_ID)
req.headers["OpenStack-API-Version"] = "volume 3.9"
req.api_version_request = api_version.APIVersionRequest('3.9')
req.environ['cinder.context'] = self.ctxt
res_dict = self.controller.index(req)
volumes = res_dict['volumes']
self.assertEqual(2, len(volumes))

View File

@ -0,0 +1,5 @@
---
features:
- Added support for querying volumes filtered by group_id
using 'group_id' optional URL parameter.
For example, "volumes/detail?group_id={consistency_group_id}".