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
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])