コード例 #1
0
def _fetch_image(context, instance, image_path):
    disk_path = None
    try:
        images.fetch(context, instance.image_ref, image_path,
                     instance.user_id, instance.project_id)
        # Avoid conflicts
        vhdutils.check_disk_uuid(image_path)

        disk_info = vhdutils.disk_info(image_path)
        disk_format = disk_info[constants.VHD_IMAGE_TYPE]
        disk_path = image_path + "." + disk_format.lower()

        manage.VBoxManage.clone_hd(image_path, disk_path,
                                   disk_format=disk_format)
        manage.VBoxManage.close_medium(constants.MEDIUM_DISK, image_path,
                                       delete=True)

    except (vbox_exc.VBoxException, exception.NovaException):
        with excutils.save_and_reraise_exception():
            for path in (image_path, disk_path):
                if path and os.path.exists(path):
                    manage.VBoxManage.close_medium(constants.MEDIUM_DISK,
                                                   path)
                    pathutils.delete_path(path)

    return disk_path
コード例 #2
0
def _fetch_image(context, instance, image_path):
    disk_path = None
    try:
        images.fetch(context, instance.image_ref, image_path, instance.user_id,
                     instance.project_id)
        # Avoid conflicts
        vhdutils.check_disk_uuid(image_path)

        disk_info = vhdutils.disk_info(image_path)
        disk_format = disk_info[constants.VHD_IMAGE_TYPE]
        disk_path = image_path + "." + disk_format.lower()

        manage.VBoxManage.clone_hd(image_path,
                                   disk_path,
                                   disk_format=disk_format)
        manage.VBoxManage.close_medium(constants.MEDIUM_DISK,
                                       image_path,
                                       delete=True)

    except (vbox_exc.VBoxException, exception.NovaException):
        with excutils.save_and_reraise_exception():
            for path in (image_path, disk_path):
                if path and os.path.exists(path):
                    manage.VBoxManage.close_medium(constants.MEDIUM_DISK, path)
                    pathutils.delete_path(path)

    return disk_path
コード例 #3
0
    def _check_disk(self, disk_file, base_disk):
        try:
            vhdutils.check_disk_uuid(disk_file)
            disk_info = vhdutils.disk_info(disk_file)
            parent_uuid = disk_info[constants.VHD_PARENT_UUID]
            if not parent_uuid:
                return
        except vbox_exc.VBoxException:
            parent_uuid = None

        registered_hdds = vhdutils.get_hard_disks()
        if parent_uuid not in registered_hdds:
            parent_info = vhdutils.disk_info(base_disk)
            self._vbox_manage.set_disk_parent_uuid(
                disk_file, parent_info[constants.VHD_UUID])
コード例 #4
0
    def _check_disk(self, disk_file, base_disk):
        try:
            vhdutils.check_disk_uuid(disk_file)
            disk_info = vhdutils.disk_info(disk_file)
            parent_uuid = disk_info[constants.VHD_PARENT_UUID]
            if not parent_uuid:
                return
        except vbox_exc.VBoxException:
            parent_uuid = None

        registered_hdds = vhdutils.get_hard_disks()
        if parent_uuid not in registered_hdds:
            parent_info = vhdutils.disk_info(base_disk)
            self._vbox_manage.set_disk_parent_uuid(
                disk_file, parent_info[constants.VHD_UUID])