The Bare Metal service delegates actual hardware management to drivers.
Starting with the Ocata release, two types of drivers are supported:
classic drivers (for example, pxe_ipmitool
, agent_ilo
, etc.) and
the newer hardware types (for example, generic redfish
and ipmi
or vendor-specific ilo
and irmc
).
Drivers, in turn, consist of hardware interfaces: sets of functionality dealing with some aspect of bare metal provisioning in a vendor-specific way. Classic drivers have all hardware interfaces hardcoded, while hardware types only declare which hardware interfaces they are compatible with.
Please refer to the driver composition reform specification for technical details behind hardware types.
From API user’s point of view, both classic drivers and hardware types can
be assigned to the driver
field of a node. However, they are configured
differently.
Hardware types are enabled in the configuration file of the
ironic-conductor service by setting the enabled_hardware_types
configuration option, for example:
[DEFAULT]
enabled_hardware_types = ipmi,redfish
Due to the driver’s dynamic nature, they also require configuring enabled hardware interfaces.
Note
All available hardware types and interfaces are listed in setup.cfg file in the source code tree.
There are several types of hardware interfaces:
manages booting of both the deploy ramdisk and the user instances on the
bare metal node. Boot interface implementations are often vendor specific,
and can be enabled via the enabled_boot_interfaces
option:
[DEFAULT]
enabled_hardware_types = ipmi,ilo
enabled_boot_interfaces = pxe,ilo-virtual-media
Boot interfaces with pxe
in their name require Configuring PXE and iPXE.
There are also a few hardware-specific boot interfaces - see
Enabling drivers for their required configuration.
defines how the image gets transferred to the target disk.
iscsi
deploy method the deploy ramdisk publishes node’s hard
drive as an iSCSI share. The ironic-conductor then copies the image
to this share. Requires Configuring iSCSI-based drivers.direct
deploy method, the deploy ramdisk fetches the image
from an HTTP location (object storage temporary URL or user-provided
HTTP URL).[DEFAULT]
enabled_hardware_types = ipmi,redfish
enabled_deploy_interfaces = iscsi,direct
implements fetching hardware information from nodes. Can be implemented
out-of-band (via contacting the node’s BMC) or in-band (via booting
a ramdisk on a node). The latter implementation is called inspector
and uses a separate service called ironic-inspector. Example:
[DEFAULT]
enabled_hardware_types = ipmi,ilo,irmc
enabled_inspect_interfaces = ilo,irmc,inspector
See Hardware Inspection for more details.
provides additional hardware management actions, like getting or setting
boot devices. This interface is usually vendor-specific, and its name
often matches the name of the hardware type (with ipmitool
being
a notable exception). For example:
[DEFAULT]
enabled_hardware_types = ipmi,redfish,ilo,irmc
enabled_management_interfaces = ipmitool,redfish,ilo,irmc
Using ipmitool
requires Configuring IPMI support. See
Enabling drivers for the required configuration of each driver.
runs power actions on nodes. Similar to the management interface, it is
usually vendor-specific, and its name often matches the name of the
hardware type (with ipmitool
being again an exception). For example:
[DEFAULT]
enabled_hardware_types = ipmi,redfish,ilo,irmc
enabled_power_interfaces = ipmitool,redfish,ilo,irmc
Using ipmitool
requires Configuring IPMI support. See
Enabling drivers for the required configuration of each driver.
manages building and tearing down RAID on nodes. Similar to inspection,
it can be implemented either out-of-band or in-band (via agent
implementation). See RAID Configuration for details. For example:
[DEFAULT]
enabled_hardware_types = ipmi,redfish,ilo,irmc
enabled_raid_interfaces = agent,no-raid
manages the interaction with a remote storage subsystem, such as the Block Storage service, and helps facilitate booting from a remote volume. This interface ensures that volume target and connector information is updated during the lifetime of a deployed instance. See Boot From Volume for more details.
This interface defaults to a noop
driver as it is considered
an “opt-in” interface which requires additional configuration
by the operator to be usable.
For example:
[DEFAULT]
enabled_hardware_types = ipmi,irmc
enabled_storage_interfaces = cinder,noop
is a place for vendor extensions to be exposed in API. See Vendor Methods for details.
[DEFAULT]
enabled_hardware_types = ipmi,redfish,ilo,irmc
enabled_vendor_interfaces = ipmitool,no-vendor
Here is a complete configuration example, enabling two generic protocols, IPMI and Redfish, with a few additional features:
[DEFAULT]
enabled_hardware_types = ipmi,redfish
enabled_boot_interfaces = pxe
enabled_console_interfaces = ipmitool-socat,no-console
enabled_deploy_interfaces = iscsi,direct
enabled_inspect_interfaces = inspector
enabled_management_interfaces = ipmitool,redfish
enabled_network_interfaces = flat,neutron
enabled_power_interfaces = ipmitool,redfish
enabled_raid_interfaces = agent
enabled_storage_interfaces = cinder,noop
enabled_vendor_interfaces = ipmitool,no-vendor
Note that some interfaces have implementations named no-<TYPE>
where
<TYPE>
is the interface type. These implementations do nothing and return
errors when used from API.
When enabling hardware types and their interfaces, make sure that for every enabled hardware type, the whole set of enabled interfaces matches for all conductors. However, different conductors can have different hardware types enabled.
For example, you can have two conductors with the following configuration respectively:
[DEFAULT]
enabled_hardware_types = ipmi
enabled_deploy_interfaces = direct
enabled_power_interfaces = ipmitool
enabled_management_interfaces = ipmitool
[DEFAULT]
enabled_hardware_types = redfish
enabled_deploy_interfaces = iscsi
enabled_power_interfaces = redfish
enabled_management_interfaces = redfish
But you cannot have two conductors with the following configuration respectively:
[DEFAULT]
enabled_hardware_types = ipmi,redfish
enabled_deploy_interfaces = direct
enabled_power_interfaces = ipmitool,redfish
enabled_management_interfaces = ipmitool,redfish
[DEFAULT]
enabled_hardware_types = redfish
enabled_deploy_interfaces = iscsi
enabled_power_interfaces = redfish
enabled_management_interfaces = redfish
This is because the redfish
hardware type will have different enabled
deploy interfaces on these conductors. It would have been fine, if the second
conductor had enabled_deploy_interfaces = direct
instead of iscsi
.
This situation is not detected by the Bare Metal service, but it can cause inconsistent behavior in the API, when node functionality will depend on which conductor it gets assigned to.
Note
We don’t treat this as an error, because such temporary inconsistency is inevitable during a rolling upgrade or a configuration update.
When an operator does not provide an explicit value for one of the interfaces
(when creating a node or updating its driver), the default value is calculated
as described in Defaults for hardware interfaces. It is also possible
to override the defaults for any interfaces by setting one of the options named
default_<IFACE>_interface
, where <IFACE>
is the interface name.
For example:
[DEFAULT]
default_deploy_interface = direct
default_network_interface = neutron
This configuration forces the default deploy interface to be direct
and
the default network interface to be neutron
for all hardware types.
The defaults are calculated and set on a node when creating it or updating its hardware type. Thus, changing these configuration options has no effect on existing nodes.
Warning
The default interface implementation must be configured the same way across all conductors in the cloud, except maybe for a short period of time during an upgrade or configuration update. Otherwise the default implementation will depend on which conductor handles which node, and this mapping is not predictable or even persistent.
Warning
These options should be used with care. If a hardware type does not support the provided default implementation, its users will have to always provide an explicit value for this interface when creating a node.
Classic drivers are enabled in the configuration file of the
ironic-conductor service by setting the enabled_drivers
configuration
option, for example:
[DEFAULT]
enabled_drivers = pxe_ipmitool,pxe_ilo,pxe_drac
The names in this comma-separated list are entry point names of the drivers. They have to be available at conductor start-up, and all dependencies must be installed locally. For example,
pxe
and some drivers starting with agent
require Configuring PXE and iPXE,pxe
or having iscsi
in their name require
Configuring iSCSI-based drivers,ipmitool
require Configuring IPMI support.See Enabling drivers for the required configuration of each driver.
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.