discovery does not include /dev/disk/by-path device name
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
ironic-python-agent |
Fix Released
|
Wishlist
|
Ilya Etingof |
Bug Description
OpenStack Ironic discovery does not discover, save and report out /dev/disk/by-path names of block devices. This would be easy to correct and would provide sysadmins with a reliable alternative to using traditional device names to define Ceph OSDs, and also for root device hinting (you can use WWN for root device hinting but this is different by definition for every node, whereas /dev/disk/by-path can often be identical across a similar set of nodes). Without this information, you have to deploy Linux first to the node to find out what the /dev/disk/by-path names are, resulting in multiple deployments needed when only one should be needed.
There is another problem implicit here - Ironic database of block devices may become invalid once the node is rebooted, since the block device name can change after reboot. However, if you include /dev/disk/by-path info, then at least you can determine exactly what physical device is being referred to by the block device name at that point in time.
background: Linux does not guarantee stability of low-level device names across reboots. Unfortunately for some hardware configurations, such as those with > 1 storage controller, traditional device names such as /dev/sdc are not stable across reboots, and OpenStack Ironic does multiple reboots during deployment. In such configurations it may be necessary to specify block devices using /dev/disk/by-path softlinks, which have a name that is stable across reboots and is often the same for an entire set of hardware nodes (i.e. if they were all purchased at the same time).
Version-Release number of selected component (if applicable): sorry this is old stuff, if someone suspects that the bug has been fixed in newer versions let me know.
$ rpm -qa | grep -i ironic
python-
python-
openstack-
openstack-
python-
openstack-
openstack-
puppet-
How reproducible:
the lack of /dev/disk/by-path info is reproducible every time. The instability of block device names across reboots is reproducible on at least one kind of system that has multiple storage controllers in it, details available upon request. In this case, one storage controller was for the (operating) system disks, and the other storage controller was a LSI 3108 (MegaRAID descendant) that was for the Ceph OSDs.
Steps to Reproduce:
1. do ironic discover
2. use command "openstack baremetal node list" to find discovered nodes
3. pick a node uuid and use command:
# openstack baremetal introspection data save $uuid | jq '.inventory.disks'
Actual results:
you get a list of block devices along with info about those devices, but /dev/disk/by-path name is not part of this list.
{
"size": 800166076416,
"rotational": false,
"vendor": null,
"name": "/dev/nvme0n1",
"wwn_
"wwn_
"model": "INTEL SSDPEDMD800G4",
"wwn": null,
"serial": "PHFT6201004F80
},
Expected results:
Would like to see a field added for /dev/disk/by-path name. This info is available at discovery time, though you have to search through the /dev/disk/by-path/ directory to find the softlink that points to a particular block device.
Additional info:
A related bug in OpenStack kept us from using /dev/disk/by-path names for Ceph OSDs, this was reported by John Fulton, but a fix for this in ceph-puppet osd.pp was found by Joe Talerico, see:
https:/
https:/
Changed in ironic-python-agent: | |
importance: | Undecided → Wishlist |
no longer affects: | ironic-inspector |
Changed in ironic-python-agent: | |
assignee: | nobody → Ilya Etingof (etingof) |
Thanks for the detailed write-up, I'm going to mark this an RFE as I believe supporting those by-path devices would be considered a feature enhancement rather than a bug fix.
Can you update the bug description to clearly list the action we want to take -- I'm not sure if you're proposing adding the by-path device names, or replacing any non-pathed names with them.
Thanks!