Hi all,
on a previous thread [1] Eric Blake mentioned:
Without more code on the libvirt front, I think you're stuck
renaming
the guests to enforce naming order (assuming that libvirt even goes by
sorted name order, as opposed to readdir() order where you have no control).
I poked around the code and experimented a little bit and found the following.
* When you first create new guest (or start already created guest) it is
assigned a sequential ID, name and also UUID. IDs start from 1 and increase as
long as libvirtd is running.
* When libvirt-guests wants to start/shutdown guests it relies on the file
/var/lib/libvirt/libvirt-guests. The format of this file is:
URI <list of uuids>
libvirt-guests script will start the guests as written in the file.
* The libvirt-guests file is initially created from the output of `virsh list'
and `virsh dominfo' (to get the UUID). virsh list will list the guests ordered
by their ID.
* Order of starting/stopping guests is unreliable.
The only thing that matters wrt start/shutdown order is the guest ID at the time
when the libvirt-guests file is generated. By default the order is the order in
which guests were created and it can change if you randomly stop/start guests
while libvirtd is running . Names or UUIDs don't play here at all.
I'm not exactly sure what IDs are used for but they change every time when a
guest is stopped/started manually. Which in turn reflects the order in which
libvirt-guests stops/starts all guests.
Example:
On a freshly installed system I created 5 guests in the following order:
a1, b1, a2, c1, a11. Then I left all guests running.
Upon stop/start of the libvirt-guests service the guests were stoped/started in
the same order.
Then I stopped libvirt-guests and libvirtd, renamed a1 to c2 and restarted both
services. c2 was first in the list - name doesn't matter.
virsh list shows IDs are 1 to 5 (c2 = 1).
Then I did: virsh shutdown c2 && virsh start c2. c2 now has id of 6.
Doing service libvirt-guests stop/start again now showed me a different order:
b1, a2, c1, a11, c2
You see how the order in which guests are started/stopped is unreliable. If I
were to stop c1 while all other guests were running and then start it again
(e.g. after attaching a new disk image) then it will have the highest ID number
and will become last in the list used for stopping/starting guests.
I'm not sure if this can easily be fixed or it needs the concept of
groups/relations implemented.
[1] -
https://www.redhat.com/archives/libvir-list/2011-April/msg00789.html
Regards,
Alexander.