def test_get_image_type(self, mock_disk_info):
        disk_path = mock.sentinel.disk_path
        mock_disk_info.return_value = {
            constants.VHD_IMAGE_TYPE: constants.DISK_FORMAT_VHD}

        self.assertEqual(constants.DISK_FORMAT_VHD,
                         vhdutils.get_image_type(disk_path))
Example #2
0
    def test_get_image_type(self, mock_disk_info):
        disk_path = mock.sentinel.disk_path
        mock_disk_info.return_value = {
            constants.VHD_IMAGE_TYPE: constants.DISK_FORMAT_VHD
        }

        self.assertEqual(constants.DISK_FORMAT_VHD,
                         vhdutils.get_image_type(disk_path))
    def test_get_image_type_fail(self, mock_disk_info):
        disk_path = mock.sentinel.disk_path
        mock_disk_info.side_effect = [
            vbox_exception.VBoxManageError(method="showhdinfo",
                                           reason="fake-error"),
            {constants.VHD_IMAGE_TYPE: 'fake-image-type'},
        ]

        self.assertIsNone(vhdutils.get_image_type(disk_path))
        self.assertRaises(nova_exception.InvalidDiskFormat,
                          vhdutils.get_image_type, disk_path)
Example #4
0
    def test_get_image_type_fail(self, mock_disk_info):
        disk_path = mock.sentinel.disk_path
        mock_disk_info.side_effect = [
            vbox_exception.VBoxManageError(method="showhdinfo",
                                           reason="fake-error"),
            {
                constants.VHD_IMAGE_TYPE: 'fake-image-type'
            },
        ]

        self.assertIsNone(vhdutils.get_image_type(disk_path))
        self.assertRaises(nova_exception.InvalidDiskFormat,
                          vhdutils.get_image_type, disk_path)
Example #5
0
    def create_root_disk(self, context, instance):
        base_vhd_path = imagecache.get_cached_image(context, instance)
        base_info = vhdutils.disk_info(base_vhd_path)
        root_vhd_path = pathutils.root_disk_path(
            instance, disk_format=base_info[constants.VHD_IMAGE_TYPE])

        if CONF.use_cow_images:
            LOG.debug(
                "Creating differencing VHD. Parent: %(parent)s, "
                "Target: %(target)s", {
                    'parent': base_vhd_path,
                    'target': root_vhd_path
                },
                instance=instance)
            self._vbox_manage.create_hd(
                filename=root_vhd_path,
                # disk_format=base_info[constants.VHD_IMAGE_TYPE],
                variant=constants.VARIANT_STANDARD,
                parent=base_vhd_path)

        else:
            LOG.debug(
                "Cloning VHD image %(base)s to target: %(target)s", {
                    'base': base_vhd_path,
                    'target': root_vhd_path
                },
                instance=instance)
            self._vbox_manage.clone_hd(
                vhd_path=base_vhd_path,
                new_vdh_path=root_vhd_path,
                disk_format=base_info[constants.VHD_IMAGE_TYPE],
                variant=constants.VARIANT_STANDARD)

        # Resize image if is necesary
        disk_format = vhdutils.get_image_type(root_vhd_path)
        if instance.root_gb and disk_format in (constants.DISK_FORMAT_VDI,
                                                constants.DISK_FORMAT_VHD):
            base_vhd_size = base_info[constants.VHD_CAPACITY] / units.Mi
            root_vhd_size = instance.root_gb * units.Ki
            if vhdutils.is_resize_required(
                    disk_path=root_vhd_path,
                    old_size=base_vhd_size,
                    new_size=root_vhd_size,
                    instance=instance):
                self._vbox_manage.modify_hd(
                    root_vhd_path, constants.FIELD_HD_RESIZE_MB, root_vhd_size)

        return root_vhd_path
    def _save_glance_image(self, context, image_id, image_vhd_path):
        LOG.debug("Updating Glance image %(image_id)s with content from "
                  "merged disk %(image_vhd_path)s",
                  {'image_id': image_id, 'image_vhd_path': image_vhd_path})

        disk_format = vhdutils.get_image_type(image_vhd_path)
        (glance_image_service,
         image_id) = glance.get_remote_image_service(context, image_id)
        image_metadata = {"is_public": False,
                          "disk_format": disk_format.lower(),
                          "container_format": "bare",
                          "properties": {}}

        with open(image_vhd_path, 'rb') as file_handle:
            glance_image_service.update(context, image_id, image_metadata,
                                        file_handle)
Example #7
0
    def create_root_disk(self, context, instance):
        base_vhd_path = imagecache.get_cached_image(context, instance)
        base_info = vhdutils.disk_info(base_vhd_path)
        root_vhd_path = pathutils.root_disk_path(
            instance, disk_format=base_info[constants.VHD_IMAGE_TYPE])

        if CONF.use_cow_images:
            LOG.debug(
                "Creating differencing VHD. Parent: %(parent)s, "
                "Target: %(target)s", {
                    'parent': base_vhd_path,
                    'target': root_vhd_path
                },
                instance=instance)
            self._vbox_manage.create_hd(
                filename=root_vhd_path,
                # disk_format=base_info[constants.VHD_IMAGE_TYPE],
                variant=constants.VARIANT_STANDARD,
                parent=base_vhd_path)

        else:
            LOG.debug("Cloning VHD image %(base)s to target: %(target)s", {
                'base': base_vhd_path,
                'target': root_vhd_path
            },
                      instance=instance)
            self._vbox_manage.clone_hd(
                vhd_path=base_vhd_path,
                new_vdh_path=root_vhd_path,
                disk_format=base_info[constants.VHD_IMAGE_TYPE],
                variant=constants.VARIANT_STANDARD)

        # Resize image if is necesary
        disk_format = vhdutils.get_image_type(root_vhd_path)
        if instance.root_gb and disk_format in (constants.DISK_FORMAT_VDI,
                                                constants.DISK_FORMAT_VHD):
            base_vhd_size = base_info[constants.VHD_CAPACITY] / units.Mi
            root_vhd_size = instance.root_gb * units.Ki
            if vhdutils.is_resize_required(disk_path=root_vhd_path,
                                           old_size=base_vhd_size,
                                           new_size=root_vhd_size,
                                           instance=instance):
                self._vbox_manage.modify_hd(root_vhd_path,
                                            constants.FIELD_HD_RESIZE_MB,
                                            root_vhd_size)

        return root_vhd_path
Example #8
0
    def _save_glance_image(self, context, image_id, image_vhd_path):
        LOG.debug(
            "Updating Glance image %(image_id)s with content from "
            "merged disk %(image_vhd_path)s", {
                'image_id': image_id,
                'image_vhd_path': image_vhd_path
            })

        disk_format = vhdutils.get_image_type(image_vhd_path)
        (glance_image_service,
         image_id) = glance.get_remote_image_service(context, image_id)
        image_metadata = {
            "is_public": False,
            "disk_format": disk_format.lower(),
            "container_format": "bare",
            "properties": {}
        }

        with open(image_vhd_path, 'rb') as file_handle:
            glance_image_service.update(context, image_id, image_metadata,
                                        file_handle)