Show error on trying to upload to non-queued image
Previously, attempting to upload data to an image which has a status which is not 'queued' would appear to succeed, when the data has actually never been sent to the glance server. To the user, it appeared that their request was successful. This patch adds a check for incoming image data on the 'image-update' command, and exits with an error if the specified image does not have the status 'queued'. Examples: $ cat os.img | glance image-update d50b0236-b27c-412a-91b9-18ceafa9cc5a Unable to upload image data to an image which is active. $ glance image-update --file os.img d50b0236-b27c-412a-91b9-18ceafa9cc5a Unable to upload image data to an image which is killed. Change-Id: I91bbd7f86d5851a5e35946c711dba1932283ed79 Closes-Bug: #1395084
This commit is contained in:
parent
a3eaafefbd
commit
af29e0a1b0
|
@ -17,6 +17,7 @@ from __future__ import print_function
|
|||
|
||||
import copy
|
||||
import functools
|
||||
import os
|
||||
import six
|
||||
|
||||
from oslo_utils import encodeutils
|
||||
|
@ -244,6 +245,17 @@ def do_image_create(gc, args):
|
|||
_image_show(image, args.human_readable)
|
||||
|
||||
|
||||
def _is_image_data_provided(args):
|
||||
"""Return True if some image data has probably been provided by the user"""
|
||||
# NOTE(kragniz): Check stdin works, then check is there is any data
|
||||
# on stdin or a filename has been provided with --file
|
||||
try:
|
||||
os.fstat(0)
|
||||
except OSError:
|
||||
return False
|
||||
return not sys.stdin.isatty() or args.file or args.copy_from
|
||||
|
||||
|
||||
@utils.arg('image', metavar='<IMAGE>', help='Name or ID of image to modify.')
|
||||
@utils.arg('--name', metavar='<NAME>',
|
||||
help='Name of image.')
|
||||
|
@ -322,6 +334,12 @@ def do_image_update(gc, args):
|
|||
fields['data'], filesize
|
||||
)
|
||||
|
||||
elif _is_image_data_provided(args):
|
||||
# NOTE(kragniz): Exit with an error if the status is not queued
|
||||
# and image data was provided
|
||||
utils.exit('Unable to upload image data to an image which '
|
||||
'is %s.' % image.status)
|
||||
|
||||
image = gc.images.update(image, purge_props=args.purge_props, **fields)
|
||||
_image_show(image, args.human_readable)
|
||||
|
||||
|
|
Loading…
Reference in New Issue