The version line printed unconditionally, so the nightly job would mail a
one-line message on every run even when there was nothing to download. Guard
it like the other status output, leaving interactive runs unchanged.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Two implementations of the same OVA/OVF import flow: a Python version that
parses the OVF with ElementTree and detects UEFI, and a shell version using
xmllint that handles multi-disk appliances. Both check free space on the
target storage before importing.
download-virtio-win-progress.py fetches the latest virtio-win ISO, skipping
the download when the local copy is already current.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>