diff options
Diffstat (limited to 'doctor_tests/image.py')
-rw-r--r-- | doctor_tests/image.py | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/doctor_tests/image.py b/doctor_tests/image.py new file mode 100644 index 00000000..2e313e12 --- /dev/null +++ b/doctor_tests/image.py @@ -0,0 +1,74 @@ +############################################################################## +# Copyright (c) 2017 ZTE Corporation and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## +import os +import urllib.request + +from oslo_config import cfg + +from doctor_tests.identity_auth import get_session +from doctor_tests.os_clients import glance_client + +OPTS = [ + cfg.StrOpt('image_name', + default=os.environ.get('IMAGE_NAME', 'cirros'), + help='the name of test image', + required=True), + cfg.StrOpt('image_format', + default='qcow2', + help='the format of test image', + required=True), + cfg.StrOpt('image_filename', + default='cirros.img', + help='the name of image file', + required=True), + cfg.StrOpt('image_download_url', + default='https://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-disk.img', + help='the url where to get the image', + required=True), +] + + +class Image(object): + + def __init__(self, conf, log): + self.conf = conf + self.log = log + self.glance = \ + glance_client(conf.glance_version, get_session()) + self.use_existing_image = False + self.image = None + + def create(self): + self.log.info('image create start......') + + images = {image.name: image for image in self.glance.images.list()} + if self.conf.image_name not in images: + if not os.path.exists(self.conf.image_filename): + resp = urllib.request.urlopen(self.conf.image_download_url) + with open(self.conf.image_filename, "wb") as file: + file.write(resp.read()) + self.image = self.glance.images.create(name=self.conf.image_name, + disk_format=self.conf.image_format, + container_format="bare", + visibility="public") + self.glance.images.upload(self.image['id'], + open(self.conf.image_filename, 'rb')) + else: + self.use_existing_image = True + self.image = images[self.conf.image_name] + + self.log.info('image create end......') + + def delete(self): + self.log.info('image delete start.......') + + if not self.use_existing_image and self.image: + self.glance.images.delete(self.image['id']) + + self.log.info('image delete end.......') |