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 <jiwooo.oh@samsung.com>
This commit is contained in:
ohjiwoo
2025-07-02 10:15:29 +09:00
committed by Stephen Finucane
parent 88b59d8975
commit 572eeb6d38
3 changed files with 25 additions and 0 deletions

View File

@@ -1239,6 +1239,7 @@ class TestVolumeList(volume_fakes.TestVolume):
'user_id': None, 'user_id': None,
'name': None, 'name': None,
'status': None, 'status': None,
'metadata': None,
} }
self.volumes_mock.list.assert_called_once_with( self.volumes_mock.list.assert_called_once_with(
search_opts=search_opts, search_opts=search_opts,
@@ -1282,6 +1283,7 @@ class TestVolumeList(volume_fakes.TestVolume):
'user_id': None, 'user_id': None,
'name': None, 'name': None,
'status': None, 'status': None,
'metadata': None,
} }
self.volumes_mock.list.assert_called_once_with( self.volumes_mock.list.assert_called_once_with(
search_opts=search_opts, search_opts=search_opts,
@@ -1328,6 +1330,7 @@ class TestVolumeList(volume_fakes.TestVolume):
'user_id': None, 'user_id': None,
'name': None, 'name': None,
'status': None, 'status': None,
'metadata': None,
} }
self.volumes_mock.list.assert_called_once_with( self.volumes_mock.list.assert_called_once_with(
search_opts=search_opts, search_opts=search_opts,
@@ -1371,6 +1374,7 @@ class TestVolumeList(volume_fakes.TestVolume):
'user_id': self.user.id, 'user_id': self.user.id,
'name': None, 'name': None,
'status': None, 'status': None,
'metadata': None,
} }
self.volumes_mock.list.assert_called_once_with( self.volumes_mock.list.assert_called_once_with(
search_opts=search_opts, search_opts=search_opts,
@@ -1416,6 +1420,7 @@ class TestVolumeList(volume_fakes.TestVolume):
'user_id': self.user.id, 'user_id': self.user.id,
'name': None, 'name': None,
'status': None, 'status': None,
'metadata': None,
} }
self.volumes_mock.list.assert_called_once_with( self.volumes_mock.list.assert_called_once_with(
search_opts=search_opts, search_opts=search_opts,
@@ -1459,6 +1464,7 @@ class TestVolumeList(volume_fakes.TestVolume):
'user_id': None, 'user_id': None,
'name': self.mock_volume.name, 'name': self.mock_volume.name,
'status': None, 'status': None,
'metadata': None,
} }
self.volumes_mock.list.assert_called_once_with( self.volumes_mock.list.assert_called_once_with(
search_opts=search_opts, search_opts=search_opts,
@@ -1502,6 +1508,7 @@ class TestVolumeList(volume_fakes.TestVolume):
'user_id': None, 'user_id': None,
'name': None, 'name': None,
'status': self.mock_volume.status, 'status': self.mock_volume.status,
'metadata': None,
} }
self.volumes_mock.list.assert_called_once_with( self.volumes_mock.list.assert_called_once_with(
search_opts=search_opts, search_opts=search_opts,
@@ -1544,6 +1551,7 @@ class TestVolumeList(volume_fakes.TestVolume):
'user_id': None, 'user_id': None,
'name': None, 'name': None,
'status': None, 'status': None,
'metadata': None,
} }
self.volumes_mock.list.assert_called_once_with( self.volumes_mock.list.assert_called_once_with(
search_opts=search_opts, search_opts=search_opts,
@@ -1587,6 +1595,7 @@ class TestVolumeList(volume_fakes.TestVolume):
'user_id': None, 'user_id': None,
'name': None, 'name': None,
'status': None, 'status': None,
'metadata': None,
} }
self.volumes_mock.list.assert_called_once_with( self.volumes_mock.list.assert_called_once_with(
search_opts=search_opts, search_opts=search_opts,
@@ -1660,6 +1669,7 @@ class TestVolumeList(volume_fakes.TestVolume):
'user_id': None, 'user_id': None,
'name': None, 'name': None,
'all_tenants': False, 'all_tenants': False,
'metadata': None,
}, },
) )
self.assertCountEqual(datalist, tuple(data)) self.assertCountEqual(datalist, tuple(data))
@@ -1704,6 +1714,7 @@ class TestVolumeList(volume_fakes.TestVolume):
'user_id': None, 'user_id': None,
'name': None, 'name': None,
'status': None, 'status': None,
'metadata': None,
} }
self.volumes_mock.list.assert_called_once_with( self.volumes_mock.list.assert_called_once_with(
search_opts=search_opts, search_opts=search_opts,

View File

@@ -574,6 +574,16 @@ class ListVolume(command.Lister):
metavar='<status>', metavar='<status>',
help=_('Filter results by status'), help=_('Filter results by status'),
) )
parser.add_argument(
'--property',
metavar='<key=value>',
action=parseractions.KeyValueAction,
dest='properties',
help=_(
'Filter by a property on the volume list '
'(repeat option to filter by multiple properties) '
),
)
parser.add_argument( parser.add_argument(
'--all-projects', '--all-projects',
action='store_true', action='store_true',
@@ -642,6 +652,7 @@ class ListVolume(command.Lister):
'user_id': user_id, 'user_id': user_id,
'name': parsed_args.name, 'name': parsed_args.name,
'status': parsed_args.status, 'status': parsed_args.status,
'metadata': parsed_args.properties,
} }
data = volume_client.volumes.list( data = volume_client.volumes.list(

View File

@@ -0,0 +1,3 @@
---
features:
- Add ``--property`` option to ``volume list`` command to filter volumes.