Add volume name arguments

This patch adds volume name arguments to the following subcommands:
 * snapshot-create
 * backup-create
 * backup-restore
 * transfer-create

Fixes bug #1220590

Change-Id: Ib0ff6e62d45abb14fa8c7313511ef6f72befe0d5
This commit is contained in:
Ken'ichi Ohmichi 2013-09-18 16:44:51 +09:00
parent 2ac8f3a337
commit 405702c8c0
3 changed files with 59 additions and 52 deletions
cinderclient

@ -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()):

@ -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='<volume-id>',
help='ID of the volume to snapshot')
@utils.arg('volume',
metavar='<volume>',
help='Name or ID of the volume to snapshot')
@utils.arg('--force',
metavar='<True|False>',
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='<volume>',
help='ID of the volume to backup.')
help='Name or ID of the volume to backup.')
@utils.arg('--container', metavar='<container>',
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='<backup>',
help='ID of the backup to restore.')
@utils.arg('--volume-id', metavar='<volume-id>',
help='Optional ID of the volume to restore to.',
@utils.arg('--volume-id', metavar='<volume>',
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='<volume>',
help='ID of the volume to transfer.')
help='Name or ID of the volume to transfer.')
@utils.arg('--display-name', metavar='<display-name>',
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)

@ -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='<volume-id>',
help='ID of the volume to snapshot')
@utils.arg('volume',
metavar='<volume>',
help='Name or ID of the volume to snapshot')
@utils.arg('--force',
metavar='<True|False>',
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,
@ -803,7 +799,7 @@ def do_upload_to_image(cs, args):
@utils.arg('volume', metavar='<volume>',
help='ID of the volume to backup.')
help='Name or ID of the volume to backup.')
@utils.arg('--container', metavar='<container>',
help='Optional backup container name. (Default=None)',
default=None)
@ -827,12 +823,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:
@ -873,18 +870,21 @@ def do_backup_delete(cs, args):
@utils.arg('backup', metavar='<backup>',
help='ID of the backup to restore.')
@utils.arg('--volume-id', metavar='<volume-id>',
help='Optional ID of the volume to restore to.',
@utils.arg('--volume-id', metavar='<volume>',
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='<volume>',
help='ID of the volume to transfer.')
help='Name or ID of the volume to transfer.')
@utils.arg('--name',
metavar='<name>',
default=None,
@ -897,7 +897,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)
@ -960,7 +961,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)