Thank you for all the detailed info to help with debugging.
I noticed in your paste none of the volumes in your disk_info['mapping'] have boot_index=0. Is that correct? I thought one of them would have to have boot_index=0 if you have a bootable volume.
I'm trying to work out what's needed to address the remaining problem you're observing with boot-from-volume plus additional volumes and drives. Would it be possible for you to test the following patch that builds upon the first one?
--- a/nova/virt/libvirt/driver.py
+++ b/nova/virt/libvirt/driver.py
@@ -3763,6 +3763,8 @@ class LibvirtDriver(driver.ComputeDriver):
# unit added and be able to increment it for each disk
# added. disk_mapping['unit'] = 0
+ if self._is_booted_from_volume(block_device_info):
+ disk_mapping['unit'] = 1
Hi Logan,
Thank you for all the detailed info to help with debugging.
I noticed in your paste none of the volumes in your disk_info[ 'mapping' ] have boot_index=0. Is that correct? I thought one of them would have to have boot_index=0 if you have a bootable volume.
I'm trying to work out what's needed to address the remaining problem you're observing with boot-from-volume plus additional volumes and drives. Would it be possible for you to test the following patch that builds upon the first one?
--- a/nova/ virt/libvirt/ driver. py virt/libvirt/ driver. py driver. ComputeDriver) :
disk_ mapping[ 'unit'] = 0 booted_ from_volume( block_device_ info): 'unit'] = 1
+++ b/nova/
@@ -3763,6 +3763,8 @@ class LibvirtDriver(
# unit added and be able to increment it for each disk
# added.
+ if self._is_
+ disk_mapping[
def _get_ephemeral_ devices( ):
eph_ devices = [] driver. ComputeDriver) : vol_dev]
self. _connect_ volume( context, connection_info, instance) .model == 'virtio-scsi': 'unit'] 'unit'] += 1 'boot_index' ) == 0: 'unit'] 'unit'] += 1 volume_ config( connection_ info, info)
devices. append( cfg)
vol[ 'connection_ info'] = connection_info
@@ -3852,8 +3854,11 @@ class LibvirtDriver(
info = disk_mapping[
if scsi_controller and scsi_controller
- info['unit'] = disk_mapping[
- disk_mapping[
+ if vol.get(
+ info['unit'] = 0
+ else:
+ info['unit'] = disk_mapping[
+ disk_mapping[
cfg = self._get_