mirror of
https://github.com/xcat2/xcat-core.git
synced 2026-09-21 16:39:30 +00:00
0a858b60f4
A node whose vmstorage is a libvirt storage pool (dir://, nfs:// or lvm://) got a <disk> element with no bus attribute. libvirt then chose the controller from the name of the device alone, so the disk of a riscv64 node worked only while its volume was named sd*. build_diskstruct in xCAT-server/lib/xcat/plugins/kvm.pm matched the pool entry, a hash reference, against /^vd/, /^hd/ and /^sd/. A reference in a match is its address as a string, so no branch ran and the bus was never set. The name of the device is in the device field of that entry. The three tests now read that field. The bus each one sets is the bus libvirt gives an hd*, sd* or vd* name, so no domain changes: a riscv64 node keeps the sd* name its volume has, and keeps the scsi controller the riscv64 virt machine provides. libvirt stores the domain built before this change with bus="scsi" on that disk, which is what the domain built after it states. kvm_diskstruct_bus.t drives build_diskstruct in a scratch package, with a stub storage pool in place of the one routine that reaches libvirt, and asserts the bus of an hd*, an sd* and a vd* volume. It also asserts that a riscv64 node keeps the sd* name of its volume. Four of its seven assertions fail without this change. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>