Hi!

I'm currently working on integration of virt-sysprep into oVirt.

Usually, if user creates a template from a regular VM, and then creates new VMs from this template, these new VMs inherit all configuration of the original VM, including SSH keys, UDEV rules, MAC addresses, system ID, hostname etc. It is unfortunate, because you cannot have two network devices with the same MAC address in the same network, for example.

To avoid this, user must clean all machine-specific configuration from the original VM before creating a template from it. You can do this manually, but there is virt-sysprep utility that does this automatically.

Ideally, virt-sysprep should be seamlessly integrated into template creation process. But the first step is to create a simple button: user selects a VM, clicks the button and oVirt executes virt-sysprep on the VM.

virt-sysprep works directly on VM's filesystem. It accepts list of all disks of the VM as parameters:

virt-sysprep -a disk1.img -a disk2.img -a disk3.img

The architecture is as follows: command on the Engine side runs a job on VDSM side and tracks its success/failure. The job on VDSM side runs virt-sysprep.

The question is how to implement the job correctly?

I thought about using storage jobs, but they are designed to work only with a single volume, correct? Is is possible to use them with operation that is performed on multiple volumes?

Or, alternatively, is it possible to use some kind of 'VM jobs' - that work on VM at whole? How v2v solves this problem?

Any ideas?

Shmuel