From b23b9fbd87b1a58ad02534d34a745ffa8341bb71 Mon Sep 17 00:00:00 2001 From: Robert Myers <robert.myers@rackspace.com> Date: Thu, 19 Dec 2013 11:26:46 -0600 Subject: [PATCH] Adding support for incremental backups * Adds a parent argument to backup-create. * Adds parent_id to the backup create body if present. Implements: blueprint incremental-backups Change-Id: I76f720ae4eadf2a1977c4c2cbf286db4db079b63 --- troveclient/tests/test_backups.py | 8 ++++++++ troveclient/v1/backups.py | 4 +++- troveclient/v1/shell.py | 11 ++++++++--- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/troveclient/tests/test_backups.py b/troveclient/tests/test_backups.py index d72ba894..912400a1 100644 --- a/troveclient/tests/test_backups.py +++ b/troveclient/tests/test_backups.py @@ -66,6 +66,14 @@ class BackupManagerTest(testtools.TestCase): self.backups.create(**args) create_mock.assert_called_with('/backups', body, 'backup') + def test_create_incremental(self): + create_mock = mock.Mock() + self.backups._create = create_mock + args = {'name': 'test_backup', 'instance': '1', 'parent_id': 'foo'} + body = {'backup': args} + self.backups.create(**args) + create_mock.assert_called_with('/backups', body, 'backup') + def test_list(self): page_mock = mock.Mock() self.backups._paginated = page_mock diff --git a/troveclient/v1/backups.py b/troveclient/v1/backups.py index 0b23e346..bf2c8ea1 100644 --- a/troveclient/v1/backups.py +++ b/troveclient/v1/backups.py @@ -53,7 +53,7 @@ class Backups(base.ManagerWithFind): """ return self._paginated("/backups", "backups", limit, marker) - def create(self, name, instance, description=None): + def create(self, name, instance, description=None, parent_id=None): """ Create a new backup from the given instance. """ @@ -65,6 +65,8 @@ class Backups(base.ManagerWithFind): } if description: body['backup']['description'] = description + if parent_id: + body['backup']['parent_id'] = parent_id return self._create("/backups", body, "backup") def delete(self, backup_id): diff --git a/troveclient/v1/shell.py b/troveclient/v1/shell.py index 21b82f29..028ce4bf 100644 --- a/troveclient/v1/shell.py +++ b/troveclient/v1/shell.py @@ -264,7 +264,8 @@ def do_backup_list_instance(cs, args): while wrapper.next and not args.limit: wrapper = cs.instances.backups(args.instance, marker=wrapper.next) backups += wrapper.items - utils.print_list(backups, ['id', 'name', 'status', 'updated'], + utils.print_list(backups, ['id', 'name', 'status', + 'parent_id', 'updated'], order_by='updated') @@ -280,7 +281,7 @@ def do_backup_list(cs, args): wrapper = cs.backups.list(marker=wrapper.next) backups += wrapper.items utils.print_list(backups, ['id', 'instance_id', 'name', - 'status', 'updated'], + 'status', 'parent_id', 'updated'], order_by='updated') @@ -296,11 +297,15 @@ def do_backup_delete(cs, args): @utils.arg('--description', metavar='<description>', default=None, help='An optional description for the backup.') +@utils.arg('--parent', metavar='<parent>', default=None, + help='Optional UUID of the parent backup to preform an' + ' incremental backup from.') @utils.service_type('database') def do_backup_create(cs, args): """Creates a backup.""" backup = cs.backups.create(args.name, args.instance, - description=args.description) + description=args.description, + parent_id=args.parent) _print_instance(backup)