Specifying root device hints for VMs leads to introspection/instance boot failure

Bug #1644522 reported by Sergii Nozhka
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Ironic
Invalid
High
Seamanhanshan

Bug Description

Adding serial root_device property to ironic node with several disks leads to introspection/instance boot failure.

Steps to reproduce:
1. Create VM with at least 2 disks and assign serial to both:
    virt-install --ram 8192 --vcpus 4 --os-variant rhel7 --disk path=/var/lib/libvirt/images/root-hints-disk1-1.qcow2,device=disk,bus=virtio,format=qcow2,serial=4000cca77fc4dba1 --disk path=/var/lib/libvirt/images/root-hints-disk1-2.qcow2,device=disk,bus=virtio,format=qcow2,serial=5001c60016ea71ad --import --noautoconsole --vnc --network network:data --network network:management --network network:external --name root-hints-1

2. Add created VM into ironic list
3. Set root_device property of added node to one of desired serial numbers:
    ironic node-update root-hints-1 add properties/root_device='{"serial": "5001c60016ea71ad"}'
4. Try to introspect node.

Actual result: Introspection failed.
Expected result: Introspection passed.

The ironic-inspector log contains the following:

    'root_disk': {
        'rotational': True,
        'vendor': '0x1af4',
        'name': '/dev/vdb',
        'wwn_vendor_extension': None,
        'wwn_with_extension': None,
        'model': '',
        'wwn': None,
        'serial': None,
        'size': 21474836480
    }

python-ironicclient-1.7.0-1.el7ost.noarch
openstack-ironic-inspector-4.2.0-3.el7ost.noarch
openstack-ironic-conductor-6.2.1-5.el7ost.noarch
python-ironic-lib-2.1.1-2.el7ost.noarch
python-ironic-inspector-client-1.9.0-1.el7ost.noarch
puppet-ironic-9.4.1-1.el7ost.noarch
openstack-ironic-common-6.2.1-5.el7ost.noarch
openstack-ironic-api-6.2.1-5.el7ost.noarch

Sergii Nozhka (snozhka)
affects: ironic-inspector → ironic
summary: - Specifying root device hitns lfor VMs eads to introspection/boot failure
+ Specifying root device hints for VMs leads to introspection/boot failure
summary: - Specifying root device hints for VMs leads to introspection/boot failure
+ Specifying root device hints for VMs leads to introspection/instance
+ boot failure
Dmitry Tantsur (divius)
Changed in ironic:
status: New → Confirmed
importance: Undecided → High
Changed in ironic:
status: Confirmed → Triaged
Revision history for this message
Galyna Zholtkevych (gzholtkevych) wrote :

Hello!
Can you provide more logs (may be from ironic lib) to help encountering the issue?

Revision history for this message
Seamanhanshan (yaojun) wrote :

I think this bug is invalid, due to RootDiskSelectionHook:before_update validates the not-found root_device hint causes mismatch error! It works on desired.

    def before_update(self, introspection_data, node_info, **kwargs):
        """Detect root disk from root device hints and IPA inventory."""
        hints = node_info.node().properties.get('root_device')
        if not hints:
            LOG.debug('Root device hints are not provided',
                      node_info=node_info, data=introspection_data)
            return

        inventory = utils.get_inventory(introspection_data,
                                        node_info=node_info)
        try:
            device = il_utils.match_root_device_hints(inventory['disks'],
                                                      hints)
        except (TypeError, ValueError) as e:
            raise utils.Error(
                _('No disks could be found using the root device hints '
                  '%(hints)s because they failed to validate. '
                  'Error: %(error)s') % {'hints': hints, 'error': e},
                node_info=node_info, data=introspection_data)

        if not device:
            raise utils.Error(_('No disks satisfied root device hints'),
                              node_info=node_info, data=introspection_data)

        LOG.debug('Disk %(disk)s of size %(size)s satisfies '
                  'root device hints',
                  {'disk': device.get('name'), 'size': device['size']},
                  node_info=node_info, data=introspection_data)
        introspection_data['root_disk'] = device

######
Last error:
| last_error | ironic-inspector inspection failed: No disks satisfied root device hints |

Changed in ironic:
assignee: nobody → Seamanhanshan (yaojun)
Revision history for this message
Dmitry Tantsur (divius) wrote :

If anybody hits the original problem with the missing "serial" field, could you please provide ramdisk logs for introspection?

Changed in ironic:
status: Triaged → Incomplete
Changed in ironic:
status: Incomplete → Invalid
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.