From 2713ca1bdce9ae5d01fa04722bb4d55b3fa1b12d Mon Sep 17 00:00:00 2001 From: Adam Gandelman Date: Mon, 25 Jun 2012 19:04:28 -0700 Subject: [PATCH] Allow image upload from local file to v1 API Allow an image to be read from a local file as an alternative to stdin (which remains the default). Change-Id: I81070ded9c505df7924c4efd5ae54cf3c0fa534d --- glanceclient/v1/shell.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/glanceclient/v1/shell.py b/glanceclient/v1/shell.py index f7228aa..e8148c0 100644 --- a/glanceclient/v1/shell.py +++ b/glanceclient/v1/shell.py @@ -66,6 +66,10 @@ def do_image_show(gc, args): ' For example, if the image data is stored in the filesystem' ' local to the glance server at \'/usr/share/image.tar.gz\',' ' you would specify \'file:///usr/share/image.tar.gz\'.')) +@utils.arg('--file', metavar='', + help=('Local file that contains disk image to be uploaded during' + ' creation or update. Alternatively, images can be passed to' + ' the client via stdin.')) @utils.arg('--checksum', metavar='', help='Hash of image data used Glance can use for verification.') @utils.arg('--copy-from', metavar='', @@ -96,7 +100,10 @@ def do_image_create(gc, args): fields = dict(filter(lambda x: x[0] in CREATE_PARAMS, fields.items())) if 'location' not in fields and 'copy_from' not in fields: - fields['data'] = sys.stdin + if args.file: + fields['data'] = open(args.file, 'r') + else: + fields['data'] = sys.stdin image = gc.images.create(**fields) _image_show(image) @@ -152,7 +159,10 @@ def do_image_update(gc, args): fields = dict(filter(lambda x: x[0] in UPDATE_PARAMS, fields.items())) if 'location' not in fields and 'copy_from' not in fields: - fields['data'] = sys.stdin + if args.fields: + fields['data'] = open(args.file, 'r') + else: + fields['data'] = sys.stdin image = gc.images.update(image_id, **fields) _image_show(image)