EXIT NUTANIX · THE WHOLE PICTURE

Many projects.
One exit.

Transiva takes the VM out of Nutanix. h2kvm makes it boot. Zorvia, Kairon or Machina run it. Chimera lets us test all of it without touching a real cluster.

See how they fitThe one-page version
SYSTEM MAP

Follow the disk.

A VM leaves Nutanix as a plain qcow2 plus a manifest. Everything after that is standard Linux virtualization.

How Transiva, h2kvm and the landing targets fit togetherNutanix Prism v4 is exported by Transiva into a qcow2 and manifest, h2kvm repairs and converts it, and it lands on KVM, KubeVirt with Zorvia (both run), or Kairon and Machina (not run yet). Chimera is a test stand-in for Nutanix. SOURCE Chimera test double (simulator) Prism v4 + NFS Nutanix Prism Central v4 storage container (NFS) stands in for EXPORT Transiva discover and export hyperexport daemon + REST API web dashboard qemu-img convert v4 ARTIFACT Artifact disk.qcow2 manifest.json REPAIR AND CONVERT h2kvm first-boot science GuestKit repair convert + checksum domain XML Windows: not run LAND Linux KVM libvirt: boots, answers ping KubeVirt + Zorvia Ready, Zorvia lists it Kairon via Veyron: not run yet Machina libvirt host: not run yet run end to end not run yet, or a test stand-in Chimera stands in for a real Prism in tests.
WHO DOES WHAT

Each project does one job.

Transiva

Discover and export

Talks to Prism Central v4, finds the VM and its disks, picks the disk up from the NFS storage container, converts it with qemu-img and writes artifact-manifest.json. The source VM is never modified.

h2kvm

Repair and convert

Takes the disk and makes it boot on KVM: offline guest repair through GuestKit, conversion, checksum and a domain definition. Windows, UEFI, multi-disk and large VMs are h2kvm's territory.

Zorvia

Runs it on KubeVirt

The control plane for KubeVirt. In the run, the migrated VM was Ready and Zorvia listed it as Running through its API.

Kairon

Runs it via Veyron

h2kvm has a Kairon hand-off (--deploy-kairon). It was not run in this test.

Machina

Runs it on libvirt hosts

h2kvm can emit a libvirt domain for a Machina host. A plain libvirt boot was run; Machina itself was not.

Chimera

The test rig

Simulates Nutanix Prism v4 and its NFS container, so the whole path can be tested unattended. It is a simulator, not a real cluster.

SEQUENCE

Who calls whom.

The order of calls in one run of scripts/e2e-nutanix-exit.sh.

Order of calls in a Nutanix exitThe script runs hyperexport, which negotiates the Prism v4 version, lists the VM, reads the disk from the NFS container and converts it to qcow2 with a manifest. The script then runs h2kvm and boots the result. Script hyperexport Prism v4 NFS container h2kvm KVM / KubeVirt run, -provider nutanix -vm <name> OPTIONS /unversioned/info (negotiate v4.3) GET vms, then GET vm: disks and container read .acropolis/vmdisk/<disk>/ qemu-img convert, write manifest run, --cmd local --vmdk <disk> --emit-domain-xml inspect, repair, convert, checksum no network config: install DHCP fallback boot the converted disk guest gets a lease, answers ping Real run (Ubuntu 24.04): 7 of 7 stages, 747 s. The Prism endpoint was a simulator.
PROOF

One run, measured.

7 / 7

stages passed

747 s

download to two running guests (Ubuntu 24.04)

2 / 2

landing targets booted (KVM, KubeVirt)

Export
16 s
Convert (h2kvm)
277 s
Boot on KVM
79 s
Boot on KubeVirt
335 s

From results.json: Ubuntu 24.04 cloud image. The KubeVirt figure includes building and importing the container disk.

STRAIGHT TALK

What this does and doesn't prove.

Proven

  • Prism v4 export in code, end to end
  • Valid qcow2 and manifest, converted by h2kvm
  • Ubuntu 24.04 boots on KVM (UEFI) and on KubeVirt, unattended
  • A guest with no network config comes up through h2kvm's DHCP fallback

Not yet

  • A real Nutanix cluster (Prism here is a simulator)
  • Kairon and Machina landings
  • Boot repair on a guest that needs it (this image needed only the network fallback)
  • Windows, multi-disk and large VMs; checks beyond ping

Case study · Deck (PDF) · h2kvm's side of the story