[libvirt-users] Questions on libvirt hook scripts

Whit Blauvelt whit.virt at transpect.com
Mon Jul 11 15:54:54 UTC 2011


Hi,

Reading http://libvirt.org/hooks.html I'm wondering of the following
implication is accurate:

Under "QEMU guest migration" it says

	At the beginning of the migration, the qemu hook script on the
	_destination_ host is executed with the "start" operation.

Above that, under "Specifics" 

	Before a QEMU guest is started, the qemu hook script is called in
	two locations; if either location fails, the guest is not started.
	The first location, since 0.9.0, is before libvirt performs any
	resource labeling.... This is called as:

	/etc/libvirt/hooks/qemu guest_name prepare begin -

	The second location, available Since 0.8.0, occurs after libvirt has
	finished labeling all resources, but has not yet started the guest,
	called as:

	/etc/libvirt/hooks/qemu guest_name start begin -

Is it accurate that under 0.9.x, starting a VM will run the qemu hook script
as both "prepare" and "start," but migrating a VM will only run the qemu
hook script as "start"? Or is the description incomplete with libvirt also
running "prepare" on migration?

Another question, under "Calling libvirt functions from within a hook
script" it says

	DO NOT DO THIS!

	A hook script must not call back into libvirt, as the libvirt daemon
	is already waiting for the script to exit.

	A deadlock is likely to occur.

That makes obvious sense. But does it apply to calling libvirt on a second
system? For example, a script might check the status of VMs on a second
system as a condition of starting a VM on first, using virsh. My guess is
that shouldn't deadlock. But then since during migration "the qemu hook
script on the _destination_ host is executed," if the destination hook
script were in turn to use virsh to check the _source_ host, then in a
roundabout way a libvirt function has been called from within the hook
script. I can't quite picture whether this particular instance would be
dangerous.

If it's accurate that the _destination_ hook script is only called with
"start" and not with "prepare," the second question matters less. The checks
on the second system that I want to do can be limited to the "prepare"
invocation, and so never loop back. 

On the other hand, if the destination hook script _is_ called with "prepare"
during migration, it would be useful to know how to tell if it's being
called as part of a migration.

TIA,
Whit




More information about the libvirt-users mailing list