From dcc4e9a5ddec55b4c79b69df2d3f2ed7a0e4d985 Mon Sep 17 00:00:00 2001 From: Martin Kopec Date: Tue, 10 Jul 2018 11:52:40 +0000 Subject: [PATCH] Fix http_image uploading to glance image.http_image was during the refactoring mistaken for an image which is uploaded to glance and that caused the issues described in the linked story. image.http_image is a tempest option which defines http accessible image. It can be also in a compressed format, so it can't be uploaded to glance before it's unpacked first. The patch introduces a new python-tempestconf option in tempest.conf defining an image which will be uploaded to glance. Story: 2002931 Task: 22918 Change-Id: Idc03155b345d341903c2941f41ec4677a503b531 --- config_tempest/main.py | 9 +++++++-- config_tempest/services/image.py | 12 ++++++++++-- config_tempest/tests/services/test_image.py | 3 ++- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/config_tempest/main.py b/config_tempest/main.py index c3d8f204..8d1a32a3 100755 --- a/config_tempest/main.py +++ b/config_tempest/main.py @@ -139,7 +139,7 @@ def read_deployer_input(deployer_input_file, conf): conf.set(section, key, value, priority=True) -def set_options(conf, deployer_input, non_admin, overrides=[], +def set_options(conf, deployer_input, non_admin, image_path, overrides=[], test_accounts=None, cloud_creds=None, no_default_deployer=False): """Set options in conf provided by different source. @@ -155,6 +155,8 @@ def set_options(conf, deployer_input, non_admin, overrides=[], :param deployer_input: Path to the deployer inut file :type deployer_input: string :type non_admin: boolean + :param image_path: An image to be uploaded to glance + :type image_path: string :param overrides: list of tuples: [(section, key, value)] :type overrides: list :param test_accounts: Path to the accounts.yaml file @@ -163,6 +165,9 @@ def set_options(conf, deployer_input, non_admin, overrides=[], :type cloud_creds: dict """ load_basic_defaults(conf) + # image.image_path is a python-tempestconf option which defines which + # image will be uploaded to glance + conf.set('image', 'image_path', image_path) if deployer_input and os.path.isfile(deployer_input): LOG.info("Reading deployer input from file {}".format( @@ -387,6 +392,7 @@ def config_tempest(**kwargs): conf = TempestConf(write_credentials=write_credentials) set_options(conf, kwargs.get('deployer_input'), kwargs.get('non_admin', False), + kwargs.get('image_path', C.DEFAULT_IMAGE), kwargs.get('overrides', []), kwargs.get('test_accounts'), kwargs.get('cloud_creds')) @@ -401,7 +407,6 @@ def config_tempest(**kwargs): flavors.create_tempest_flavors() image = services.get_service('image') - conf.set('image', 'http_image', kwargs.get('image_path', C.DEFAULT_IMAGE)) image.set_image_preferences(kwargs.get('image_disk_format', C.DEFAULT_IMAGE_FORMAT), kwargs.get('non_admin', False)) diff --git a/config_tempest/services/image.py b/config_tempest/services/image.py index 498e903c..602dd000 100644 --- a/config_tempest/services/image.py +++ b/config_tempest/services/image.py @@ -45,8 +45,16 @@ class ImageService(VersionedService): # The option is heavily used in CI and it's also usefull for refstack, # because we don't have to specify overrides. if 'cirros' in conf.get_defaulted('image', - 'http_image').rsplit('/')[-1]: + 'image_path').rsplit('/')[-1]: conf.set('validation', 'image_ssh_user', 'cirros') + # image.http_image is a tempest option which defines 'http accessible + # image', it can be in a compressed format so it can't be mistaken + # for an image which will be uploaded to the glance. + # image.http_image and image.image_path can be 2 different images. + # If image.http_image wasn't set as an override, it will be set to + # image.image_path + conf.set('image', 'http_image', conf.get_defaulted('image', + 'image_path')) def set_versions(self): super(ImageService, self).set_versions(top_level=False) @@ -60,7 +68,7 @@ class ImageService(VersionedService): :type conf: TempestConf object """ img_dir = os.path.join(conf.get("scenario", "img_dir")) - image_path = conf.get_defaulted('image', 'http_image') + image_path = conf.get_defaulted('image', 'image_path') img_path = os.path.join(img_dir, os.path.basename(image_path)) name = image_path[image_path.rfind('/') + 1:] diff --git a/config_tempest/tests/services/test_image.py b/config_tempest/tests/services/test_image.py index 7041b6a5..5250a613 100644 --- a/config_tempest/tests/services/test_image.py +++ b/config_tempest/tests/services/test_image.py @@ -43,7 +43,8 @@ class TestImageService(BaseServiceTest): self.dir = "/img/" self.conf = TempestConf() self.conf.set("scenario", "img_dir", self.dir) - self.conf.set("image", "http_image", "my_image.qcow2") + self.conf.set("image", "image_path", "my_image.qcow2") + self.conf.set("image", "http_image", "http_image.qcow2") @mock.patch('config_tempest.services.image.ImageService' '.find_or_upload_image')