summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLingxian Kong <anlin.kong@gmail.com>2020-09-13 23:59:23 +1200
committerLingxian Kong <anlin.kong@gmail.com>2020-09-14 00:07:12 +1200
commite4d79c2cbc3ee1c0f40a37a3f1674ab3b81c387c (patch)
tree24b49abff0102b87c9e8eacd9db011a5a0a55425
parent0c6ec392ae6b8a99e2b1d1c3016cac41b5e4bc6e (diff)
downloadpython-troveclient-e4d79c2cbc3ee1c0f40a37a3f1674ab3b81c387c.tar.gz
Support getting backups of a specific project
Change-Id: Ia590fa6aae23b7323963181d79c9b0097fd2e4d1
-rw-r--r--releasenotes/notes/wallaby-project-backups.yaml4
-rw-r--r--troveclient/osc/v1/database_backups.py11
-rw-r--r--troveclient/tests/osc/v1/test_database_backups.py25
-rw-r--r--troveclient/v1/backups.py4
4 files changed, 38 insertions, 6 deletions
diff --git a/releasenotes/notes/wallaby-project-backups.yaml b/releasenotes/notes/wallaby-project-backups.yaml
new file mode 100644
index 0000000..da1ed27
--- /dev/null
+++ b/releasenotes/notes/wallaby-project-backups.yaml
@@ -0,0 +1,4 @@
+---
+features:
+ - Support to get backups of a specific project by
+ ``--project-id PROJECT_ID``.
diff --git a/troveclient/osc/v1/database_backups.py b/troveclient/osc/v1/database_backups.py
index f6e5e31..779b942 100644
--- a/troveclient/osc/v1/database_backups.py
+++ b/troveclient/osc/v1/database_backups.py
@@ -71,6 +71,11 @@ class ListDatabaseBackups(command.Lister):
action='store_true',
help=_('Get all the backups of all the projects(Admin only).')
)
+ parser.add_argument(
+ '--project-id',
+ default=None,
+ help=_('Filter backups by project ID.')
+ )
return parser
def take_action(self, parsed_args):
@@ -79,14 +84,16 @@ class ListDatabaseBackups(command.Lister):
datastore=parsed_args.datastore,
marker=parsed_args.marker,
instance_id=parsed_args.instance_id,
- all_projects=parsed_args.all_projects)
+ all_projects=parsed_args.all_projects,
+ project_id=parsed_args.project_id)
backups = items
while items.next and not parsed_args.limit:
items = database_backups.list(
marker=items.next,
datastore=parsed_args.datastore,
instance_id=parsed_args.instance_id,
- all_projects=parsed_args.all_projects
+ all_projects=parsed_args.all_projects,
+ project_id=parsed_args.project_id
)
backups += items
diff --git a/troveclient/tests/osc/v1/test_database_backups.py b/troveclient/tests/osc/v1/test_database_backups.py
index 0010a46..7a4ae13 100644
--- a/troveclient/tests/osc/v1/test_database_backups.py
+++ b/troveclient/tests/osc/v1/test_database_backups.py
@@ -51,7 +51,8 @@ class TestBackupList(TestBackups):
'limit': None,
'marker': None,
'instance_id': None,
- 'all_projects': False
+ 'all_projects': False,
+ 'project_id': None
}
self.backup_client.list.assert_called_once_with(**params)
@@ -68,7 +69,8 @@ class TestBackupList(TestBackups):
'limit': None,
'marker': None,
'instance_id': 'fake_id',
- 'all_projects': False
+ 'all_projects': False,
+ 'project_id': None
}
self.backup_client.list.assert_called_once_with(**params)
@@ -82,7 +84,24 @@ class TestBackupList(TestBackups):
'limit': None,
'marker': None,
'instance_id': None,
- 'all_projects': True
+ 'all_projects': True,
+ 'project_id': None
+ }
+
+ self.backup_client.list.assert_called_once_with(**params)
+
+ def test_backup_list_by_project(self):
+ parsed_args = self.check_parser(self.cmd, ["--project-id", "fake_id"],
+ [])
+ self.cmd.take_action(parsed_args)
+
+ params = {
+ 'datastore': None,
+ 'limit': None,
+ 'marker': None,
+ 'instance_id': None,
+ 'all_projects': False,
+ 'project_id': 'fake_id'
}
self.backup_client.list.assert_called_once_with(**params)
diff --git a/troveclient/v1/backups.py b/troveclient/v1/backups.py
index cce6560..4876ac7 100644
--- a/troveclient/v1/backups.py
+++ b/troveclient/v1/backups.py
@@ -60,7 +60,7 @@ class Backups(base.ManagerWithFind):
"backup")
def list(self, limit=None, marker=None, datastore=None, instance_id=None,
- all_projects=False):
+ all_projects=False, project_id=None):
"""Get a list of all backups."""
query_strings = {}
if datastore:
@@ -69,6 +69,8 @@ class Backups(base.ManagerWithFind):
query_strings["instance_id"] = instance_id
if all_projects:
query_strings["all_projects"] = True
+ if project_id:
+ query_strings["project_id"] = project_id
return self._paginated("/backups", "backups", limit, marker,
query_strings)