diff options
Diffstat (limited to 'cinderclient/v2')
| -rw-r--r-- | cinderclient/v2/shell.py | 43 | ||||
| -rw-r--r-- | cinderclient/v2/volumes.py | 28 |
2 files changed, 70 insertions, 1 deletions
diff --git a/cinderclient/v2/shell.py b/cinderclient/v2/shell.py index 1e0ddb3..95db39d 100644 --- a/cinderclient/v2/shell.py +++ b/cinderclient/v2/shell.py @@ -64,3 +64,46 @@ def _treeizeAvailabilityZone(zone): return result +# TODO(e0ne): remove copy-paste of this function in a next cinderclient release +def _print_volume_image(image): + utils.print_dict(image[1]['os-volume_upload_image']) + + +@utils.arg('volume', + metavar='<volume>', + help='Name or ID of volume to snapshot.') +@utils.arg('--force', + metavar='<True|False>', + const=True, + nargs='?', + default=False, + help='Enables or disables upload of ' + 'a volume that is attached to an instance. ' + 'Default=False.') +@utils.arg('--container-format', + metavar='<container-format>', + default='bare', + help='Container format type. ' + 'Default is bare.') +@utils.arg('--container_format', + help=argparse.SUPPRESS) +@utils.arg('--disk-format', + metavar='<disk-format>', + default='raw', + help='Disk format type. ' + 'Default is raw.') +@utils.arg('--disk_format', + help=argparse.SUPPRESS) +@utils.arg('image_name', + metavar='<image-name>', + help='The new image name.') +@utils.arg('--image_name', + help=argparse.SUPPRESS) +@utils.service_type('volumev2') +def do_upload_to_image(cs, args): + """Uploads volume to Image Service as an image.""" + volume = utils.find_volume(cs, args.volume) + _print_volume_image(volume.upload_to_image(args.force, + args.image_name, + args.container_format, + args.disk_format)) diff --git a/cinderclient/v2/volumes.py b/cinderclient/v2/volumes.py index 093b911..37c87c3 100644 --- a/cinderclient/v2/volumes.py +++ b/cinderclient/v2/volumes.py @@ -15,5 +15,31 @@ """Volume interface (v2 extension).""" -from cinderclient.v3.volumes import * # flake8: noqa +from cinderclient import api_versions +from cinderclient.v3 import volumes + +class Volume(volumes.Volume): + def upload_to_image(self, force, image_name, container_format, + disk_format): + """Upload a volume to image service as an image.""" + return self.manager.upload_to_image(self, force, image_name, + container_format, disk_format) + + +class VolumeManager(volumes.VolumeManager): + resource_class = Volume + + @api_versions.wraps("2.0") + def upload_to_image(self, volume, force, image_name, container_format, + disk_format): + """Upload volume to image service as image. + + :param volume: The :class:`Volume` to upload. + """ + return self._action('os-volume_upload_image', + volume, + {'force': force, + 'image_name': image_name, + 'container_format': container_format, + 'disk_format': disk_format}) |
