[Openstack] Boot instance from volume via Horizon dashboard fails

Eugen Block eblock at nde.ag
Mon Mar 21 15:47:12 UTC 2016


Hi all,

I have a question regarding the Horizon dashboard respectively  
launching instances via dashboard.

I have a Liberty deployment running on 1 controller and 2 compute nodes.
I also deployed an external cinder-volume as a storage backend for my  
instances. Launching instances works fine if you use the nova boot  
command (nova boot --block-device[...]) to launch instances or if you  
use kvm as hypervisor (which I haven't yet). But if you use xen (as I  
do) and you want to launch the instance via Horizon dashboard, you get  
an invalid block device mapping, because nova tries to attach /dev/vda  
as root device instead of /dev/xvda:

nova-compute.log:

[instance: 09f96335-4f3b-4b3e-a7b3-ef384144b00b] Booting with blank  
volume at /dev/vda

libxl-driver.log:

2016-03-21 14:01:07 CET libxl: error: libxl.c:2733:device_disk_add:  
Invalid or unsupported virtual disk identifier vda
2016-03-21 14:01:07 CET libxl: error:  
libxl_create.c:1167:domcreate_launch_dm: unable to add disk devices

As I already said, this error doesn't occur if you use CLI.
So I tried to figure out, what the difference between nova boot and  
Horizon is.
On controller node is the file  
/srv/www/openstack-dashboard/openstack_dashboard/dashboards/project/instances/workflows/create_instance.py which contains an assignment for the (by default) invisible field "can_set_mount_point" to the variable "device_name", here is a snippet from the class  
SetInstanceDetailsAction():

---cut here---
      device_name = forms.CharField(label=_("Device Name"),
                                    required=False,
                                    INITIAL="VDA",
                                    help_text=_("Volume mount point  
(e.g. 'vda' "
                                                "mounts at '/dev/vda'). Leave "
                                                "this field blank to let the "
                                                "system choose a device name "
                                                "for you."))
---cut here---

Now if I make that field visible and change its value to XVDA,  
everything works fine and the VM is created successfully. So I made a  
minor change to see if it's more suitable for my environment, I  
changed the initial value of "device_name" to an empty string:

---cut here---
      device_name = forms.CharField(label=_("Device Name"),
                                    required=False,
                                    INITIAL="",
---cut here---

and removed the assignment "{'device_name': device_name}" from the  
array "dev_mapping_2". Instead, I appended an if-statement to add the  
device_name only if it's not empty:

---cut here---
          elif source_type == 'volume_image_id':
              device_name = context.get('device_name', '').strip() or None
              dev_mapping_2 = [
                  {'source_type': 'image',
                   'destination_type': 'volume',
                   'delete_on_termination':
                       bool(context['delete_on_terminate']),
                   'uuid': context['source_id'],
                   'boot_index': '0',
                   'volume_size': context['volume_size']
                   }
              ]
              IF DEVICE_NAME:
                  DEV_MAPPING_2.APPEND({"DEVICE_NAME": DEVICE_NAME})
---cut here---

This solution seems to work (for me), of course, that if-statement  
would be also necessary if the "source_type" is "volume_snapshot_id",  
at least if this would be the way to go.
Has anyone else tried to launch from dashboard with xen hypervisor?

Regards,
Eugen




-- 
Eugen Block                             voice   : +49-40-559 51 75
NDE Netzdesign und -entwicklung AG      fax     : +49-40-559 51 77
Postfach 61 03 15
D-22423 Hamburg                         e-mail  : eblock at nde.ag

          Vorsitzende des Aufsichtsrates: Angelika Mozdzen
            Sitz und Registergericht: Hamburg, HRB 90934
                    Vorstand: Jens-U. Mozdzen
                     USt-IdNr. DE 814 013 983


-- 
Eugen Block                             voice   : +49-40-559 51 75
NDE Netzdesign und -entwicklung AG      fax     : +49-40-559 51 77
Postfach 61 03 15
D-22423 Hamburg                         e-mail  : eblock at nde.ag

         Vorsitzende des Aufsichtsrates: Angelika Mozdzen
           Sitz und Registergericht: Hamburg, HRB 90934
                   Vorstand: Jens-U. Mozdzen
                    USt-IdNr. DE 814 013 983





More information about the Openstack mailing list