Merge "Add --incremental flag to backup-create"

This commit is contained in:
Jenkins
2016-08-25 08:35:27 +00:00
committed by Gerrit Code Review
5 changed files with 36 additions and 9 deletions

View File

@@ -0,0 +1,6 @@
features:
- The --incremental flag for backup-create will
add the abiility to create incremental backup based
on last full or incremental backup. If no full or
incremental backup exists a new full backup will
be created.

View File

@@ -55,7 +55,7 @@ class BackupManagerTest(testtools.TestCase):
def test_create(self):
create_mock = mock.Mock()
self.backups._create = create_mock
args = {'name': 'test_backup', 'instance': '1'}
args = {'name': 'test_backup', 'instance': '1', 'incremental': False}
body = {'backup': args}
self.backups.create(**args)
create_mock.assert_called_with('/backups', body, 'backup')
@@ -63,7 +63,8 @@ class BackupManagerTest(testtools.TestCase):
def test_create_description(self):
create_mock = mock.Mock()
self.backups._create = create_mock
args = {'name': 'test_backup', 'instance': '1', 'description': 'foo'}
args = {'name': 'test_backup', 'instance': '1', 'description': 'foo',
'incremental': False}
body = {'backup': args}
self.backups.create(**args)
create_mock.assert_called_with('/backups', body, 'backup')
@@ -71,7 +72,8 @@ class BackupManagerTest(testtools.TestCase):
def test_create_with_instance_obj(self):
create_mock = mock.Mock()
self.backups._create = create_mock
args = {'name': 'test_backup', 'instance': self.instance_with_id.id}
args = {'name': 'test_backup', 'instance': self.instance_with_id.id,
'incremental': False}
body = {'backup': args}
self.backups.create('test_backup', self.instance_with_id)
create_mock.assert_called_with('/backups', body, 'backup')
@@ -79,7 +81,16 @@ class BackupManagerTest(testtools.TestCase):
def test_create_incremental(self):
create_mock = mock.Mock()
self.backups._create = create_mock
args = {'name': 'test_backup', 'instance': '1', 'parent_id': 'foo'}
args = {'name': 'test_backup', 'instance': '1', 'parent_id': 'foo',
'incremental': False}
body = {'backup': args}
self.backups.create(**args)
create_mock.assert_called_with('/backups', body, 'backup')
def test_create_incremental_2(self):
create_mock = mock.Mock()
self.backups._create = create_mock
args = {'name': 'test_backup', 'instance': '1', 'incremental': True}
body = {'backup': args}
self.backups.create(**args)
create_mock.assert_called_with('/backups', body, 'backup')
@@ -88,7 +99,7 @@ class BackupManagerTest(testtools.TestCase):
create_mock = mock.Mock()
self.backups._create = create_mock
args = {'name': 'test_backup', 'instance': 'foo',
'backup': '1'}
'backup': '1', 'incremental': False}
body = {'backup': args}
self.backups.create(**args)
create_mock.assert_called_with('/backups', body, 'backup')

View File

@@ -767,7 +767,8 @@ class ShellTest(utils.TestCase):
'POST', '/backups',
{'backup': {
'instance': '1234',
'name': 'bkp_1'
'name': 'bkp_1',
'incremental': False
}})
def test_backup_copy(self):
@@ -776,6 +777,7 @@ class ShellTest(utils.TestCase):
'POST', '/backups',
{'backup': {
'name': 'new_bkp',
'incremental': False,
'backup': {'region': None, 'id': 'bk-1234'}
}})

View File

@@ -51,18 +51,21 @@ class Backups(base.ManagerWithFind):
query_strings)
def create(self, name, instance, description=None, parent_id=None,
backup=None,):
backup=None, incremental=False):
"""Create a new backup from the given instance.
:param name: name for backup.
:param instance: instance to backup.
:param description: (optional).
:param parent_id: base for incremental backup (optional).
:param incremental: flag to indicate incremental backup based on
last backup
:returns: :class:`Backups`
"""
body = {
"backup": {
"name": name
"name": name,
"incremental": int(incremental)
}
}

View File

@@ -943,13 +943,18 @@ def do_backup_delete(cs, args):
@utils.arg('--parent', metavar='<parent>', default=None,
help='Optional ID of the parent backup to perform an'
' incremental backup from.')
@utils.arg('--incremental', action='store_true', default=False,
help='Create an incremental backup based on the last'
' full or incremental backup. It will create a'
' full backup if no existing backup found.')
@utils.service_type('database')
def do_backup_create(cs, args):
"""Creates a backup of an instance."""
instance = _find_instance(cs, args.instance)
backup = cs.backups.create(args.name, instance,
description=args.description,
parent_id=args.parent)
parent_id=args.parent,
incremental=args.incremental)
_print_object(backup)