Merge "Amend future of classic drivers with automated migration"
This commit is contained in:
commit
440a3f36e8
|
@ -98,6 +98,16 @@ In the Queens cycle we will deprecate classic drivers.
|
||||||
the driver-specific documentation and the upgrade documentation bit explained
|
the driver-specific documentation and the upgrade documentation bit explained
|
||||||
above.
|
above.
|
||||||
|
|
||||||
|
* Provide automatic migration to hardware types as part of the
|
||||||
|
``online_data_migration`` command - see `Automatic migration`_.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
We decided to not provide any automatic migration on the API level in the
|
||||||
|
node create and update API. Doing so would require us to maintain mapping
|
||||||
|
between classic drivers and corresponding hardware types/interfaces
|
||||||
|
foreever. It also may be confusing for operators, if, for example, the
|
||||||
|
result of the node creation request differs from the outcome.
|
||||||
|
|
||||||
**Rocky**
|
**Rocky**
|
||||||
|
|
||||||
In the Rocky release the support for classic drivers is removed.
|
In the Rocky release the support for classic drivers is removed.
|
||||||
|
@ -116,6 +126,74 @@ In the Rocky release the support for classic drivers is removed.
|
||||||
* Update the driver listing API to always return an empty result when
|
* Update the driver listing API to always return an empty result when
|
||||||
``classic`` type is requested.
|
``classic`` type is requested.
|
||||||
|
|
||||||
|
Automatic migration
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
To simplify transition for operators, make ``online_data_migration`` in the
|
||||||
|
Queens release automatically update nodes.
|
||||||
|
|
||||||
|
* Extend BaseDriver_ with a new class method:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def to_hardware_type(cls, node):
|
||||||
|
"""Return corresponding hardware type and hardware interfaces.
|
||||||
|
|
||||||
|
:param cls: the driver class
|
||||||
|
:param node: node record from the database
|
||||||
|
:returns: dictionary containing node fields to update: ``driver`` and
|
||||||
|
all interface fields (except for ``network`` and ``storage`` which
|
||||||
|
have always been dynamic, even for nodes with a classic driver).
|
||||||
|
"""
|
||||||
|
|
||||||
|
For example, for the ``agent_ipmitool`` driver:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def to_hardware_type(cls, node):
|
||||||
|
if CONF.inspector.enabled:
|
||||||
|
inspect_interface = 'inspector'
|
||||||
|
else:
|
||||||
|
inspect_interface = 'no-inspect'
|
||||||
|
|
||||||
|
return {'driver': 'ipmi',
|
||||||
|
'boot_interface': 'pxe',
|
||||||
|
'console_interface': 'no-console',
|
||||||
|
'deploy_interface': 'direct',
|
||||||
|
'inspect_interface': inspect_interface,
|
||||||
|
'management_interface': 'ipmitool',
|
||||||
|
'power_interface': 'ipmitool',
|
||||||
|
'raid_interface': 'agent',
|
||||||
|
'vendor_interface': 'no-vendor'}
|
||||||
|
|
||||||
|
* Update the ``online_data_migration`` command with a new migration:
|
||||||
|
|
||||||
|
#. Load classes for all classic drivers in the ``ironic.drivers`` entrypoint
|
||||||
|
(but do not instantiate them).
|
||||||
|
|
||||||
|
#. For each node using a classic driver:
|
||||||
|
|
||||||
|
#. Calculate required changes using ``DriverClass.to_hardware_type``.
|
||||||
|
|
||||||
|
#. If the hardware type or any interface is not in the enabled list
|
||||||
|
(``enabled_hardware_types`` or ``enabled_***_interfaces``), issue
|
||||||
|
a warning and skip the node.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
Due to idempotency of the migrations, operators will be able to
|
||||||
|
re-run this command after fixing the warnings to update the
|
||||||
|
skipped nodes.
|
||||||
|
|
||||||
|
#. Update the node record in the database.
|
||||||
|
|
||||||
|
* In the **Rocky** cycle, update the ``dbsync`` command with a check that no
|
||||||
|
nodes are using classic drivers. As the list of classic drivers will not be
|
||||||
|
available at that time (they will be removed from the tree), maintain the
|
||||||
|
list of classic driver names that used to be in tree and check nodes against
|
||||||
|
this list. Remove this check in the release after Rocky.
|
||||||
|
|
||||||
Alternatives
|
Alternatives
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
@ -266,3 +344,4 @@ References
|
||||||
==========
|
==========
|
||||||
|
|
||||||
.. _driver_factory.py: https://git.openstack.org/cgit/openstack/ironic/tree/ironic/common/driver_factory.py
|
.. _driver_factory.py: https://git.openstack.org/cgit/openstack/ironic/tree/ironic/common/driver_factory.py
|
||||||
|
.. _BaseDriver: https://docs.openstack.org/ironic/latest/contributor/api/ironic.drivers.base.html#ironic.drivers.base.BaseDriver
|
||||||
|
|
Loading…
Reference in New Issue