def testDownloadBadDir(self): """ Tests the file_utils.download() method when given a bad URL """ with self.assertRaises(Exception): file_utils.download(openstack_tests.CIRROS_DEFAULT_IMAGE_URL, '/foo/bar')
def testDownloadBadUrl(self): """ Tests the file_utils.download() method when given a bad URL """ with self.assertRaises(Exception): file_utils.download('http://bunkUrl.com/foo/bar.iso', self.test_dir)
def test_create_image_clean_file(self): """ Tests the creation of an OpenStack image from a file. """ if not self.image_settings.image_file and self.image_settings.url: # Download the file of the image image_file_name = file_utils.download(self.image_settings.url, self.tmp_dir).name else: image_file_name = self.image_settings.image_file if image_file_name: file_image_settings = openstack_tests.file_image_test_settings( name=self.image_name, file_path=image_file_name) self.image_creator = create_image.OpenStackImage( self.os_creds, file_image_settings) created_image = self.image_creator.create() self.assertIsNotNone(created_image) self.assertEqual(self.image_name, created_image.name) retrieved_image = glance_utils.get_image( self.glance, image_settings=file_image_settings) self.assertIsNotNone(retrieved_image) self.assertEqual(self.image_creator.get_image().size, retrieved_image.size) self.assertEqual(get_image_size(file_image_settings), retrieved_image.size) self.assertEqual(created_image.name, retrieved_image.name) self.assertEqual(created_image.id, retrieved_image.id) else: logger.warn( 'Test not executed as the image metadata requires image files')
def __create_image_v2(glance, image_settings): """ Creates and returns OpenStack image object with an external URL :param glance: the glance client v2 :param image_settings: the image settings object :return: the OpenStack image object :raise GlanceException or IOException or URLError """ cleanup_temp_file = False image_file = None if image_settings.image_file is not None: image_filename = image_settings.image_file elif image_settings.url: file_name = str(uuid.uuid4()) try: image_file = file_utils.download( image_settings.url, './tmp', file_name) image_filename = image_file.name except: if image_file: os.remove(image_file.name) raise cleanup_temp_file = True else: raise GlanceException('Filename or URL of image not configured') os_image = None try: kwargs = dict() 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) os_image = glance.images.create(**kwargs) image_file = open(os.path.expanduser(image_filename), 'rb') glance.images.upload(os_image['id'], image_file) except: logger.error('Unexpected exception creating image. Rolling back') if os_image: delete_image(glance, Image( name=os_image['name'], image_id=os_image['id'], size=os_image['size'], properties=os_image.get('properties'))) raise finally: if image_file: logger.debug('Closing file %s', image_file.name) image_file.close() if cleanup_temp_file: logger.info('Removing file %s', image_file.name) os.remove(image_filename) return get_image_by_id(glance, os_image['id'])
def testCirrosImageDownload(self): """ Tests the file_utils.download() method when given a good Cirros QCOW2 URL """ image_file = file_utils.download( openstack_tests.CIRROS_DEFAULT_IMAGE_URL, self.test_dir) self.assertIsNotNone(image_file) self.assertTrue( image_file.name.endswith("cirros-0.3.4-x86_64-disk.img")) self.assertTrue(image_file.name.startswith(self.test_dir))
def test_create_image_minimal_file(self): """ Tests the glance_utils.create_image() function with a file """ 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) self.assertEqual(self.image_name, self.image.name) image = glance_utils.get_image(self.glance, image_settings=file_image_settings) self.assertIsNotNone(image) validation_utils.objects_equivalent(self.image, image)
def test_create_three_part_image_from_file_3_creators(self): """ Tests the creation of a 3-part OpenStack image from files. """ file_only = False # Set properties properties = {} if self.glance_test_meta: if 'extra_properties' in self.glance_test_meta: properties = self.glance_test_meta['extra_properties'] if 'disk_file' in self.glance_test_meta: file_only = True # Create the kernel image kernel_file_name = None kernel_url = openstack_tests.CIRROS_DEFAULT_KERNEL_IMAGE_URL if 'kernel_file' in self.glance_test_meta: kernel_file_name = self.glance_test_meta['kernel_file'] elif 'kernel_url' in self.glance_test_meta: kernel_url = self.glance_test_meta['kernel_url'] else: kernel_url = openstack_tests.CIRROS_DEFAULT_KERNEL_IMAGE_URL if not kernel_file_name and not file_only: kernel_file_name = file_utils.download(kernel_url, self.tmp_dir).name else: logger.warn('Will not download the kernel image.' ' Cannot execute test') return kernel_file_image_settings = openstack_tests.file_image_test_settings( name=self.image_name + '_kernel', file_path=kernel_file_name) self.image_creators.append(create_image.OpenStackImage( self.os_creds, kernel_file_image_settings)) kernel_image = self.image_creators[-1].create() self.assertIsNotNone(kernel_image) self.assertEqual(get_image_size(kernel_file_image_settings), kernel_image.size) # Create the ramdisk image ramdisk_file_name = None ramdisk_url = openstack_tests.CIRROS_DEFAULT_RAMDISK_IMAGE_URL if 'ramdisk_file' in self.glance_test_meta: ramdisk_file_name = self.glance_test_meta['ramdisk_file'] elif 'ramdisk_url' in self.glance_test_meta: ramdisk_url = self.glance_test_meta['ramdisk_url'] if not ramdisk_file_name and not file_only: ramdisk_file_name = file_utils.download(ramdisk_url, self.tmp_dir).name else: logger.warn('Will not download the ramdisk image.' ' Cannot execute test') return ramdisk_file_image_settings = openstack_tests.file_image_test_settings( name=self.image_name + '_ramdisk', file_path=ramdisk_file_name) self.image_creators.append(create_image.OpenStackImage( self.os_creds, ramdisk_file_image_settings)) ramdisk_image = self.image_creators[-1].create() self.assertIsNotNone(ramdisk_image) self.assertEqual(get_image_size(ramdisk_file_image_settings), ramdisk_image.size) # Create the main disk image disk_file_name = None disk_url = openstack_tests.CIRROS_DEFAULT_IMAGE_URL if 'disk_file' in self.glance_test_meta: disk_file_name = self.glance_test_meta['disk_file'] elif 'disk_url' in self.glance_test_meta: disk_url = self.glance_test_meta['disk_url'] if not disk_file_name and not file_only: disk_file_name = file_utils.download(disk_url, self.tmp_dir).name else: logger.warn('Will not download the disk file image.' ' Cannot execute test') return file_image_settings = openstack_tests.file_image_test_settings( name=self.image_name, file_path=disk_file_name) properties['kernel_id'] = kernel_image.id properties['ramdisk_id'] = ramdisk_image.id file_image_settings.extra_properties = properties self.image_creators.append( create_image.OpenStackImage(self.os_creds, file_image_settings)) created_image = self.image_creators[-1].create() self.assertIsNotNone(created_image) self.assertEqual(self.image_name, created_image.name) retrieved_image = glance_utils.get_image( self.glance, image_settings=file_image_settings) self.assertIsNotNone(retrieved_image) self.assertEqual(self.image_creators[-1].get_image().size, retrieved_image.size) self.assertEqual(get_image_size(file_image_settings), retrieved_image.size) self.assertEqual(created_image.name, retrieved_image.name) self.assertEqual(created_image.id, retrieved_image.id) self.assertEqual(created_image.properties, retrieved_image.properties)