summaryrefslogtreecommitdiff
path: root/doc/source/admin/upgrade-to-hardware-types.rst
blob: 28e44f7c084ae4b36438c631b4704cbebffdf4be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
Upgrading to Hardware Types
===========================

In the future, the Bare Metal service will stop supporting *classic drivers*
and will only support *hardware types*. Please see
:doc:`/install/enabling-drivers` for the detailed explanation of the
difference between these two types of drivers.

Planning the upgrade
--------------------

It is necessary to figure out which hardware types and hardware interfaces
correspond to which classic drivers used in your deployment.
Use the following table:

================ ============= ==================== ====== ========== =========
 Classic Driver  Hardware Type         Boot         Deploy Management   Power
================ ============= ==================== ====== ========== =========
pxe_ipmitool     ipmi          pxe                  iscsi  ipmitool   ipmitool
agent_ipmitool   ipmi          pxe                  direct ipmitool   ipmitool
pxe_irmc         irmc          irmc-pxe             iscsi  irmc       irmc
iscsi_irmc       irmc          irmc-virtual-media   iscsi  irmc       irmc
agent_irmc       irmc          irmc-virtual-media   direct irmc       irmc
================ ============= ==================== ====== ========== =========

.. TODO(dtantsur): finish this table

.. warning::
    This table does not currently cover hardware interfaces other than
    boot, deploy, management and power.

.. note::
    For out-of-tree drivers you may need to reach out to their maintainers or
    figure out the appropriate interfaces by researching the source code.

Configuration
-------------

You will need to enable hardware types and interfaces that correspond to your
currently enabled classic drivers. For example, if you have the following
configuration in your ``ironic.conf``:

.. code-block:: ini

    [DEFAULT]
    enabled_drivers = pxe_ipmitool,agent_ipmitool

You will have to add this configuration as well:

.. code-block:: ini

    [DEFAULT]
    enabled_hardware_types = ipmi
    enabled_boot_interfaces = pxe
    enabled_deploy_interfaces = iscsi,direct
    enabled_management_interfaces = ipmitool
    enabled_power_interfaces = ipmitool

.. note::
    For every interface type there is an option
    ``default_<INTERFACE>_interface``, where ``<INTERFACE>`` is the interface
    type name. For example, one can make all nodes use the ``direct`` deploy
    method by default by setting:

    .. code-block:: ini

        [DEFAULT]
        default_deploy_interface = direct

Migrating nodes
---------------

After the required items are enabled in the configuration, each node's
``driver`` field has to be updated to a new value. You may need to also
set new values for some or all interfaces:

.. code-block:: console

    export OS_BAREMETAL_API_VERSION=1.31

    for uuid in $(openstack baremetal node list --driver pxe_ipmitool -f value -c UUID); do
        openstack baremetal node set $uuid --driver ipmi --deploy-interface iscsi
    done

    for uuid in $(openstack baremetal node list --driver agent_ipmitool -f value -c UUID); do
        openstack baremetal node set $uuid --driver ipmi --deploy-interface direct
    done

See :doc:`/install/enrollment` for more details on setting hardware types and
interfaces.

.. warning::
    It is not recommended to change the interfaces for ``active`` nodes. If
    absolutely needed, the nodes have to be put in the maintenance mode first:

    .. code-block:: console

        openstack baremetal node maintenance set $UUID \
            --reason "Changing driver and/or hardware interfaces"
        # do the update, validate its correctness
        openstack baremetal node maintenance unset $UUID

Other interfaces
----------------

Care has to be taken to migrate from classic drivers using non-default
interfaces. This chapter covers a few of the most commonly used.

Ironic Inspector
~~~~~~~~~~~~~~~~

Some classic drivers, notably ``pxe_ipmitool``, ``agent_ipmitool`` and
``pxe_drac_inspector``, use ironic-inspector_ for their *inspect* interface.

The same functionality is available for all hardware types, but the appropriate
``inspect`` interface has to be enabled in the Bare Metal service configuration
file, for example:

.. code-block:: ini

    [DEFAULT]
    enabled_inspect_interfaces = inspector,no-inspect

See :doc:`/install/enabling-drivers` for more details.

.. note::
    The configuration option ``[inspector]enabled`` does not affect hardware
    types.

Then you can tell your nodes to use this interface, for example:

.. code-block:: console

    export OS_BAREMETAL_API_VERSION=1.31
    for uuid in $(openstack baremetal node list --driver ipmi -f value -c UUID); do
        openstack baremetal node set $uuid --inspect-interface inspector
    done

.. note::
    A node configured with the IPMI hardware type, will use the inspector
    inspection implementation automatically if it is enabled. This is not
    the case for the most of the vendor drivers.

.. _ironic-inspector: https://docs.openstack.org/ironic-inspector/

Console
~~~~~~~

Several classic drivers, notably ``pxe_ipmitool_socat`` and
``agent_ipmitool_socat``, use socat-based serial console implementation.

For the ``ipmi`` hardware type it is used by default, if enabled in the
configuration file:

.. code-block:: ini

    [DEFAULT]
    enabled_console_interfaces = ipmitool-socat,no-console

If you want to use the ``shellinabox`` implementation instead, it has to be
enabled as well:

.. code-block:: ini

    [DEFAULT]
    enabled_console_interfaces = ipmitool-shellinabox,no-console

Then you need to update some or all nodes to use it explicitly. For example,
to update all nodes use:

.. code-block:: console

    export OS_BAREMETAL_API_VERSION=1.31
    for uuid in $(openstack baremetal node list --driver ipmi -f value -c UUID); do
        openstack baremetal node set $uuid --console-interface ipmitool-shellinabox
    done

RAID
~~~~

Many classic drivers, including ``pxe_ipmitool`` and ``agent_ipmitool`` use
the IPA-based in-band RAID implementation by default.

For the hardware types it is not used by default. To use it, you need to
enable it in the configuration first:

.. code-block:: ini

    [DEFAULT]
    enabled_raid_interfaces = agent,no-raid

Then you can update those nodes that support in-band RAID to use the ``agent``
RAID interface. For example, to update all nodes use:

.. code-block:: console

    export OS_BAREMETAL_API_VERSION=1.31
    for uuid in $(openstack baremetal node list --driver ipmi -f value -c UUID); do
        openstack baremetal node set $uuid --raid-interface agent
    done

.. note::
    The ability of a node to use the ``agent`` RAID interface depends on
    the ramdisk (more specifically, a `hardware manager`_ used in it),
    not on the driver.

.. _hardware manager: https://docs.openstack.org/ironic-python-agent/pike/contributor/hardware_managers.html

Network and storage
~~~~~~~~~~~~~~~~~~~

The network and storage interfaces have always been dynamic, and thus do not
require any special treatment during upgrade.