← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1729584] [NEW] boot from volume + configdrive broken

 

Public bug reported:

Hi,

Since last ocata update (2:15.0.7-0ubuntu1~cloud0) "boot from
volume"+configdrive is broken.

The libvirt xml generated looks wrong, on the first scsi disk the "unit"
is wrong, it's 1 while it must be 0. The VM can't boot, kvm start but
the boot screen show the "No boot disk found" message.


The wrong xml generated: 

    <disk type='network' device='cdrom'>
      <driver name='qemu' type='raw' cache='none' io='native'/>
      <auth username='openstack-service'>
        <secret type='ceph' uuid='XXXXXXXXXXXXXXXXX'/>
      </auth>
      <source protocol='rbd' name='disks/9029e91c-2c6e-4a83-b71f-4ee1055e51ca_disk.config'>
        <host name='XXX.XXX.XXX.XXX' port='6789'/>
        <host name='XXX.XXX.XXX.XXX' port='6789'/>
        <host name='XXX.XXX.XXX.XXX' port='6789'/>
      </source>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='network' device='disk'>
      <driver name='qemu' type='raw' cache='none' io='native' discard='unmap'/>
      <auth username='openstack-service'>
        <secret type='ceph' uuid='XXXXXXXXXXXXXXXXX'/>
      </auth>
      <source protocol='rbd' name='ssds/volume-cb74e7c1-bcfc-4b52-b92a-f2750232734d'>
        <host name='XXX.XXX.XXX.XXX' port='6789'/>
        <host name='XXX.XXX.XXX.XXX' port='6789'/>
        <host name='XXX.XXX.XXX.XXX' port='6789'/>
      </source>
      <target dev='sda' bus='scsi'/>
      <serial>cb74e7c1-bcfc-4b52-b92a-f2750232734d</serial>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>

As workaround, I have fixed the issue here:

--- a/nova/virt/libvirt/driver.py       2016-03-21 00:08:47.702778684 +0100
+++ b/nova/virt/libvirt/driver.py       2016-03-21 00:21:19.877080690 +0100
@@ -3576,7 +3576,7 @@
                 LOG.debug('Config drive not found in RBD, falling back to the '
                           'instance directory', instance=instance)
         disk_info = disk_mapping[name]
-        if 'unit' in disk_mapping:
+        if 'unit' in disk_mapping and disk_info["bus"] == "scsi":
             disk_unit = disk_mapping['unit']
             disk_mapping['unit'] += 1  # Increments for the next disk added
         conf = disk.libvirt_info(disk_info['bus'],

** Affects: nova
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1729584

Title:
  boot from volume + configdrive broken

Status in OpenStack Compute (nova):
  New

Bug description:
  Hi,

  Since last ocata update (2:15.0.7-0ubuntu1~cloud0) "boot from
  volume"+configdrive is broken.

  The libvirt xml generated looks wrong, on the first scsi disk the
  "unit" is wrong, it's 1 while it must be 0. The VM can't boot, kvm
  start but the boot screen show the "No boot disk found" message.

  
  The wrong xml generated: 

      <disk type='network' device='cdrom'>
        <driver name='qemu' type='raw' cache='none' io='native'/>
        <auth username='openstack-service'>
          <secret type='ceph' uuid='XXXXXXXXXXXXXXXXX'/>
        </auth>
        <source protocol='rbd' name='disks/9029e91c-2c6e-4a83-b71f-4ee1055e51ca_disk.config'>
          <host name='XXX.XXX.XXX.XXX' port='6789'/>
          <host name='XXX.XXX.XXX.XXX' port='6789'/>
          <host name='XXX.XXX.XXX.XXX' port='6789'/>
        </source>
        <target dev='hda' bus='ide'/>
        <readonly/>
        <address type='drive' controller='0' bus='0' target='0' unit='0'/>
      </disk>
      <disk type='network' device='disk'>
        <driver name='qemu' type='raw' cache='none' io='native' discard='unmap'/>
        <auth username='openstack-service'>
          <secret type='ceph' uuid='XXXXXXXXXXXXXXXXX'/>
        </auth>
        <source protocol='rbd' name='ssds/volume-cb74e7c1-bcfc-4b52-b92a-f2750232734d'>
          <host name='XXX.XXX.XXX.XXX' port='6789'/>
          <host name='XXX.XXX.XXX.XXX' port='6789'/>
          <host name='XXX.XXX.XXX.XXX' port='6789'/>
        </source>
        <target dev='sda' bus='scsi'/>
        <serial>cb74e7c1-bcfc-4b52-b92a-f2750232734d</serial>
        <address type='drive' controller='0' bus='0' target='0' unit='1'/>
      </disk>

  As workaround, I have fixed the issue here:

  --- a/nova/virt/libvirt/driver.py       2016-03-21 00:08:47.702778684 +0100
  +++ b/nova/virt/libvirt/driver.py       2016-03-21 00:21:19.877080690 +0100
  @@ -3576,7 +3576,7 @@
                   LOG.debug('Config drive not found in RBD, falling back to the '
                             'instance directory', instance=instance)
           disk_info = disk_mapping[name]
  -        if 'unit' in disk_mapping:
  +        if 'unit' in disk_mapping and disk_info["bus"] == "scsi":
               disk_unit = disk_mapping['unit']
               disk_mapping['unit'] += 1  # Increments for the next disk added
           conf = disk.libvirt_info(disk_info['bus'],

To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1729584/+subscriptions


Follow ups