Support image upload from a file location
The current VMTP supports uploading an image from a specified URL. This commit will add the support to upload and create a glance image from a specified file location. Change-Id: I85698934d1eb4bf2231a4f0364c61f03fbd1a5fd
This commit is contained in:
parent
70d915212a
commit
5da965319d
@ -45,6 +45,9 @@ dns_nameservers: [ '8.8.8.8' ]
|
||||
#
|
||||
# A link to a Ubuntu Server 14.04 qcow2 image can be used here:
|
||||
# https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img
|
||||
#
|
||||
# To upload the image as a file, prepend it with file:// like below
|
||||
# file://<location of the image>
|
||||
vm_image_url: ''
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
|
@ -42,10 +42,20 @@ class Compute(object):
|
||||
'''
|
||||
retry = 0
|
||||
try:
|
||||
# Upload the image
|
||||
img = glance_client.images.create(
|
||||
name=str(final_image_name), disk_format="qcow2", container_format="bare",
|
||||
is_public=True, copy_from=image_url)
|
||||
# check image is file/url based.
|
||||
file_prefix = "file://"
|
||||
if image_url.startswith(file_prefix):
|
||||
image_location = image_url.split(file_prefix)[1]
|
||||
with open(image_location) as f_image:
|
||||
img = glance_client.images.create(
|
||||
name=str(final_image_name), disk_format="qcow2",
|
||||
container_format="bare", is_public=True, data=f_image)
|
||||
else:
|
||||
# Upload the image
|
||||
img = glance_client.images.create(
|
||||
name=str(final_image_name), disk_format="qcow2",
|
||||
container_format="bare", is_public=True,
|
||||
copy_from=image_url)
|
||||
|
||||
# Check for the image in glance
|
||||
while img.status in ['queued', 'saving'] and retry < retry_count:
|
||||
@ -61,11 +71,15 @@ class Compute(object):
|
||||
print "Cannot upload image without admin access. Please make sure the "\
|
||||
"image is uploaded and is either public or owned by you."
|
||||
return False
|
||||
except IOError:
|
||||
# catch the exception for file based errors.
|
||||
print "Failed while uploading the image. Please make sure the " \
|
||||
"image at the specified location %s is correct." % image_url
|
||||
return False
|
||||
except Exception:
|
||||
print "Failed while uploading the image, please make sure the cloud "\
|
||||
"under test has the access to URL: %s." % image_url
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def delete_image(self, glance_client, img_name):
|
||||
|
@ -822,7 +822,8 @@ def parse_opts_from_cli():
|
||||
|
||||
parser.add_argument('--vm-image-url', dest='vm_image_url',
|
||||
action='store',
|
||||
help='URL to a Linux image in qcow2 format that can be downloaded from',
|
||||
help='URL to a Linux image in qcow2 format that can be downloaded from'
|
||||
'or location of the image file with prefix file://',
|
||||
metavar='<url_to_image>')
|
||||
|
||||
parser.add_argument('--test-description', dest='test_description',
|
||||
|
Loading…
x
Reference in New Issue
Block a user