From 572eeb6d38f92669580b34d0d0a2b217fc999179 Mon Sep 17 00:00:00 2001 From: ohjiwoo Date: Wed, 2 Jul 2025 10:15:29 +0900 Subject: [PATCH] Add metadata as a filter condition when listing volumes When listing volumes, the API provides metadata as a query parameter, but this feature is not implemented in the client code. So add parameter. story: 2011487 task: 52446 Change-Id: I4bf66d4e073c86296fa96ee29c2b33d771e18293 Signed-off-by: ohjiwoo --- openstackclient/tests/unit/volume/v3/test_volume.py | 11 +++++++++++ openstackclient/volume/v3/volume.py | 11 +++++++++++ ...-volume-list-property-option-62008dc24762663b.yaml | 3 +++ 3 files changed, 25 insertions(+) create mode 100644 releasenotes/notes/add-volume-list-property-option-62008dc24762663b.yaml diff --git a/openstackclient/tests/unit/volume/v3/test_volume.py b/openstackclient/tests/unit/volume/v3/test_volume.py index 359e3d06a7..fe210280a6 100644 --- a/openstackclient/tests/unit/volume/v3/test_volume.py +++ b/openstackclient/tests/unit/volume/v3/test_volume.py @@ -1239,6 +1239,7 @@ class TestVolumeList(volume_fakes.TestVolume): 'user_id': None, 'name': None, 'status': None, + 'metadata': None, } self.volumes_mock.list.assert_called_once_with( search_opts=search_opts, @@ -1282,6 +1283,7 @@ class TestVolumeList(volume_fakes.TestVolume): 'user_id': None, 'name': None, 'status': None, + 'metadata': None, } self.volumes_mock.list.assert_called_once_with( search_opts=search_opts, @@ -1328,6 +1330,7 @@ class TestVolumeList(volume_fakes.TestVolume): 'user_id': None, 'name': None, 'status': None, + 'metadata': None, } self.volumes_mock.list.assert_called_once_with( search_opts=search_opts, @@ -1371,6 +1374,7 @@ class TestVolumeList(volume_fakes.TestVolume): 'user_id': self.user.id, 'name': None, 'status': None, + 'metadata': None, } self.volumes_mock.list.assert_called_once_with( search_opts=search_opts, @@ -1416,6 +1420,7 @@ class TestVolumeList(volume_fakes.TestVolume): 'user_id': self.user.id, 'name': None, 'status': None, + 'metadata': None, } self.volumes_mock.list.assert_called_once_with( search_opts=search_opts, @@ -1459,6 +1464,7 @@ class TestVolumeList(volume_fakes.TestVolume): 'user_id': None, 'name': self.mock_volume.name, 'status': None, + 'metadata': None, } self.volumes_mock.list.assert_called_once_with( search_opts=search_opts, @@ -1502,6 +1508,7 @@ class TestVolumeList(volume_fakes.TestVolume): 'user_id': None, 'name': None, 'status': self.mock_volume.status, + 'metadata': None, } self.volumes_mock.list.assert_called_once_with( search_opts=search_opts, @@ -1544,6 +1551,7 @@ class TestVolumeList(volume_fakes.TestVolume): 'user_id': None, 'name': None, 'status': None, + 'metadata': None, } self.volumes_mock.list.assert_called_once_with( search_opts=search_opts, @@ -1587,6 +1595,7 @@ class TestVolumeList(volume_fakes.TestVolume): 'user_id': None, 'name': None, 'status': None, + 'metadata': None, } self.volumes_mock.list.assert_called_once_with( search_opts=search_opts, @@ -1660,6 +1669,7 @@ class TestVolumeList(volume_fakes.TestVolume): 'user_id': None, 'name': None, 'all_tenants': False, + 'metadata': None, }, ) self.assertCountEqual(datalist, tuple(data)) @@ -1704,6 +1714,7 @@ class TestVolumeList(volume_fakes.TestVolume): 'user_id': None, 'name': None, 'status': None, + 'metadata': None, } self.volumes_mock.list.assert_called_once_with( search_opts=search_opts, diff --git a/openstackclient/volume/v3/volume.py b/openstackclient/volume/v3/volume.py index 6852944ec2..c59e413a21 100644 --- a/openstackclient/volume/v3/volume.py +++ b/openstackclient/volume/v3/volume.py @@ -574,6 +574,16 @@ class ListVolume(command.Lister): metavar='', help=_('Filter results by status'), ) + parser.add_argument( + '--property', + metavar='', + action=parseractions.KeyValueAction, + dest='properties', + help=_( + 'Filter by a property on the volume list ' + '(repeat option to filter by multiple properties) ' + ), + ) parser.add_argument( '--all-projects', action='store_true', @@ -642,6 +652,7 @@ class ListVolume(command.Lister): 'user_id': user_id, 'name': parsed_args.name, 'status': parsed_args.status, + 'metadata': parsed_args.properties, } data = volume_client.volumes.list( diff --git a/releasenotes/notes/add-volume-list-property-option-62008dc24762663b.yaml b/releasenotes/notes/add-volume-list-property-option-62008dc24762663b.yaml new file mode 100644 index 0000000000..ab4b60025a --- /dev/null +++ b/releasenotes/notes/add-volume-list-property-option-62008dc24762663b.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add ``--property`` option to ``volume list`` command to filter volumes.