I am relatively new to libvirt community; have worked on it from last half year mostly towards adding few missing APIs especially for ESX driver. One of the features I worked was installing a domain (VM) using OVAs. It is been a long time OVA became defacto standard for distributing and installing Virtual Machines, but surprisingly libvirt does not provide support for it. I wanted to perform a quick sanity int the community so that I am not stepping on anyone feet here. So far, I have working code, but to contribute upstream would require a bit of a cleanup work.
One of the concern that I intend to get inputs on:
OVA is a tar format archive, the first pre-requisite is to parse OVA and get following information:
1. XML descriptor.
2. VMDKs for transfer after domain is created on the hypervisor. (in ESX world that is done by getting a lease object and then transmitting the disk bits to hypervisor)
I am wondering, where should I put the common code to parse OVA? My initial thought is to enhance conf/domain_conf.* file, given it already provides parsing routines for XML descriptor. Waiting for your feedback on this one.
As I am familiar with ESX libvirt interaction, so the immediate plan is to enhance ESX driver, hopefully in near future will contribute the same feature to KVM/Xen etc.
Going off of pure memory here but I believe OVA and OVF are related somehow (one is a sub or super set or one can have multiple machines) but there is already some lifting being done by open-ovf. One of our guys at work used it to convert some VMWare OVA/OVF VMs to qemu VMs and got them into libvirt. I know there were some really rough edges but it's worth looking at their code as an option.
Basically this would involve not teaching libvirt to read OVA format but unpacking that format and defining an appropriate domain in libvirt. Similiar to what virtinst does now. The added flexibility is that you could migrate from VMWare to qemu or Xen at the same time.
I'll try to dig up some scripts on Monday.