Add option to filter for projects when listing volume backups

Change-Id: Idb07c1be90a98b65b6c1b8f888d0ca5309f8cbc4
Signed-off-by: Jan Ueberacker <jan.ueberacker@inovex.de>
This commit is contained in:
Jan Ueberacker
2025-07-16 16:01:09 +02:00
parent ffa37bab12
commit 305e037df2
3 changed files with 30 additions and 1 deletions

View File

@@ -17,6 +17,7 @@ from openstack.block_storage.v3 import backup as _backup
from openstack.block_storage.v3 import snapshot as _snapshot
from openstack.block_storage.v3 import volume as _volume
from openstack import exceptions as sdk_exceptions
from openstack.identity.v3 import project as _project
from openstack.test import fakes as sdk_fakes
from osc_lib import exceptions
@@ -381,6 +382,7 @@ class TestBackupList(volume_fakes.TestVolume):
("marker", None),
("limit", None),
('all_projects', False),
("project", None),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -395,11 +397,14 @@ class TestBackupList(volume_fakes.TestVolume):
all_tenants=False,
marker=None,
limit=None,
project_id=None,
)
self.assertEqual(self.columns, columns)
self.assertCountEqual(self.data, list(data))
def test_backup_list_with_options(self):
project = sdk_fakes.generate_fake_resource(_project.Project)
self.identity_sdk_client.find_project.return_value = project
arglist = [
"--long",
"--name",
@@ -413,6 +418,8 @@ class TestBackupList(volume_fakes.TestVolume):
"--all-projects",
"--limit",
"3",
"--project",
project.id,
]
verifylist = [
("long", True),
@@ -422,6 +429,7 @@ class TestBackupList(volume_fakes.TestVolume):
("marker", self.backups[0].id),
('all_projects', True),
("limit", 3),
("project", project.id),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -440,6 +448,7 @@ class TestBackupList(volume_fakes.TestVolume):
all_tenants=True,
marker=self.backups[0].id,
limit=3,
project_id=project.id,
)
self.assertEqual(self.columns_long, columns)
self.assertCountEqual(self.data_long, list(data))

View File

@@ -236,6 +236,11 @@ class ListVolumeBackup(command.Lister):
def get_parser(self, prog_name):
parser = super().get_parser(prog_name)
parser.add_argument(
'--project',
metavar='<project>',
help=_('Filter results by project (name or ID) (admin only)'),
)
parser.add_argument(
"--long",
action="store_true",
@@ -296,6 +301,7 @@ class ListVolumeBackup(command.Lister):
def take_action(self, parsed_args):
volume_client = self.app.client_manager.sdk_connection.volume
identity_client = self.app.client_manager.sdk_connection.identity
columns: tuple[str, ...] = (
'id',
@@ -332,6 +338,14 @@ class ListVolumeBackup(command.Lister):
VolumeIdColumn, volume_cache=volume_cache
)
all_tenants = parsed_args.all_projects
project_id = None
if parsed_args.project:
all_tenants = True
project_id = identity_client.find_project(
parsed_args.project, ignore_missing=False
).id
filter_volume_id = None
if parsed_args.volume:
try:
@@ -360,9 +374,10 @@ class ListVolumeBackup(command.Lister):
name=parsed_args.name,
status=parsed_args.status,
volume_id=filter_volume_id,
all_tenants=parsed_args.all_projects,
all_tenants=all_tenants,
marker=marker_backup_id,
limit=parsed_args.limit,
project_id=project_id,
)
return (

View File

@@ -0,0 +1,5 @@
---
features:
- |
Add ``--project`` option to ``volume backup list`` command,
to allow filtering for projects when listing volume backups.