diff --git a/cinderclient/utils.py b/cinderclient/utils.py index 93be47708..c7e4ebc9e 100644 --- a/cinderclient/utils.py +++ b/cinderclient/utils.py @@ -230,6 +230,11 @@ def find_resource(manager, name_or_id): raise exceptions.CommandError(msg) +def find_volume(cs, volume): + """Get a volume by name or ID.""" + return find_resource(cs.volumes, volume) + + def _format_servers_list_networks(server): output = [] for (network, addresses) in list(server.networks.items()): diff --git a/cinderclient/v1/shell.py b/cinderclient/v1/shell.py index 1899f4d8a..34b5353c4 100644 --- a/cinderclient/v1/shell.py +++ b/cinderclient/v1/shell.py @@ -60,11 +60,6 @@ def _poll_for_status(poll_fn, obj_id, action, final_ok_states, time.sleep(poll_period) -def _find_volume(cs, volume): - """Get a volume by name or ID.""" - return utils.find_resource(cs.volumes, volume) - - def _find_volume_snapshot(cs, snapshot): """Get a volume snapshot by name or ID.""" return utils.find_resource(cs.volume_snapshots, snapshot) @@ -186,7 +181,7 @@ def do_list(cs, args): @utils.service_type('volume') def do_show(cs, args): """Show details about a volume.""" - volume = _find_volume(cs, args.volume) + volume = utils.find_volume(cs, args.volume) _print_volume(volume) @@ -281,7 +276,7 @@ def do_create(cs, args): @utils.service_type('volume') def do_delete(cs, args): """Remove a volume.""" - volume = _find_volume(cs, args.volume) + volume = utils.find_volume(cs, args.volume) volume.delete() @@ -290,7 +285,7 @@ def do_delete(cs, args): @utils.service_type('volume') def do_force_delete(cs, args): """Attempt forced removal of a volume, regardless of its state.""" - volume = _find_volume(cs, args.volume) + volume = utils.find_volume(cs, args.volume) volume.force_delete() @@ -303,7 +298,7 @@ def do_force_delete(cs, args): @utils.service_type('volume') def do_reset_state(cs, args): """Explicitly update the state of a volume.""" - volume = _find_volume(cs, args.volume) + volume = utils.find_volume(cs, args.volume) volume.reset_state(args.state) @@ -322,7 +317,7 @@ def do_rename(cs, args): kwargs['display_name'] = args.display_name if args.display_description is not None: kwargs['display_description'] = args.display_description - _find_volume(cs, args.volume).update(**kwargs) + utils.find_volume(cs, args.volume).update(**kwargs) @utils.arg('volume', @@ -340,7 +335,7 @@ def do_rename(cs, args): @utils.service_type('volume') def do_metadata(cs, args): """Set or Delete metadata on a volume.""" - volume = _find_volume(cs, args.volume) + volume = utils.find_volume(cs, args.volume) metadata = _extract_metadata(args) if args.action == 'set': @@ -405,9 +400,9 @@ def do_snapshot_show(cs, args): _print_volume_snapshot(snapshot) -@utils.arg('volume_id', - metavar='', - help='ID of the volume to snapshot') +@utils.arg('volume', + metavar='', + help='Name or ID of the volume to snapshot') @utils.arg('--force', metavar='', help='Optional flag to indicate whether ' @@ -433,7 +428,8 @@ def do_snapshot_show(cs, args): @utils.service_type('volume') def do_snapshot_create(cs, args): """Add a new snapshot.""" - snapshot = cs.volume_snapshots.create(args.volume_id, + volume = utils.find_volume(cs, args.volume) + snapshot = cs.volume_snapshots.create(volume.id, args.force, args.display_name, args.display_description) @@ -724,7 +720,7 @@ def _find_volume_type(cs, vtype): @utils.service_type('volume') def do_upload_to_image(cs, args): """Upload volume to image service as image.""" - volume = _find_volume(cs, args.volume) + volume = utils.find_volume(cs, args.volume) _print_volume_image(volume.upload_to_image(args.force, args.image_name, args.container_format, @@ -732,7 +728,7 @@ def do_upload_to_image(cs, args): @utils.arg('volume', metavar='', - help='ID of the volume to backup.') + help='Name or ID of the volume to backup.') @utils.arg('--container', metavar='', help='Optional Backup container name. (Default=None)', default=None) @@ -745,12 +741,13 @@ def do_upload_to_image(cs, args): @utils.service_type('volume') def do_backup_create(cs, args): """Creates a backup.""" - backup = cs.backups.create(args.volume, + volume = utils.find_volume(cs, args.volume) + backup = cs.backups.create(volume.id, args.container, args.display_name, args.display_description) - info = {"volume_id": args.volume} + info = {"volume_id": volume.id} info.update(backup._info) if 'links' in info: @@ -793,25 +790,29 @@ def do_backup_delete(cs, args): @utils.arg('backup', metavar='', help='ID of the backup to restore.') -@utils.arg('--volume-id', metavar='', - help='Optional ID of the volume to restore to.', +@utils.arg('--volume-id', metavar='', + help='Optional ID(or name) of the volume to restore to.', default=None) @utils.service_type('volume') def do_backup_restore(cs, args): """Restore a backup.""" - cs.restores.restore(args.backup, - args.volume_id) + if args.volume: + volume_id = utils.find_volume(cs, args.volume).id + else: + volume_id = None + cs.restores.restore(args.backup, volume_id) @utils.arg('volume', metavar='', - help='ID of the volume to transfer.') + help='Name or ID of the volume to transfer.') @utils.arg('--display-name', metavar='', help='Optional transfer name. (Default=None)', default=None) @utils.service_type('volume') def do_transfer_create(cs, args): """Creates a volume transfer.""" - transfer = cs.transfers.create(args.volume, + volume = utils.find_volume(cs, args.volume) + transfer = cs.transfers.create(volume.id, args.display_name) info = dict() info.update(transfer._info) @@ -880,7 +881,7 @@ def do_transfer_show(cs, args): @utils.service_type('volume') def do_extend(cs, args): """Attempt to extend the size of an existing volume.""" - volume = _find_volume(cs, args.volume) + volume = utils.find_volume(cs, args.volume) cs.volumes.extend(volume, args.new_size) diff --git a/cinderclient/v2/shell.py b/cinderclient/v2/shell.py index a1f9ad32b..f1e45c46d 100644 --- a/cinderclient/v2/shell.py +++ b/cinderclient/v2/shell.py @@ -58,11 +58,6 @@ def _poll_for_status(poll_fn, obj_id, action, final_ok_states, time.sleep(poll_period) -def _find_volume(cs, volume): - """Get a volume by name or ID.""" - return utils.find_resource(cs.volumes, volume) - - def _find_volume_snapshot(cs, snapshot): """Get a volume snapshot by name or ID.""" return utils.find_resource(cs.volume_snapshots, snapshot) @@ -185,7 +180,7 @@ def do_list(cs, args): def do_show(cs, args): """Show details about a volume.""" info = dict() - volume = _find_volume(cs, args.volume) + volume = utils.find_volume(cs, args.volume) info.update(volume._info) info.pop('links', None) @@ -308,7 +303,7 @@ def do_create(cs, args): @utils.service_type('volumev2') def do_delete(cs, args): """Remove a volume.""" - volume = _find_volume(cs, args.volume) + volume = utils.find_volume(cs, args.volume) volume.delete() @@ -318,7 +313,7 @@ def do_delete(cs, args): @utils.service_type('volumev2') def do_force_delete(cs, args): """Attempt forced removal of a volume, regardless of its state.""" - volume = _find_volume(cs, args.volume) + volume = utils.find_volume(cs, args.volume) volume.force_delete() @@ -331,7 +326,7 @@ def do_force_delete(cs, args): @utils.service_type('volumev2') def do_reset_state(cs, args): """Explicitly update the state of a volume.""" - volume = _find_volume(cs, args.volume) + volume = utils.find_volume(cs, args.volume) volume.reset_state(args.state) @@ -361,7 +356,7 @@ def do_rename(cs, args): elif args.description is not None: kwargs['description'] = args.description - _find_volume(cs, args.volume).update(**kwargs) + utils.find_volume(cs, args.volume).update(**kwargs) @utils.arg('volume', @@ -380,7 +375,7 @@ def do_rename(cs, args): @utils.service_type('volumev2') def do_metadata(cs, args): """Set or Delete metadata on a volume.""" - volume = _find_volume(cs, args.volume) + volume = utils.find_volume(cs, args.volume) metadata = _extract_metadata(args) if args.action == 'set': @@ -451,9 +446,9 @@ def do_snapshot_show(cs, args): _print_volume_snapshot(snapshot) -@utils.arg('volume-id', - metavar='', - help='ID of the volume to snapshot') +@utils.arg('volume', + metavar='', + help='Name or ID of the volume to snapshot') @utils.arg('--force', metavar='', help='Optional flag to indicate whether ' @@ -485,7 +480,8 @@ def do_snapshot_create(cs, args): if args.display_description is not None: args.description = args.display_description - snapshot = cs.volume_snapshots.create(args.volume_id, + volume = utils.find_volume(cs, args.volume) + snapshot = cs.volume_snapshots.create(volume.id, args.force, args.name, args.description) @@ -795,7 +791,7 @@ def _find_volume_type(cs, vtype): @utils.service_type('volumev2') def do_upload_to_image(cs, args): """Upload volume to image service as image.""" - volume = _find_volume(cs, args.volume) + volume = utils.find_volume(cs, args.volume) _print_volume_image(volume.upload_to_image(args.force, args.image_name, args.container_format, @@ -817,7 +813,7 @@ def do_migrate(cs, args): @utils.arg('volume', metavar='', - help='ID of the volume to backup.') + help='Name or ID of the volume to backup.') @utils.arg('--container', metavar='', help='Optional backup container name. (Default=None)', default=None) @@ -841,12 +837,13 @@ def do_backup_create(cs, args): if args.display_description is not None: args.description = args.display_description - backup = cs.backups.create(args.volume, + volume = utils.find_volume(cs, args.volume) + backup = cs.backups.create(volume.id, args.container, args.name, args.description) - info = {"volume_id": args.volume} + info = {"volume_id": volume.id} info.update(backup._info) if 'links' in info: @@ -887,18 +884,21 @@ def do_backup_delete(cs, args): @utils.arg('backup', metavar='', help='ID of the backup to restore.') -@utils.arg('--volume-id', metavar='', - help='Optional ID of the volume to restore to.', +@utils.arg('--volume-id', metavar='', + help='Optional ID(or name) of the volume to restore to.', default=None) @utils.service_type('volumev2') def do_backup_restore(cs, args): """Restore a backup.""" - cs.restores.restore(args.backup, - args.volume_id) + if args.volume: + volume_id = utils.find_volume(cs, args.volume).id + else: + volume_id = None + cs.restores.restore(args.backup, volume_id) @utils.arg('volume', metavar='', - help='ID of the volume to transfer.') + help='Name or ID of the volume to transfer.') @utils.arg('--name', metavar='', default=None, @@ -911,7 +911,8 @@ def do_transfer_create(cs, args): if args.display_name is not None: args.name = args.display_name - transfer = cs.transfers.create(args.volume, + volume = utils.find_volume(cs, args.volume) + transfer = cs.transfers.create(volume.id, args.name) info = dict() info.update(transfer._info) @@ -974,7 +975,7 @@ def do_transfer_show(cs, args): @utils.service_type('volumev2') def do_extend(cs, args): """Attempt to extend the size of an existing volume.""" - volume = _find_volume(cs, args.volume) + volume = utils.find_volume(cs, args.volume) cs.volumes.extend(volume, args.new_size)