From b35b79b15fd5ad15dd54a0ce22e7dee65bc52b74 Mon Sep 17 00:00:00 2001 From: Kaifeng Wang Date: Sat, 29 Jun 2024 23:32:16 +0800 Subject: [PATCH] Fixes the description filter --description-contains is added for listing node with description filtering, but it's actually not working due to missing support from the node list interface. This patch fixes it. Change-Id: Ie5c12ba9c00be3d117313c5617da28063e00185f Closes-Bug: #2071446 --- ironicclient/tests/unit/v1/test_node.py | 20 ++++++++++++++++++- ironicclient/v1/node.py | 7 ++++++- ...description-contains-03f2c32268495660.yaml | 5 +++++ 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 releasenotes/notes/fix-description-contains-03f2c32268495660.yaml diff --git a/ironicclient/tests/unit/v1/test_node.py b/ironicclient/tests/unit/v1/test_node.py index ed76106f6..4085c4c88 100644 --- a/ironicclient/tests/unit/v1/test_node.py +++ b/ironicclient/tests/unit/v1/test_node.py @@ -55,7 +55,8 @@ NODE2 = {'uuid': '66666666-7777-8888-9999-111111111111', 'retired': True, 'lessee': '77777777-8888-5555-2222-999999999999', 'shard': 'myshard', - 'parent_node': NODE1['uuid']} + 'parent_node': NODE1['uuid'], + 'description': 'foo bar'} PORT = {'uuid': '11111111-2222-3333-4444-555555555555', 'node_uuid': '66666666-7777-8888-9999-000000000000', 'address': 'AA:AA:AA:AA:AA:AA', @@ -298,6 +299,13 @@ fake_responses = { {"nodes": [NODE2]} ) }, + '/v1/nodes/?description_contains=foo': + { + 'GET': ( + {}, + {"nodes": [NODE2]} + ) + }, '/v1/nodes/%s/children' % NODE1['uuid']: { 'GET': ( @@ -1068,6 +1076,16 @@ class NodeManagerTest(testtools.TestCase): self.assertEqual(1, len(children)) self.assertEqual(NODE2['uuid'], children[0]) + def test_node_list_by_description(self): + nodes = self.mgr.list(description_contains='foo') + expect = [ + ('GET', '/v1/nodes/?description_contains=foo', {}, None), + ] + self.assertEqual(expect, self.api.calls) + self.assertThat(nodes, HasLength(1)) + self.assertEqual(NODE2['description'], + getattr(nodes[0], 'description')) + def test_node_list_detail(self): nodes = self.mgr.list(detail=True) expect = [ diff --git a/ironicclient/v1/node.py b/ironicclient/v1/node.py index 0c288a293..0143751b2 100644 --- a/ironicclient/v1/node.py +++ b/ironicclient/v1/node.py @@ -65,7 +65,8 @@ class NodeManager(base.CreateManager): os_ironic_api_version=None, conductor_group=None, conductor=None, owner=None, retired=None, lessee=None, shards=None, sharded=None, parent_node=None, - include_children=None, global_request_id=None): + include_children=None, description_contains=None, + global_request_id=None): """Retrieve a list of nodes. :param associated: Optional. Either a Boolean or a string @@ -144,6 +145,8 @@ class NodeManager(base.CreateManager): Tells the ironic API to enumerate all child nodes which are normally hidden from the node list. + :param description_contains: Optional. String value to get nodes + with description contains specified value. :returns: A list of nodes. """ @@ -189,6 +192,8 @@ class NodeManager(base.CreateManager): if include_children: # NOTE(TheJulia): Only valid if True. filters.append('include_children=True') + if description_contains is not None: + filters.append('description_contains=%s' % description_contains) path = '' if detail: diff --git a/releasenotes/notes/fix-description-contains-03f2c32268495660.yaml b/releasenotes/notes/fix-description-contains-03f2c32268495660.yaml new file mode 100644 index 000000000..91d4a7a9c --- /dev/null +++ b/releasenotes/notes/fix-description-contains-03f2c32268495660.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fixes the issue that ``--description-contains`` does not work when trying + to query nodes with description filter. \ No newline at end of file