diff --git a/doc/source/command-objects/volume-backup.rst b/doc/source/command-objects/volume-backup.rst index 7ce8a4eb3..2cccffae9 100644 --- a/doc/source/command-objects/volume-backup.rst +++ b/doc/source/command-objects/volume-backup.rst @@ -94,6 +94,7 @@ List volume backups [--volume ] [--marker ] [--limit ] + [--all-projects] .. _volume_backup_list-backup: .. option:: --long @@ -125,6 +126,10 @@ List volume backups *Volume version 2 only* +.. option:: --all-projects + + Include all projects (admin only) + volume backup restore --------------------- diff --git a/openstackclient/tests/unit/volume/v1/test_backup.py b/openstackclient/tests/unit/volume/v1/test_backup.py index f4a3b5e5c..1097d3f12 100644 --- a/openstackclient/tests/unit/volume/v1/test_backup.py +++ b/openstackclient/tests/unit/volume/v1/test_backup.py @@ -260,6 +260,7 @@ class TestBackupList(TestBackup): ("name", None), ("status", None), ("volume", None), + ('all_projects', False), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -269,8 +270,9 @@ class TestBackupList(TestBackup): "name": None, "status": None, "volume_id": None, + "all_tenants": False, } - self.volumes_mock.get.assert_not_called + self.volumes_mock.get.assert_not_called() self.backups_mock.list.assert_called_with( search_opts=search_opts, ) @@ -283,12 +285,14 @@ class TestBackupList(TestBackup): "--name", self.backups[0].name, "--status", "error", "--volume", self.volume.id, + "--all-projects" ] verifylist = [ ("long", True), ("name", self.backups[0].name), ("status", "error"), ("volume", self.volume.id), + ('all_projects', True), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -298,6 +302,7 @@ class TestBackupList(TestBackup): "name": self.backups[0].name, "status": "error", "volume_id": self.volume.id, + "all_tenants": True, } self.volumes_mock.get.assert_called_once_with(self.volume.id) self.backups_mock.list.assert_called_with( diff --git a/openstackclient/tests/unit/volume/v2/test_backup.py b/openstackclient/tests/unit/volume/v2/test_backup.py index dd2b26891..10e7aac5c 100644 --- a/openstackclient/tests/unit/volume/v2/test_backup.py +++ b/openstackclient/tests/unit/volume/v2/test_backup.py @@ -294,6 +294,7 @@ class TestBackupList(TestBackup): ("volume", None), ("marker", None), ("limit", None), + ('all_projects', False), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -303,9 +304,10 @@ class TestBackupList(TestBackup): "name": None, "status": None, "volume_id": None, + 'all_tenants': False, } - self.volumes_mock.get.assert_not_called - self.backups_mock.get.assert_not_called + self.volumes_mock.get.assert_not_called() + self.backups_mock.get.assert_not_called() self.backups_mock.list.assert_called_with( search_opts=search_opts, marker=None, @@ -321,6 +323,7 @@ class TestBackupList(TestBackup): "--status", "error", "--volume", self.volume.id, "--marker", self.backups[0].id, + "--all-projects", "--limit", "3", ] verifylist = [ @@ -329,6 +332,7 @@ class TestBackupList(TestBackup): ("status", "error"), ("volume", self.volume.id), ("marker", self.backups[0].id), + ('all_projects', True), ("limit", 3), ] @@ -339,6 +343,7 @@ class TestBackupList(TestBackup): "name": self.backups[0].name, "status": "error", "volume_id": self.volume.id, + 'all_tenants': True, } self.volumes_mock.get.assert_called_once_with(self.volume.id) self.backups_mock.get.assert_called_once_with(self.backups[0].id) diff --git a/openstackclient/volume/v1/backup.py b/openstackclient/volume/v1/backup.py index bf4e8625b..a02cdccb2 100644 --- a/openstackclient/volume/v1/backup.py +++ b/openstackclient/volume/v1/backup.py @@ -172,6 +172,12 @@ class ListVolumeBackup(command.Lister): help=_("Filters results by the volume which they " "backup (name or ID)") ) + parser.add_argument( + '--all-projects', + action='store_true', + default=False, + help=_('Include all projects (admin only)'), + ) return parser def take_action(self, parsed_args): @@ -215,6 +221,7 @@ class ListVolumeBackup(command.Lister): 'name': parsed_args.name, 'status': parsed_args.status, 'volume_id': filter_volume_id, + 'all_tenants': parsed_args.all_projects, } data = volume_client.backups.list( search_opts=search_opts, diff --git a/openstackclient/volume/v2/backup.py b/openstackclient/volume/v2/backup.py index e674ef2bb..c41cffda3 100644 --- a/openstackclient/volume/v2/backup.py +++ b/openstackclient/volume/v2/backup.py @@ -212,6 +212,12 @@ class ListVolumeBackup(command.Lister): metavar='', help=_('Maximum number of backups to display'), ) + parser.add_argument( + '--all-projects', + action='store_true', + default=False, + help=_('Include all projects (admin only)'), + ) return parser def take_action(self, parsed_args): @@ -259,6 +265,7 @@ class ListVolumeBackup(command.Lister): 'name': parsed_args.name, 'status': parsed_args.status, 'volume_id': filter_volume_id, + 'all_tenants': parsed_args.all_projects, } data = volume_client.backups.list( search_opts=search_opts, diff --git a/releasenotes/notes/backup_list_all-projects_option-4bb23e0b9b075cac.yaml b/releasenotes/notes/backup_list_all-projects_option-4bb23e0b9b075cac.yaml new file mode 100644 index 000000000..5d379f64e --- /dev/null +++ b/releasenotes/notes/backup_list_all-projects_option-4bb23e0b9b075cac.yaml @@ -0,0 +1,4 @@ +--- +features: + - The ``openstack volume backup list`` command now supports the + ``all-projects`` option to list volume backups accross all projects.