Support sort backup with name
Cinder now doesn't support sorting backup by "name". This patch adds the support to keep it consistent with volume and snapshot. APIImpact Change-Id: If4779ee1905d2ceea44f1faeaf772b209b0d074c
This commit is contained in:
parent
9564aa464c
commit
2c7758d451
@ -87,6 +87,10 @@ class BackupsController(wsgi.Controller):
|
|||||||
filters,
|
filters,
|
||||||
self._get_backup_filter_options())
|
self._get_backup_filter_options())
|
||||||
|
|
||||||
|
def _convert_sort_name(self, req_version, sort_keys):
|
||||||
|
"""Convert sort key "name" to "display_name". """
|
||||||
|
pass
|
||||||
|
|
||||||
def _get_backups(self, req, is_detail):
|
def _get_backups(self, req, is_detail):
|
||||||
"""Returns a list of backups, transformed through view builder."""
|
"""Returns a list of backups, transformed through view builder."""
|
||||||
context = req.environ['cinder.context']
|
context = req.environ['cinder.context']
|
||||||
@ -95,6 +99,7 @@ class BackupsController(wsgi.Controller):
|
|||||||
marker, limit, offset = common.get_pagination_params(filters)
|
marker, limit, offset = common.get_pagination_params(filters)
|
||||||
sort_keys, sort_dirs = common.get_sort_params(filters)
|
sort_keys, sort_dirs = common.get_sort_params(filters)
|
||||||
|
|
||||||
|
self._convert_sort_name(req_version, sort_keys)
|
||||||
self._process_backup_filtering(context=context, filters=filters,
|
self._process_backup_filtering(context=context, filters=filters,
|
||||||
req_version=req_version)
|
req_version=req_version)
|
||||||
|
|
||||||
|
@ -90,6 +90,7 @@ REST_API_VERSION_HISTORY = """
|
|||||||
list APIs.
|
list APIs.
|
||||||
* 3.35 - Add ``volume-type`` filter to Get-Pools API.
|
* 3.35 - Add ``volume-type`` filter to Get-Pools API.
|
||||||
* 3.36 - Add metadata to volumes/summary response body.
|
* 3.36 - Add metadata to volumes/summary response body.
|
||||||
|
* 3.37 - Support sort backup by "name".
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# The minimum and maximum versions of the API supported
|
# The minimum and maximum versions of the API supported
|
||||||
@ -97,7 +98,7 @@ REST_API_VERSION_HISTORY = """
|
|||||||
# minimum version of the API supported.
|
# minimum version of the API supported.
|
||||||
# Explicitly using /v1 or /v2 endpoints will still work
|
# Explicitly using /v1 or /v2 endpoints will still work
|
||||||
_MIN_API_VERSION = "3.0"
|
_MIN_API_VERSION = "3.0"
|
||||||
_MAX_API_VERSION = "3.36"
|
_MAX_API_VERSION = "3.37"
|
||||||
_LEGACY_API_VERSION1 = "1.0"
|
_LEGACY_API_VERSION1 = "1.0"
|
||||||
_LEGACY_API_VERSION2 = "2.0"
|
_LEGACY_API_VERSION2 = "2.0"
|
||||||
|
|
||||||
|
@ -321,3 +321,7 @@ user documentation.
|
|||||||
3.36
|
3.36
|
||||||
----
|
----
|
||||||
Add metadata to volumes/summary response body.
|
Add metadata to volumes/summary response body.
|
||||||
|
|
||||||
|
3.37
|
||||||
|
----
|
||||||
|
Support sort backup by "name".
|
||||||
|
@ -96,6 +96,10 @@ class BackupsController(backups_v2.BackupsController):
|
|||||||
pass
|
pass
|
||||||
return resp_backup
|
return resp_backup
|
||||||
|
|
||||||
|
def _convert_sort_name(self, req_version, sort_keys):
|
||||||
|
if req_version.matches("3.37") and 'name' in sort_keys:
|
||||||
|
sort_keys[sort_keys.index('name')] = 'display_name'
|
||||||
|
|
||||||
|
|
||||||
def create_resource():
|
def create_resource():
|
||||||
return wsgi.Resource(BackupsController())
|
return wsgi.Resource(BackupsController())
|
||||||
|
@ -21,6 +21,7 @@ import webob
|
|||||||
|
|
||||||
from cinder.api.openstack import api_version_request as api_version
|
from cinder.api.openstack import api_version_request as api_version
|
||||||
from cinder.api.v3 import backups
|
from cinder.api.v3 import backups
|
||||||
|
from cinder.api.views import backups as backup_view
|
||||||
import cinder.backup
|
import cinder.backup
|
||||||
from cinder import context
|
from cinder import context
|
||||||
from cinder import exception
|
from cinder import exception
|
||||||
@ -100,6 +101,26 @@ class BackupsControllerAPITestCase(test.TestCase):
|
|||||||
mock.ANY, 'backup',
|
mock.ANY, 'backup',
|
||||||
support_like)
|
support_like)
|
||||||
|
|
||||||
|
@ddt.data('3.36', '3.37')
|
||||||
|
def test_backup_list_with_name(self, version):
|
||||||
|
backup1 = test_utils.create_backup(
|
||||||
|
self.ctxt, display_name='b_test_name',
|
||||||
|
status=fields.BackupStatus.AVAILABLE)
|
||||||
|
backup2 = test_utils.create_backup(
|
||||||
|
self.ctxt, display_name='a_test_name',
|
||||||
|
status=fields.BackupStatus.AVAILABLE)
|
||||||
|
url = '/v3/%s/backups?sort_key=name' % fake.PROJECT_ID
|
||||||
|
req = fakes.HTTPRequest.blank(url, version=version)
|
||||||
|
if version == '3.36':
|
||||||
|
self.assertRaises(exception.InvalidInput,
|
||||||
|
self.controller.index,
|
||||||
|
req)
|
||||||
|
else:
|
||||||
|
expect = backup_view.ViewBuilder().summary_list(req,
|
||||||
|
[backup1, backup2])
|
||||||
|
result = self.controller.index(req)
|
||||||
|
self.assertEqual(expect, result)
|
||||||
|
|
||||||
def test_backup_update(self):
|
def test_backup_update(self):
|
||||||
backup = test_utils.create_backup(
|
backup = test_utils.create_backup(
|
||||||
self.ctxt,
|
self.ctxt,
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- Add support for sorting backups by "name".
|
Loading…
x
Reference in New Issue
Block a user