Disable progress bar if image is piped into client

Previously, running:

    cat something.img | glance image-create --progress --container-format=bare --disk-format=raw

or

    cat something.img | glance --os-image-api-version 2 image-upload --progress <image id>

would result in an error. This error was caused by the length of the
input being unknown, so the overall progress cannot be found.

This patch disables the progress bar whenever the size of the input file
cannot be determined.

Change-Id: I6bfef7441864b638194126880241cc2c96d5b18b
Closes-Bug: #1402746
This commit is contained in:
Louis Taylor
2014-12-16 17:59:28 +00:00
parent df02ee8e2a
commit 9054324442
2 changed files with 10 additions and 4 deletions

View File

@@ -225,9 +225,12 @@ def do_image_create(gc, args):
# Only show progress bar for local image files
if fields.get('data') and args.progress:
filesize = utils.get_file_size(fields['data'])
fields['data'] = progressbar.VerboseFileWrapper(
fields['data'], filesize
)
if filesize is not None:
# NOTE(kragniz): do not show a progress bar if the size of the
# input is unknown (most likely a piped input)
fields['data'] = progressbar.VerboseFileWrapper(
fields['data'], filesize
)
image = gc.images.create(**fields)
_image_show(image, args.human_readable)

View File

@@ -254,7 +254,10 @@ def do_image_upload(gc, args):
image_data = utils.get_data_file(args)
if args.progress:
filesize = utils.get_file_size(image_data)
image_data = progressbar.VerboseFileWrapper(image_data, filesize)
if filesize is not None:
# NOTE(kragniz): do not show a progress bar if the size of the
# input is unknown (most likely a piped input)
image_data = progressbar.VerboseFileWrapper(image_data, filesize)
gc.images.upload(args.id, image_data, args.size)