Merge "Improvement to query cg detail(Part 1)"
This commit is contained in:
commit
1d5882a3ab
@ -42,13 +42,13 @@ api_common_opts = [
|
||||
cfg.ListOpt('query_volume_filters',
|
||||
default=['name', 'status', 'metadata',
|
||||
'availability_zone',
|
||||
'bootable'],
|
||||
'bootable', 'group_id'],
|
||||
help="Volume filter options which "
|
||||
"non-admin user could use to "
|
||||
"query volumes. Default values "
|
||||
"are: ['name', 'status', "
|
||||
"'metadata', 'availability_zone' ,"
|
||||
"'bootable']")
|
||||
"'bootable', 'group_id']")
|
||||
]
|
||||
|
||||
CONF = cfg.CONF
|
||||
|
@ -57,6 +57,7 @@ REST_API_VERSION_HISTORY = """
|
||||
* 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.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.
|
||||
# Explicitly using /v1 or /v2 enpoints will still work
|
||||
_MIN_API_VERSION = "3.0"
|
||||
_MAX_API_VERSION = "3.9"
|
||||
_MAX_API_VERSION = "3.10"
|
||||
_LEGACY_API_VERSION1 = "1.0"
|
||||
_LEGACY_API_VERSION2 = "2.0"
|
||||
|
||||
|
@ -165,3 +165,8 @@ user documentation.
|
||||
"name": "backup_name",
|
||||
"links": "backup_link",
|
||||
}
|
||||
|
||||
3.10
|
||||
----
|
||||
Added the filter parameters ``group_id`` to
|
||||
list/detail volumes requests.
|
||||
|
@ -36,6 +36,9 @@ class VolumeController(volumes_v2.VolumeController):
|
||||
if req_version.matches(None, "3.3"):
|
||||
filters.pop('glance_metadata', None)
|
||||
|
||||
if req_version.matches(None, "3.9"):
|
||||
filters.pop('group_id', None)
|
||||
|
||||
utils.remove_invalid_filter_options(context, filters,
|
||||
self._get_volume_filter_options())
|
||||
# NOTE(thingee): v2 API allows name instead of display_name
|
||||
@ -45,6 +48,9 @@ class VolumeController(volumes_v2.VolumeController):
|
||||
if 'name' in filters:
|
||||
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)
|
||||
self.volume_api.check_volume_filters(filters, strict)
|
||||
|
||||
|
@ -87,6 +87,19 @@ class VolumeApiTest(test.TestCase):
|
||||
'qcow2')
|
||||
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):
|
||||
vols = self._create_volume_with_glance_metadata()
|
||||
req = fakes.HTTPRequest.blank("/v3/volumes?glance_metadata="
|
||||
@ -109,3 +122,26 @@ class VolumeApiTest(test.TestCase):
|
||||
res_dict = self.controller.index(req)
|
||||
volumes = res_dict['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))
|
||||
|
@ -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}".
|
Loading…
x
Reference in New Issue
Block a user