Taikun Logo

Taikun OCP Guide

Table of Contents

Upgrading to Hardware Types

Starting with the Rocky release, the Bare Metal service does not
support classic drivers any more. If you still use classic
, please upgrade to hardware types immediately.
Please see /install/enabling-drivers for details on hardware
and hardware interfaces.

Planning the upgrade

It is necessary to figure out which hardware types and hardware
interfaces correspond to which classic drivers used in your deployment.
The following table lists the classic drivers with their corresponding
hardware types and the boot, deploy, inspect, management, and power
hardware interfaces:

Classic DriverHardware TypeBootDeployInspectManagementPower


The inspector inspect interface was only used
if explicitly enabled in the configuration. Otherwise,
no-inspect was used.


pxe_ipmitool_socat and agent_ipmitool_socat
use ipmitool-socat console interface (the default
for the ipmi hardware type), while
pxe_ipmitool and agent_ipmitool use
ipmitool-shellinabox. See Console
for details.

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.


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:

enabled_drivers = pxe_ipmitool,agent_ipmitool

You will have to add this configuration as well:

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


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:

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:


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

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

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


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:

baremetal node maintenance set $UUID \
    --reason "Changing driver and/or hardware interfaces"
# do the update, validate its correctness
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

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:

enabled_inspect_interfaces = inspector,no-inspect

See /install/enabling-drivers for more details.


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

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

for uuid in $(baremetal node list --driver ipmi -f value -c UUID); do
    baremetal node set <node> --inspect-interface inspector


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.


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

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

enabled_console_interfaces = ipmitool-socat,no-console

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

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:

for uuid in $(baremetal node list --driver ipmi -f value -c UUID); do
    baremetal node set <node> --console-interface ipmitool-shellinabox


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:

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

for uuid in $(baremetal node list --driver ipmi -f value -c UUID); do
    baremetal node set <node> --raid-interface agent


The ability of a node to use the agent RAID interface
depends on the ramdisk (more specifically, a hardware manager <contributor/hardware_managers.html>
used in it), not on the driver.

Network and storage

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


Classic drivers are allowed to use the VendorMixin
functionality to combine and expose several node or driver vendor
passthru methods from different vendor interface implementations in one

This is no longer possible with hardware types.

With hardware types, a vendor interface can only have a single active
implementation from the list of vendor interfaces supported by a given
hardware type.

Ironic no longer has in-tree drivers (both classic and hardware
types) that rely on this VendorMixin functionality support.
However if you are using an out-of-tree classic driver that depends on
it, you’ll need to do the following in order to use vendor passthru
methods from different vendor passthru implementations:

  1. While creating a new hardware type to replace your classic
    driver, specify all vendor interface implementations your classic driver
    was using to build its VendorMixin as supported vendor
    interfaces (property supported_vendor_interfaces of the
    Python class that defines your hardware type).

  2. Ensure all required vendor interfaces are enabled in the ironic
    configuration file under the
    [DEFAULT]enabled_vendor_interfaces option. You should also
    consider setting the [DEFAULT]default_vendor_interface
    option to specify the vendor interface for nodes that do not have one
    set explicitly.

  3. Before invoking a specific vendor passthru method, make sure that
    the node’s vendor interface is set to the interface with the desired
    vendor passthru method. For example, if you want to invoke the vendor
    passthru method vendor_method_foo() from
    vendor_foo vendor interface:

    # set the vendor interface to 'vendor_foo`
    baremetal node set <node> --vendor-interface vendor_foo
    # invoke the vendor passthru method
    baremetal node passthru call <node> vendor_method_foo


Explore Taikun CloudWorks in 2 Minutes!