diff options
author | spisarski <s.pisarski@cablelabs.com> | 2017-05-12 13:59:04 -0600 |
---|---|---|
committer | spisarski <s.pisarski@cablelabs.com> | 2017-05-16 14:21:56 -0600 |
commit | 10c665d7c831cf198ac9e675654693860e602bf9 (patch) | |
tree | b30f75115e80ddc983b9e3555b165992cef234c1 /snaps/openstack/utils | |
parent | 6fd1af82cd7bf41274c4e1620006004b79628759 (diff) |
Added support for offline testing
Expanded the image_metadata used by the tests for overriding default
images for not only supporting 3part images but also to support offline
testing as required by Functest.
JIRA: SNAPS-67
Change-Id: I6975e7b51fa879fe984af64402939c465df95184
Signed-off-by: spisarski <s.pisarski@cablelabs.com>
Diffstat (limited to 'snaps/openstack/utils')
-rw-r--r-- | snaps/openstack/utils/glance_utils.py | 30 | ||||
-rw-r--r-- | snaps/openstack/utils/tests/glance_utils_tests.py | 39 |
2 files changed, 47 insertions, 22 deletions
diff --git a/snaps/openstack/utils/glance_utils.py b/snaps/openstack/utils/glance_utils.py index ca9c490..722cf4c 100644 --- a/snaps/openstack/utils/glance_utils.py +++ b/snaps/openstack/utils/glance_utils.py @@ -105,23 +105,27 @@ def __create_image_v1(glance, image_settings): """ created_image = None + # TODO/REFACTOR - replace each call with one including kwargs if image_settings.url: if image_settings.extra_properties: created_image = glance.images.create( name=image_settings.name, disk_format=image_settings.format, container_format="bare", - location=image_settings.url, properties=image_settings.extra_properties) + location=image_settings.url, properties=image_settings.extra_properties, + is_public=image_settings.public) else: created_image = glance.images.create(name=image_settings.name, disk_format=image_settings.format, - container_format="bare", location=image_settings.url) + container_format="bare", location=image_settings.url, + is_public=image_settings.public) elif image_settings.image_file: - image_file = file_utils.get_file(image_settings.image_file) + image_file = open(image_settings.image_file, 'rb') if image_settings.extra_properties: created_image = glance.images.create( name=image_settings.name, disk_format=image_settings.format, container_format="bare", data=image_file, - properties=image_settings.extra_properties) + properties=image_settings.extra_properties, is_public=image_settings.public) else: created_image = glance.images.create( - name=image_settings.name, disk_format=image_settings.format, container_format="bare", data=image_file) + name=image_settings.name, disk_format=image_settings.format, container_format="bare", data=image_file, + is_public=image_settings.public) return Image(name=image_settings.name, image_id=created_image.id, size=created_image.size, properties=created_image.properties) @@ -135,13 +139,13 @@ def __create_image_v2(glance, image_settings): :return: the OpenStack image object :raise Exception if using a file and it cannot be found """ - cleanup_file = False + cleanup_temp_file = False if image_settings.image_file: image_filename = image_settings.image_file elif image_settings.url: image_file = file_utils.download(image_settings.url, '/tmp', str(uuid.uuid4())) image_filename = image_file.name - cleanup_file = True + cleanup_temp_file = True else: raise Exception('Filename or URL of image not configured') @@ -151,19 +155,23 @@ def __create_image_v2(glance, image_settings): kwargs['name'] = image_settings.name kwargs['disk_format'] = image_settings.format kwargs['container_format'] = 'bare' + + if image_settings.public: + kwargs['visibility'] = 'public' + if image_settings.extra_properties: kwargs.update(image_settings.extra_properties) created_image = glance.images.create(**kwargs) - image_file = file_utils.get_file(image_filename) + image_file = open(image_filename, 'rb') glance.images.upload(created_image['id'], image_file) - except Exception as e: + except: logger.error('Unexpected exception creating image. Rolling back') if created_image: delete_image(glance, created_image) - raise e + raise finally: - if cleanup_file: + if cleanup_temp_file: os.remove(image_filename) updated_image = glance.images.get(created_image['id']) diff --git a/snaps/openstack/utils/tests/glance_utils_tests.py b/snaps/openstack/utils/tests/glance_utils_tests.py index eb8e291..5fa585c 100644 --- a/snaps/openstack/utils/tests/glance_utils_tests.py +++ b/snaps/openstack/utils/tests/glance_utils_tests.py @@ -12,6 +12,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +import logging import os import shutil import uuid @@ -26,6 +27,9 @@ from snaps.openstack.utils import glance_utils __author__ = 'spisarski' +logger = logging.getLogger('glance_utils_tests') + + class GlanceSmokeTests(OSComponentTestCase): """ Tests to ensure that the neutron client can communicate with the cloud @@ -64,6 +68,10 @@ class GlanceUtilsTests(OSComponentTestCase): self.image_name = self.__class__.__name__ + '-' + str(guid) self.image = None self.glance = glance_utils.glance_client(self.os_creds) + if self.image_metadata: + self.glance_test_meta = self.image_metadata.get('glance_tests') + else: + self.glance_test_meta = dict() self.tmp_dir = 'tmp/' + str(guid) if not os.path.exists(self.tmp_dir): @@ -81,27 +89,36 @@ class GlanceUtilsTests(OSComponentTestCase): def test_create_image_minimal_url(self): """ - Tests the glance_utils.create_image() function with a URL + Tests the glance_utils.create_image() function with a URL unless the self.glance_test_meta has configured a + file to be used. """ - os_image_settings = openstack_tests.cirros_image_settings(name=self.image_name) + if 'disk_file' not in self.glance_test_meta: + os_image_settings = openstack_tests.cirros_image_settings(name=self.image_name, + image_metadata=self.glance_test_meta) - self.image = glance_utils.create_image(self.glance, os_image_settings) - self.assertIsNotNone(self.image) + self.image = glance_utils.create_image(self.glance, os_image_settings) + self.assertIsNotNone(self.image) - self.assertEqual(self.image_name, self.image.name) + self.assertEqual(self.image_name, self.image.name) - image = glance_utils.get_image(self.glance, os_image_settings.name) - self.assertIsNotNone(image) + image = glance_utils.get_image(self.glance, os_image_settings.name) + self.assertIsNotNone(image) - validation_utils.objects_equivalent(self.image, image) + validation_utils.objects_equivalent(self.image, image) + else: + logger.warn('Test not executed as the image metadata requires image files') def test_create_image_minimal_file(self): """ Tests the glance_utils.create_image() function with a file """ - url_image_settings = openstack_tests.cirros_image_settings('foo') - image_file = file_utils.download(url_image_settings.url, self.tmp_dir) - file_image_settings = openstack_tests.file_image_test_settings(name=self.image_name, file_path=image_file.name) + if 'disk_file' not in self.glance_test_meta: + url_image_settings = openstack_tests.cirros_image_settings(name='foo', image_metadata=self.glance_test_meta) + image_file_name = file_utils.download(url_image_settings.url, self.tmp_dir).name + else: + image_file_name = self.glance_test_meta['disk_file'] + + file_image_settings = openstack_tests.file_image_test_settings(name=self.image_name, file_path=image_file_name) self.image = glance_utils.create_image(self.glance, file_image_settings) self.assertIsNotNone(self.image) |