How about adding a pre-stop script to /etc/init/libvirt-bin.conf that uses /usr/bin/virsh to iterate over all running guests to shut them down? Probably this should be done a) in parallel and b) supervised by reasonable timeouts. So technically, it might make sense to implement that pre-stop script in C or python to access libvirt directly, or extend /usr/bin/virsh to offer an appropriate command.
How about adding a pre-stop script to /etc/init/ libvirt- bin.conf that uses /usr/bin/virsh to iterate over all running guests to shut them down? Probably this should be done a) in parallel and b) supervised by reasonable timeouts. So technically, it might make sense to implement that pre-stop script in C or python to access libvirt directly, or extend /usr/bin/virsh to offer an appropriate command.