summaryrefslogtreecommitdiff
path: root/troveclient/osc/v1/database_backups.py
diff options
context:
space:
mode:
Diffstat (limited to 'troveclient/osc/v1/database_backups.py')
-rw-r--r--troveclient/osc/v1/database_backups.py61
1 files changed, 46 insertions, 15 deletions
diff --git a/troveclient/osc/v1/database_backups.py b/troveclient/osc/v1/database_backups.py
index f4dd0e2..28ceea7 100644
--- a/troveclient/osc/v1/database_backups.py
+++ b/troveclient/osc/v1/database_backups.py
@@ -217,16 +217,18 @@ class CreateDatabaseBackup(command.ShowOne):
def get_parser(self, prog_name):
parser = super(CreateDatabaseBackup, self).get_parser(prog_name)
parser.add_argument(
- 'instance',
- metavar='<instance>',
- help=_('ID or name of the instance.')
- )
- parser.add_argument(
'name',
metavar='<name>',
help=_('Name of the backup.')
)
parser.add_argument(
+ '-i',
+ '--instance',
+ metavar='<instance>',
+ help=_('ID or name of the instance. This is not required if '
+ 'restoring a backup from the data location.')
+ )
+ parser.add_argument(
'--description',
metavar='<description>',
default=None,
@@ -256,21 +258,50 @@ class CreateDatabaseBackup(command.ShowOne):
'operator. Non-existent container is created '
'automatically.')
)
+ parser.add_argument(
+ '--restore-from',
+ help=_('The original backup data location, typically this is a '
+ 'Swift object URL.')
+ )
+ parser.add_argument(
+ '--restore-datastore-version',
+ help=_('ID of the local datastore version corresponding to the '
+ 'original backup')
+ )
+ parser.add_argument(
+ '--restore-size', type=float,
+ help=_('The original backup size.')
+ )
return parser
def take_action(self, parsed_args):
manager = self.app.client_manager.database
database_backups = manager.backups
- instance = osc_utils.find_resource(manager.instances,
- parsed_args.instance)
- backup = database_backups.create(
- parsed_args.name,
- instance,
- description=parsed_args.description,
- parent_id=parsed_args.parent,
- incremental=parsed_args.incremental,
- swift_container=parsed_args.swift_container
- )
+ params = {}
+ instance_id = None
+
+ if parsed_args.restore_from:
+ # Leave the input validation to Trove server.
+ params.update({
+ 'restore_from': parsed_args.restore_from,
+ 'restore_ds_version': parsed_args.restore_datastore_version,
+ 'restore_size': parsed_args.restore_size,
+ })
+ elif not parsed_args.instance:
+ raise exceptions.CommandError('Instance ID or name is required if '
+ 'not restoring a backup.')
+ else:
+ instance_id = trove_utils.get_resource_id(manager.instances,
+ parsed_args.instance)
+ params.update({
+ 'description': parsed_args.description,
+ 'parent_id': parsed_args.parent,
+ 'incremental': parsed_args.incremental,
+ 'swift_container': parsed_args.swift_container
+ })
+
+ backup = database_backups.create(parsed_args.name, instance_id,
+ **params)
backup = set_attributes_for_print_detail(backup)
return zip(*sorted(backup.items()))