Awhile back a bug was filed against libvirt about the inability
to completely exclude a disk from the boot order:
https://bugzilla.redhat.com/show_bug.cgi?id=888635
In short, you can't have a domain that used PXE to boot, but
also has an un-bootable disk device *even if that disk isn't
listed in the boot order*, because if PXE times out (e.g. due to
the bridge forwarding delay), the BIOS will move on to the next
target, which will be the unbootable disk device (again - even
though it wasn't given a boot order), and get stuck at a "BOOT
DISK FAILURE, PRESS ANY KEY" message until a user
intervenes.
It was obviously beyond the ability of libvirt to fix this
(although it can be worked around by creating a very small disk
image with a bootloader that merely instructs the system to
reboot, and placing *that* disk in the boot order just after the
PXE device), so the BZ was closed as CANTFIX.
A couple days ago I noticed that Amos Kong had later actually
fixed this problem in seabios and qemu:
https://bugzilla.redhat.com/show_bug.cgi?id=888633
https://bugzilla.redhat.com/show_bug.cgi?id=903204
Existing behavior is preserved though, and the new behavior only
comes about if "-boot strict" is specified on the qemu
commandline.
It definitely seems desirable to have this ability in libvirt, but
I'm almost of the opinion that this should *always* be the
behavior (if you want all devices to be in the boot order, you can
just give all of them (or none of them, if you're feeling
adventurous) a boot order ranking). But I thought it would be prudent
to ask opinions about that before making any patch.
So what are the opinions? Should the "if any devices are given a
boot order, only attempt to boot from devices that have a boot
order specified" behavior just be the default (and only) behavior
when qemu/seabios supports it? (this would imply that the old
behavior is just a bug)? Or do we need to make it configurable? If
it needs to be configurable, the boot-related xml seems to be a
bit unorganized (a flat list of elements with mostly a single
attribute for each), but I suppose this could be added as a new
attribute to the <bios> element...