210 lines
5.3 KiB
ReStructuredText
210 lines
5.3 KiB
ReStructuredText
..
|
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
|
License.
|
|
|
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
|
|
|
=================
|
|
Root device hints
|
|
=================
|
|
|
|
https://blueprints.launchpad.net/ironic/+spec/root-device-hints
|
|
|
|
Allow operators to pass some hints to Ironic to decide which device
|
|
should be selected for the deployment.
|
|
|
|
Problem description
|
|
===================
|
|
|
|
When the deploy ramdisk boots Ironic picks the first disk it finds to
|
|
be the root device (the device where the image will be put on). If the
|
|
server has more than one SATA, SCSI or IDE disk controller, the order
|
|
in which their corresponding device nodes are added is arbitrary [`1`_]
|
|
[`2`_]. This may result in devices like /dev/sda and /dev/sdb switching
|
|
around on each boot and Ironic picking different disk every time the
|
|
machine is being deployed.
|
|
|
|
As an operator, if my server has multiple disks I would like to choose
|
|
which one Ironic should deploy the image onto. Or in case I have created
|
|
a RAID device to be my root device, I'd like to tell Ironic to always
|
|
use that.
|
|
|
|
Another problem, in case for the full disk image deployment, if we
|
|
deploy a server twice and on each deployment Ironic picks a different
|
|
disk we could end up with 2 disks containing a valid bootloader.
|
|
|
|
.. _`1`: https://wiki.archlinux.org/index.php/persistent_block_device_naming
|
|
.. _`2`: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Online_Storage_Reconfiguration_Guide/persistent_naming.html
|
|
|
|
Proposed change
|
|
===============
|
|
|
|
The change proposed by this blueprint is to give operators a means via
|
|
the Ironic API to pass some hints about what disk should be picked in
|
|
deploy time. That way Ironic can always pick the right disk to write
|
|
the image on.
|
|
|
|
Also, with the addition of Ironic being able to create RAID arrays,
|
|
it would be nice to be able to tell Ironic to use the device that was
|
|
just created to be the root device for the deployment.
|
|
|
|
This spec is proposing having a limited number of hints that could be
|
|
passed as part of the initial work, but could be extended later on. The
|
|
initial proposed hint list is:
|
|
|
|
* model (STRING): device identifier
|
|
* vendor (STRING): device vendor
|
|
* serial (STRING): disk serial number
|
|
* wwn (STRING): unique storage identifier
|
|
* hctl (STRING): Host:Channel:Target:Lun for SCSI
|
|
* size (INT): size of the device in GB
|
|
|
|
The hints should live in the `properties` attribute of the Node resource,
|
|
the key would be `root_device` and the value a dictionary so operators
|
|
could combine one or more hints. For example::
|
|
|
|
node.properties['root_device'] = {'wwn': '0x4000cca77fc4dba1'}
|
|
|
|
The logic about which disk will be picked will follow:
|
|
|
|
#. If the hints are not specified Ironic will continue to pick the
|
|
first disk it finds.
|
|
|
|
#. If hints are specified and only one disk is found Ironic will pick it.
|
|
|
|
#. If hints are specified and multiple disks are found Ironic will pick
|
|
the first disk that matches the all the criteria.
|
|
|
|
#. If hints are specified and no disks are found the deployment is aborted.
|
|
|
|
The default deploy ramdisk and `IPA`_ needs to be changed to support
|
|
filtering the disks based on the hints, if specified.
|
|
|
|
Alternatives
|
|
------------
|
|
|
|
We could recommend operators to avoid having multiple storage devices
|
|
on the machines being managed by Ironic.
|
|
|
|
Data model impact
|
|
-----------------
|
|
|
|
None
|
|
|
|
REST API impact
|
|
---------------
|
|
|
|
As we want to use a dictionary as a value on the `properties` attribute
|
|
the `bug 1398350`_ needs to be fixed.
|
|
|
|
RPC API impact
|
|
--------------
|
|
|
|
None
|
|
|
|
Driver API impact
|
|
-----------------
|
|
|
|
None
|
|
|
|
Nova driver impact
|
|
------------------
|
|
|
|
None
|
|
|
|
Security impact
|
|
---------------
|
|
|
|
None
|
|
|
|
Other end user impact
|
|
---------------------
|
|
|
|
None
|
|
|
|
Scalability impact
|
|
------------------
|
|
|
|
None
|
|
|
|
Performance Impact
|
|
------------------
|
|
|
|
None
|
|
|
|
Other deployer impact
|
|
---------------------
|
|
|
|
Deployers will have a finer granularity in selecting the disk device
|
|
to be used for the deployment.
|
|
|
|
.. note::
|
|
When specifing device size as a hint operator needs to make sure that
|
|
the value doesn't conflict with the local_gb properties of the node.
|
|
This is going to be documented as part of this spec.
|
|
|
|
Developer impact
|
|
----------------
|
|
|
|
None
|
|
|
|
|
|
Implementation
|
|
==============
|
|
|
|
Assignee(s)
|
|
-----------
|
|
|
|
Primary assignee:
|
|
lucasagomes
|
|
|
|
Other contributors:
|
|
None
|
|
|
|
Work Items
|
|
----------
|
|
|
|
* Make Ironic check for hints in the node.properties
|
|
|
|
* Pass the hint information to the deploy ramdisk and `IPA`_
|
|
|
|
* Add tests and documentation
|
|
|
|
* Modify the default deploy ramdisk in `diskimage-builder`_ to consider
|
|
the hints when picking the disk device
|
|
|
|
* Modify `IPA`_ to consider the hints when picking the disk device
|
|
|
|
Dependencies
|
|
============
|
|
|
|
* `bug 1398350`_ needs to be fixed.
|
|
|
|
Testing
|
|
=======
|
|
|
|
* Unit tests will be added
|
|
|
|
Upgrades and Backwards Compatibility
|
|
====================================
|
|
|
|
The change is backwards compatible since if hints are not specified
|
|
Ironic will continue to do what it does today (pick the first disk it
|
|
found for the deployment).
|
|
|
|
|
|
Documentation Impact
|
|
====================
|
|
|
|
A document explaining how hints works and what are the options and values
|
|
supported is going to be added.
|
|
|
|
References
|
|
==========
|
|
|
|
None
|
|
|
|
.. _`bug 1398350`: https://bugs.launchpad.net/ironic/+bug/1398350
|
|
.. _`diskimage-builder`: https://github.com/openstack/diskimage-builder/tree/master/elements/deploy-ironic
|
|
.. _`IPA`: https://github.com/openstack/ironic-python-agent
|