Merge "Support querying node history with sort_key and sort_dir"

This commit is contained in:
Zuul 2025-02-04 11:12:19 +00:00 committed by Gerrit Code Review
commit eeed59435c
3 changed files with 26 additions and 3 deletions

View File

@ -2127,8 +2127,10 @@ class NodeHistoryController(rest.RestController):
@METRICS.timer('NodeHistoryController.get_all')
@method.expose()
@args.validate(detail=args.boolean, marker=args.uuid, limit=args.integer)
def get_all(self, detail=False, marker=None, limit=None):
@args.validate(detail=args.boolean, marker=args.uuid, limit=args.integer,
sort_key=args.string, sort_dir=args.string)
def get_all(self, detail=False, marker=None, limit=None,
sort_key='created_at', sort_dir='asc'):
"""List node history."""
node = api_utils.check_node_policy_and_retrieve(
'baremetal:node:history:get', self.node_ident)
@ -2140,11 +2142,14 @@ class NodeHistoryController(rest.RestController):
marker_obj = objects.NodeHistory.get_by_uuid(api.request.context,
marker)
limit = api_utils.validate_limit(limit)
sort_dir = api_utils.validate_sort_dir(sort_dir)
events = objects.NodeHistory.list_by_node_id(api.request.context,
node.id,
marker=marker_obj,
limit=limit)
limit=limit,
sort_key=sort_key,
sort_dir=sort_dir)
return collection.list_convert_with_links(
items=[
@ -2156,6 +2161,8 @@ class NodeHistoryController(rest.RestController):
fields=fields,
marker=marker_obj,
limit=limit,
sort_key=sort_key,
sort_dir=sort_dir
)
@METRICS.timer('NodeHistoryController.get_one')

View File

@ -8425,6 +8425,18 @@ class TestNodeHistory(test_api_base.BaseApiTest):
headers={api_base.Version.string: self.version})
self.assertEqual({'history': []}, ret)
def test_get_all_history_with_sort(self):
self._add_history_entries()
# sort_key defaults to created_at
ret = self.get_json(
'/nodes/{}/history?sort_dir=desc'.format(
self.node.uuid),
headers={api_base.Version.string: self.version})
self.assertEqual(
[self.event3.uuid, self.event2.uuid, self.event1.uuid],
[h['uuid'] for h in ret['history']]
)
def test_get_all_old_version(self):
ret = self.get_json('/nodes/%s/history' % self.node.uuid,
headers={api_base.Version.string: "1.77"},

View File

@ -0,0 +1,4 @@
---
features:
- |
Node history API now support querying with sort_key and sort_dir.