feat: add .ova support — OVA files are tar archives containing .vmdk disks

This commit is contained in:
Claus Lohmar 2026-07-26 07:42:06 +00:00
parent 0c2b11f2d2
commit 878bc66da8

View file

@ -24,7 +24,7 @@ logger = logging.getLogger("backend.converter")
DISK_EXTENSIONS = {".vmdk", ".qcow2", ".qcow", ".img", ".raw", ".vhd", ".vhdx"} DISK_EXTENSIONS = {".vmdk", ".qcow2", ".qcow", ".img", ".raw", ".vhd", ".vhdx"}
ARCHIVE_EXTENSIONS = {".7z", ".zip", ".rar", ".tar.gz", ".tgz", ".tar", ".gz", ".bz2", ".xz"} ARCHIVE_EXTENSIONS = {".7z", ".zip", ".rar", ".tar.gz", ".tgz", ".tar", ".gz", ".bz2", ".xz", ".ova"}
MIN_DISK_BYTES = 1024 MIN_DISK_BYTES = 1024
@ -69,6 +69,7 @@ def extract_if_needed(filename: str) -> Path:
".tar.gz": ("tar", ["tar", "-xzf", str(filepath)]), ".tar.gz": ("tar", ["tar", "-xzf", str(filepath)]),
".tgz": ("tar", ["tar", "-xzf", str(filepath)]), ".tgz": ("tar", ["tar", "-xzf", str(filepath)]),
".tar": ("tar", ["tar", "-xf", str(filepath)]), ".tar": ("tar", ["tar", "-xf", str(filepath)]),
".ova": ("tar", ["tar", "-xf", str(filepath)]),
".gz": ("gunzip", ["gunzip", "-f", str(filepath)]), ".gz": ("gunzip", ["gunzip", "-f", str(filepath)]),
".bz2": ("bunzip2", ["bunzip2", "-f", str(filepath)]), ".bz2": ("bunzip2", ["bunzip2", "-f", str(filepath)]),
".xz": ("xz", ["xz", "-d", str(filepath)]), ".xz": ("xz", ["xz", "-d", str(filepath)]),
@ -475,6 +476,7 @@ def _extract_one_archive(archive_path: Path, target_dir: Path):
".tar.gz": ("tar", ["tar", "-xzf", str(archive_path)]), ".tar.gz": ("tar", ["tar", "-xzf", str(archive_path)]),
".tgz": ("tar", ["tar", "-xzf", str(archive_path)]), ".tgz": ("tar", ["tar", "-xzf", str(archive_path)]),
".tar": ("tar", ["tar", "-xf", str(archive_path)]), ".tar": ("tar", ["tar", "-xf", str(archive_path)]),
".ova": ("tar", ["tar", "-xf", str(archive_path)]),
".gz": ("gunzip", ["gunzip", "-f", str(archive_path)]), ".gz": ("gunzip", ["gunzip", "-f", str(archive_path)]),
".bz2": ("bunzip2", ["bunzip2", "-f", str(archive_path)]), ".bz2": ("bunzip2", ["bunzip2", "-f", str(archive_path)]),
".xz": ("xz", ["xz", "-d", str(archive_path)]), ".xz": ("xz", ["xz", "-d", str(archive_path)]),