コード例 #1
0
 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')
コード例 #2
0
 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)
コード例 #3
0
    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')
コード例 #4
0
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'])
コード例 #5
0
 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))
コード例 #6
0
    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)
コード例 #7
0
    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)