diff --git a/devstack/lib/ironic b/devstack/lib/ironic index aa3d99722a..def61dd6e8 100644 --- a/devstack/lib/ironic +++ b/devstack/lib/ironic @@ -634,7 +634,7 @@ function is_deployed_by_oneview { } function is_deployed_by_ilo { - [[ -z "${IRONIC_DEPLOY_DRIVER##*ilo}" ]] && return 0 + [[ "${IRONIC_DEPLOY_DRIVER}" == ilo ]] && return 0 return 1 } @@ -1966,8 +1966,7 @@ function enroll_nodes { node_options+=" --driver-info ilo_address=$bmc_address \ --driver-info ilo_password=$bmc_passwd \ --driver-info ilo_username=$bmc_username" - if [[ $IRONIC_DEPLOY_DRIVER != "pxe_ilo" && \ - $IRONIC_ENABLED_BOOT_INTERFACES == *"ilo-virtual-media"* ]]; then + if [[ $IRONIC_ENABLED_BOOT_INTERFACES == *"ilo-virtual-media"* ]]; then node_options+=" --driver-info ilo_deploy_iso=$IRONIC_DEPLOY_ISO_ID" fi elif is_deployed_by_drac; then diff --git a/doc/source/admin/drivers/ilo.rst b/doc/source/admin/drivers/ilo.rst index b0269381ab..01baa7de50 100644 --- a/doc/source/admin/drivers/ilo.rst +++ b/doc/source/admin/drivers/ilo.rst @@ -375,551 +375,6 @@ Enable driver $ service ironic-conductor restart -Classic Drivers (Deprecated) -============================ - -These are the classic drivers (deprecated) for ProLiant hardware: - -* ``pxe_ilo`` -* ``iscsi_ilo`` -* ``agent_ilo`` - -.. warning:: - The classic drivers are deprecated in the Queens release and will be removed - in the Rocky release. The ``ilo`` hardware type should be used instead of - the classic drivers. - -To enable the same feature set as provided by all iLO classic drivers, -apply the following configuration: - -.. code-block:: ini - - [DEFAULT] - enabled_hardware_types = ilo - enabled_boot_interfaces = ilo-virtual-media,ilo-pxe - enabled_power_interfaces = ilo - enabled_console_interfaces = ilo - enabled_raid_interfaces = agent - enabled_management_interfaces = ilo - enabled_inspect_interfaces = ilo - -The following commands can be used to enroll a node with the same -feature set as one of the classic drivers, but using the ``ilo`` -hardware type: - -* ``iscsi_ilo``: - - .. code-block:: console - - openstack baremetal node create --os-baremetal-api-version=1.31 \ - --driver ilo \ - --deploy-interface iscsi \ - --boot-interface ilo-virtual-media \ - --driver-info ilo_address= \ - --driver-info ilo_username= \ - --driver-info ilo_password= \ - --driver-info ilo_deploy_iso= - -* ``pxe_ilo``: - - .. code-block:: console - - openstack baremetal node create --os-baremetal-api-version=1.31 \ - --driver ilo \ - --deploy-interface iscsi \ - --boot-interface ilo-pxe \ - --driver-info ilo_address= \ - --driver-info ilo_username= \ - --driver-info ilo_password= \ - --driver-info deploy_kernel= \ - --driver-info deploy_ramdisk= - -* ``agent_ilo``: - - .. code-block:: console - - openstack baremetal node create --os-baremetal-api-version=1.31 \ - --driver ilo \ - --deploy-interface direct \ - --boot-interface ilo-virtual-media \ - --driver-info ilo_address= \ - --driver-info ilo_username= \ - --driver-info ilo_password= \ - --driver-info ilo_deploy_iso= - -iscsi_ilo driver -^^^^^^^^^^^^^^^^ - -Overview -~~~~~~~~ -``iscsi_ilo`` driver was introduced as an alternative to ``pxe_ipmitool`` -and ``pxe_ipminative`` drivers for HPE ProLiant servers. ``iscsi_ilo`` uses -virtual media feature in iLO to boot up the bare metal node instead of using -PXE or iPXE. - -Target Users -~~~~~~~~~~~~ - -* Users who do not want to use PXE/TFTP protocol in their data centers. - -* Users who have concerns with PXE protocol's security issues and want to have a - security enhanced PXE-less deployment mechanism. - - The PXE driver passes management information in clear-text to the - bare metal node. However, if swift proxy server and glance have HTTPS - endpoints (See :ref:`EnableHTTPSinSwift`, :ref:`EnableHTTPSinGlance` - for more information), the ``iscsi_ilo`` driver provides enhanced security by - exchanging management information with swift and glance endpoints over HTTPS. - The management information, deploy ramdisk and boot images for the instance - will be retrieved over encrypted management network via iLO virtual media. - -Tested Platforms -~~~~~~~~~~~~~~~~ -This driver should work on HPE ProLiant Gen7 servers with iLO 3, Gen8 and Gen9 -servers with iLO 4 and Gen10 servers with iLO 5. It has been tested with the -following servers: - -* ProLiant DL380 G7 -* ProLiant DL380e Gen8 -* ProLiant DL580 Gen8 UEFI -* ProLiant DL180 Gen9 UEFI -* ProLiant DL360 Gen9 UEFI -* ProLiant DL380 Gen9 UEFI -* ProLiant XL450 Gen9 UEFI -* ProLiant DL360 Gen10 - -For more up-to-date information on server platform support info, refer -`iLO driver wiki page `_. - -Features -~~~~~~~~ -* PXE-less deploy with virtual media. -* Automatic detection of current boot mode. -* Automatic setting of the required boot mode, if UEFI boot mode is requested - by the nova flavor's extra spec. -* Supports booting the instance from virtual media (netboot) as well as booting - locally from disk. By default, the instance will always boot from virtual - media for partition images. -* UEFI Boot Support -* UEFI Secure Boot Support -* Passing management information via secure, encrypted management network - (virtual media) if swift proxy server and glance have HTTPS endpoints. See - :ref:`EnableHTTPSinSwift`, :ref:`EnableHTTPSinGlance` for more - information. User image provisioning is done using iSCSI over data network, - so this driver has the benefit of security enhancement with the same - performance. It segregates management info from data channel. -* Supports both out-of-band and in-band cleaning operations. For more details, - see :ref:`InbandvsOutOfBandCleaning`. -* Remote Console -* HW Sensors -* Works well for machines with resource constraints (lesser amount of memory). -* Support for out-of-band hardware inspection. -* Swiftless deploy for intermediate images -* HTTP(S) Based Deploy. -* iLO drivers with standalone ironic. - -Requirements -~~~~~~~~~~~~ -* **iLO 4** or **iLO 5 Advanced License** needs to be installed on iLO to - enable Virtual Media Boot feature. -* **Swift Object Storage Service** - iLO driver uses swift to store temporary - FAT images as well as boot ISO images. -* **Glance Image Service with swift configured as its backend** - When using - ``iscsi_ilo`` driver, the image containing the deploy ramdisk is retrieved - from swift directly by the iLO. - - -Deploy Process -~~~~~~~~~~~~~~ - -Please refer to `Netboot with glance and swift`_ and -`Localboot with glance and swift for partition images`_ for the deploy process -of partition image and `Localboot with glance and swift`_ for the deploy -process of whole disk image. - -Configuring and Enabling the driver -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Please refer to `Glance Configuration`_ and `Enable driver`_. - -Registering ProLiant node in ironic -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Nodes configured for iLO driver should have the ``driver`` property set to -``iscsi_ilo``. The following configuration values are also required in -``driver_info``: - -- ``ilo_address``: IP address or hostname of the iLO. -- ``ilo_username``: Username for the iLO with administrator privileges. -- ``ilo_password``: Password for the above iLO user. -- ``ilo_deploy_iso``: The glance UUID of the deploy ramdisk ISO image. -- ``ca_file``: (optional) CA certificate file to validate iLO. -- ``client_port``: (optional) Port to be used for iLO operations if you are - using a custom port on the iLO. Default port used is 443. -- ``client_timeout``: (optional) Timeout for iLO operations. Default timeout - is 60 seconds. -- ``console_port``: (optional) Node's UDP port for console access. Any unused - port on the ironic conductor node may be used. - -.. note:: - To update SSL certificates into iLO, you can refer to `HPE Integrated - Lights-Out Security Technology Brief `_. - You can use iLO hostname or IP address as a 'Common Name (CN)' while - generating Certificate Signing Request (CSR). Use the same value as - `ilo_address` while enrolling node to Bare Metal service to avoid SSL - certificate validation errors related to hostname mismatch. - -.. note:: - If configuration values for ``ca_file``, ``client_port`` and - ``client_timeout`` are not provided in the ``driver_info`` of the node, - the corresponding config variables defined under ``[ilo]`` section in - ironic.conf will be used. - -For example, you could run a similar command like below to enroll the ProLiant -node:: - - openstack baremetal node create --driver iscsi_ilo \ - --driver-info ilo_address= \ - --driver-info ilo_username= \ - --driver-info ilo_password= \ - --driver-info ilo_deploy_iso= - -Boot modes -~~~~~~~~~~ -Please refer to `Boot mode support`_ for more information. - -UEFI Secure Boot -~~~~~~~~~~~~~~~~ -Please refer to `UEFI Secure Boot Support`_ for more information. - -Node cleaning -~~~~~~~~~~~~~ -Please refer to `Node Cleaning Support`_ for more information. - -Hardware Inspection -~~~~~~~~~~~~~~~~~~~ -Please refer to `Hardware Inspection Support`_ for more information. - -Swiftless deploy for intermediate deploy and boot images -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Please refer to `Swiftless deploy for intermediate images`_ for more -information. - -HTTP(S) Based Deploy -~~~~~~~~~~~~~~~~~~~~ -Please refer to `HTTP(S) Based Deploy Support`_ for more information. - -iLO drivers with standalone ironic -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Please refer to `Support for iLO drivers with Standalone Ironic`_ for -more information. - -RAID Configuration -~~~~~~~~~~~~~~~~~~ -Please refer to `RAID Support`_ for more information. - -agent_ilo driver -^^^^^^^^^^^^^^^^ - -Overview -~~~~~~~~ -``agent_ilo`` driver was introduced as an alternative to ``agent_ipmitool`` -and ``agent_ipminative`` drivers for HPE ProLiant servers. ``agent_ilo`` driver -uses virtual media feature in HPE ProLiant bare metal servers to boot up the -Ironic Python Agent (IPA) on the bare metal node instead of using PXE. For -more information on IPA, refer -https://wiki.openstack.org/wiki/Ironic-python-agent. - -Target Users -~~~~~~~~~~~~ -* Users who do not want to use PXE/TFTP protocol on their data centres. -* Users who have concerns on PXE based agent driver's security and - want to have a security enhanced PXE-less deployment mechanism. - - The PXE based agent drivers pass management information in clear-text to - the bare metal node. However, if swift proxy server and glance have HTTPS - endpoints (See :ref:`EnableHTTPSinSwift`, :ref:`EnableHTTPSinGlance` for more - information), the ``agent_ilo`` driver provides enhanced security by - exchanging authtoken and management information with swift and glance - endpoints over HTTPS. The management information and deploy ramdisk will be - retrieved over encrypted management network via iLO. - -Tested Platforms -~~~~~~~~~~~~~~~~ -This driver should work on HPE ProLiant Gen7 servers with iLO 3, Gen8 and Gen9 -servers with iLO 4 and Gen10 servers with iLO 5. It has been tested with the -following servers: - -* ProLiant DL380 G7 -* ProLiant DL380e Gen8 -* ProLiant DL580e Gen8 -* ProLiant DL360 Gen9 UEFI -* ProLiant DL380 Gen9 UEFI -* ProLiant DL180 Gen9 UEFI -* ProLiant XL450 Gen9 UEFI -* ProLiant DL360 Gen10 - -For more up-to-date information, check the -`iLO driver wiki page `_. - -Features -~~~~~~~~ -* PXE-less deploy with virtual media using Ironic Python Agent(IPA). -* Support for out-of-band cleaning operations. -* Remote Console -* HW Sensors -* IPA runs on the bare metal node and pulls the image directly from swift. -* Supports booting the instance from virtual media (netboot) as well as booting - locally from disk. By default, the instance will always boot from virtual - media for partition images. -* Segregates management info from data channel. -* UEFI Boot Support -* UEFI Secure Boot Support -* Support to use default in-band cleaning operations supported by - Ironic Python Agent. For more details, see :ref:`InbandvsOutOfBandCleaning`. -* Support for out-of-band hardware inspection. -* Swiftless deploy for intermediate images. -* HTTP(S) Based Deploy. -* iLO drivers with standalone ironic. -* Supports tenant network isolation for node instances provisioned for - vlan type networks. - -Requirements -~~~~~~~~~~~~ -* **iLO 4** or **iLO 5 Advanced License** needs to be installed on iLO to - enable Virtual Media Boot feature. -* **Swift Object Storage Service** - iLO driver uses swift to store temporary - FAT images as well as boot ISO images. -* **Glance Image Service with swift configured as its backend** - When using - ``agent_ilo`` driver, the image containing the agent is retrieved from - swift directly by the iLO. - -Deploy Process -~~~~~~~~~~~~~~ - -Please refer to `Netboot with glance and swift`_ and -`Localboot with glance and swift for partition images`_ for the deploy process -of partition image and `Localboot with glance and swift`_ for the deploy -process of whole disk image. - -Configuring and Enabling the driver -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Please refer to `Glance Configuration`_ and `Enable driver`_. - -Registering ProLiant node in ironic -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Nodes configured for iLO driver should have the ``driver`` property set to -``agent_ilo``. The following configuration values are also required in -``driver_info``: - -- ``ilo_address``: IP address or hostname of the iLO. -- ``ilo_username``: Username for the iLO with administrator privileges. -- ``ilo_password``: Password for the above iLO user. -- ``ilo_deploy_iso``: The glance UUID of the deploy ramdisk ISO image. -- ``ca_file``: (optional) CA certificate file to validate iLO. -- ``client_port``: (optional) Port to be used for iLO operations if you are - using a custom port on the iLO. Default port used is 443. -- ``client_timeout``: (optional) Timeout for iLO operations. Default timeout - is 60 seconds. -- ``console_port``: (optional) Node's UDP port for console access. Any unused - port on the ironic conductor node may be used. - -.. note:: - To update SSL certificates into iLO, you can refer to `HPE Integrated - Lights-Out Security Technology Brief `_. - You can use iLO hostname or IP address as a 'Common Name (CN)' while - generating Certificate Signing Request (CSR). Use the same value as - `ilo_address` while enrolling node to Bare Metal service to avoid SSL - certificate validation errors related to hostname mismatch. - -.. note:: - If configuration values for ``ca_file``, ``client_port`` and - ``client_timeout`` are not provided in the ``driver_info`` of the node, - the corresponding config variables defined under ``[ilo]`` section in - ironic.conf will be used. - -For example, you could run a similar command like below to enroll the ProLiant -node:: - - openstack baremetal node create --driver agent_ilo \ - --driver-info ilo_address= \ - --driver-info ilo_username= \ - --driver-info ilo_password= \ - --driver-info ilo_deploy_iso= - -Boot modes -~~~~~~~~~~ -Please refer to `Boot mode support`_ for more information. - -UEFI Secure Boot -~~~~~~~~~~~~~~~~ -Please refer to `UEFI Secure Boot Support`_ for more information. - -Node Cleaning -~~~~~~~~~~~~~ -Please refer to `Node Cleaning Support`_ for more information. - -Hardware Inspection -~~~~~~~~~~~~~~~~~~~ -Please refer to `Hardware Inspection Support`_ for more information. - -Swiftless deploy for intermediate deploy and boot images -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Please refer to `Swiftless deploy for intermediate images`_ for more -information. - -HTTP(S) Based Deploy -~~~~~~~~~~~~~~~~~~~~ -Please refer to `HTTP(S) Based Deploy Support`_ for more information. - -iLO drivers with standalone ironic -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Please refer to `Support for iLO drivers with Standalone Ironic`_ for -more information. - -RAID Configuration -~~~~~~~~~~~~~~~~~~ -Please refer to `RAID Support`_ for more information. - -pxe_ilo driver -^^^^^^^^^^^^^^ - -Overview -~~~~~~~~ -``pxe_ilo`` driver uses PXE/iSCSI (just like ``pxe_ipmitool`` driver) to -deploy the image and uses iLO to do power and management operations on the -bare metal node(instead of using IPMI). - -Target Users -~~~~~~~~~~~~ -* Users who want to use PXE/iSCSI for deployment in their environment or who - don't have Advanced License in their iLO. -* Users who don't want to configure boot mode manually on the bare metal node. - -Tested Platforms -~~~~~~~~~~~~~~~~ -This driver should work on HPE ProLiant Gen7 servers with iLO 3, Gen8 and Gen9 -servers with iLO 4 and Gen10 servers with iLO 5. It has been tested with the -following servers: - -* ProLiant DL380 G7 -* ProLiant DL380e Gen8 -* ProLiant DL380e Gen8 -* ProLiant DL580 Gen8 (BIOS/UEFI) -* ProLiant DL360 Gen9 UEFI -* ProLiant DL380 Gen9 UEFI -* ProLiant XL450 Gen9 UEFI -* ProLiant DL360 Gen10 - -For more up-to-date information, check the -`iLO driver wiki page `_. - -Features -~~~~~~~~ -* Automatic detection of current boot mode. -* Automatic setting of the required boot mode, if UEFI boot mode is requested - by the nova flavor's extra spec. -* Supports both out-of-band and in-band cleaning operations. For more details, - see :ref:`InbandvsOutOfBandCleaning`. -* Support for out-of-band hardware inspection. -* Supports UEFI Boot mode -* Supports UEFI Secure Boot -* HTTP(S) Based Deploy. - -Requirements -~~~~~~~~~~~~ -None. - -Configuring and Enabling the driver -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -1. Build a deploy image, see :ref:`deploy-ramdisk` - -2. Upload this image to glance:: - - glance image-create --name deploy-ramdisk.kernel --disk-format aki --container-format aki < deploy-ramdisk.kernel - glance image-create --name deploy-ramdisk.initramfs --disk-format ari --container-format ari < deploy-ramdisk.initramfs - -3. Add ``pxe_ilo`` to the list of ``enabled_drivers`` in - ``/etc/ironic/ironic.conf``. For example::: - - enabled_drivers = pxe_ipmitool,pxe_ilo - -4. Restart the ironic conductor service:: - - service ironic-conductor restart - -Registering ProLiant node in ironic -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Nodes configured for iLO driver should have the ``driver`` property set to -``pxe_ilo``. The following configuration values are also required in -``driver_info``: - -- ``ilo_address``: IP address or hostname of the iLO. -- ``ilo_username``: Username for the iLO with administrator privileges. -- ``ilo_password``: Password for the above iLO user. -- ``deploy_kernel``: The glance UUID of the deployment kernel. -- ``deploy_ramdisk``: The glance UUID of the deployment ramdisk. -- ``ca_file``: (optional) CA certificate file to validate iLO. -- ``client_port``: (optional) Port to be used for iLO operations if you are - using a custom port on the iLO. Default port used is 443. -- ``client_timeout``: (optional) Timeout for iLO operations. Default timeout - is 60 seconds. -- ``console_port``: (optional) Node's UDP port for console access. Any unused - port on the ironic conductor node may be used. - -.. note:: - To update SSL certificates into iLO, you can refer to `HPE Integrated - Lights-Out Security Technology Brief `_. - You can use iLO hostname or IP address as a 'Common Name (CN)' while - generating Certificate Signing Request (CSR). Use the same value as - `ilo_address` while enrolling node to Bare Metal service to avoid SSL - certificate validation errors related to hostname mismatch. - -.. note:: - If configuration values for ``ca_file``, ``client_port`` and - ``client_timeout`` are not provided in the ``driver_info`` of the node, - the corresponding config variables defined under ``[ilo]`` section in - ironic.conf will be used. - -For example, you could run a similar command like below to enroll the ProLiant -node:: - - openstack baremetal node create --driver pxe_ilo \ - --driver-info ilo_address= \ - --driver-info ilo_username= \ - --driver-info ilo_password= \ - --driver-info deploy_kernel= \ - --driver-info deploy_ramdisk= - -Boot modes -~~~~~~~~~~ -Please refer to `Boot mode support`_ for more information. - -UEFI Secure Boot -~~~~~~~~~~~~~~~~ -Please refer to `UEFI Secure Boot Support`_ for more information. - -Node Cleaning -~~~~~~~~~~~~~ -Please refer to `Node Cleaning Support`_ for more information. - -Hardware Inspection -~~~~~~~~~~~~~~~~~~~ -Please refer to `Hardware Inspection Support`_ for more information. - -HTTP(S) Based Deploy -~~~~~~~~~~~~~~~~~~~~ -Please refer to `HTTP(S) Based Deploy Support`_ for more information. - -iLO drivers with standalone ironic -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Please refer to `Support for iLO drivers with Standalone Ironic`_ for more information. - -RAID Configuration -~~~~~~~~~~~~~~~~~~ -Please refer to `RAID Support`_ for more information. - Functionalities across drivers ============================== @@ -1042,10 +497,10 @@ cloud-image.vmlinuz and cloud-image.qcow2 in the current working directory:: In UEFI secure boot, digitally signed bootloader should be able to validate digital signatures of kernel during boot process. This requires that the bootloader contains the digital signatures of the kernel. - For ``iscsi_ilo`` driver, it is recommended that ``boot_iso`` property for - user image contains the glance UUID of the boot ISO. - If ``boot_iso`` property is not updated in glance for the user image, it - would create the ``boot_iso`` using bootloader from the deploy iso. This + For the ``ilo-virtual-media`` boot interface, it is recommended that + ``boot_iso`` property for user image contains the glance UUID of the boot + ISO. If ``boot_iso`` property is not updated in glance for the user image, + it would create the ``boot_iso`` using bootloader from the deploy iso. This ``boot_iso`` will be able to boot the user image in UEFI secure boot environment only if the bootloader is signed and can validate digital signatures of user image kernel. @@ -1097,7 +552,7 @@ Supported **Automated** Cleaning Operations diskimage-builder from Ocata release. By default, this step is disabled. See `Disk Erase Support`_ for more details. -* For in-band cleaning operations supported by ``agent_ilo`` driver, see +* For supported in-band cleaning operations, see :ref:`InbandvsOutOfBandCleaning`. * All the automated cleaning steps have an explicit configuration option for @@ -1132,8 +587,8 @@ Supported **Manual** Cleaning Operations Activates the iLO Advanced license. This is an out-of-band manual cleaning step associated with the ``management`` interface. See `Activating iLO Advanced license as manual clean step`_ for user guidance - on usage. Please note that this operation cannot be performed using virtual - media based drivers like ``iscsi_ilo`` and ``agent_ilo`` as they need this + on usage. Please note that this operation cannot be performed using the + ``ilo-virtual-media`` boot interface as it needs this type of advanced license already active to use virtual media to boot into to start cleaning operation. Virtual media is an advanced feature. If an advanced license is already active and the user wants to overwrite the @@ -1294,8 +749,7 @@ See :ref:`capabilities-discovery` for more details and examples. Swiftless deploy for intermediate images ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The hardware type ``ilo`` with ``ilo-virtual-media`` as boot interface and -virtual media based classical drivers (``iscsi_ilo`` and ``agent_ilo``) +The hardware type ``ilo`` with ``ilo-virtual-media`` as boot interface can deploy and boot the server with and without ``swift`` being used for hosting the intermediate temporary floppy image (holding metadata for deploy kernel and ramdisk) and the boot ISO. A local HTTP(S) web server on @@ -1351,13 +805,6 @@ and `Web server configuration on conductor`_ needs to be configured for hosting intermediate images on conductor as described in `Swiftless deploy for intermediate images`_. -Deploy Process -~~~~~~~~~~~~~~ -``iscsi_ilo`` and ``agent_ilo`` supports both netboot and localboot. Please refer -to `Netboot in standalone ironic`_ and `Localboot in standalone ironic`_ -for details of deploy process for netboot and localboot respectively. -For ``pxe_ilo``, the deploy process is same as native ``pxe_ipmitool`` driver. - Deploy Process ============== diff --git a/doc/source/install/enabling-drivers.rst b/doc/source/install/enabling-drivers.rst index 6b5c746eca..f2584df81c 100644 --- a/doc/source/install/enabling-drivers.rst +++ b/doc/source/install/enabling-drivers.rst @@ -6,7 +6,7 @@ Introduction 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 +*classic drivers* (for example, ``pxe_ipmitool``, etc.) and the newer *hardware types* (for example, generic ``redfish`` and ``ipmi`` or vendor-specific ``ilo`` and ``irmc``). @@ -311,7 +311,7 @@ option, for example: .. code-block:: ini [DEFAULT] - enabled_drivers = pxe_ipmitool,pxe_ilo,pxe_drac + enabled_drivers = pxe_ipmitool,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 diff --git a/ironic/drivers/ilo.py b/ironic/drivers/ilo.py index 09b53cef34..413a92f6f1 100644 --- a/ironic/drivers/ilo.py +++ b/ironic/drivers/ilo.py @@ -15,13 +15,7 @@ iLO Driver for managing HP Proliant Gen8 and above servers. """ -from oslo_utils import importutils - -from ironic.common import exception -from ironic.common.i18n import _ -from ironic.drivers import base from ironic.drivers import generic -from ironic.drivers.modules import agent from ironic.drivers.modules.ilo import boot from ironic.drivers.modules.ilo import console from ironic.drivers.modules.ilo import inspect @@ -29,7 +23,6 @@ from ironic.drivers.modules.ilo import management from ironic.drivers.modules.ilo import power from ironic.drivers.modules.ilo import vendor from ironic.drivers.modules import inspector -from ironic.drivers.modules import iscsi_deploy from ironic.drivers.modules import noop @@ -70,75 +63,3 @@ class IloHardware(generic.GenericHardware): def supported_vendor_interfaces(self): """List of supported power interfaces.""" return [vendor.VendorPassthru, noop.NoVendor] - - -class IloVirtualMediaIscsiDriver(base.BaseDriver): - """IloDriver using IloClient interface. - - This driver implements the `core` functionality using - :class:ironic.drivers.modules.ilo.power.IloPower for power management. - and - :class:ironic.drivers.modules.ilo.deploy.IloVirtualMediaIscsiDeploy for - deploy. - """ - - def __init__(self): - if not importutils.try_import('proliantutils'): - raise exception.DriverLoadError( - driver=self.__class__.__name__, - reason=_("Unable to import proliantutils library")) - - self.power = power.IloPower() - self.boot = boot.IloVirtualMediaBoot() - self.deploy = iscsi_deploy.ISCSIDeploy() - self.console = console.IloConsoleInterface() - self.management = management.IloManagement() - self.vendor = vendor.VendorPassthru() - self.inspect = inspect.IloInspect() - self.raid = agent.AgentRAID() - - @classmethod - def to_hardware_type(cls): - return 'ilo', {'boot': 'ilo-virtual-media', - 'console': 'ilo', - 'deploy': 'iscsi', - 'inspect': 'ilo', - 'management': 'ilo', - 'power': 'ilo', - 'raid': 'agent', - 'vendor': 'ilo'} - - -class IloVirtualMediaAgentDriver(base.BaseDriver): - """IloDriver using IloClient interface. - - This driver implements the `core` functionality using - :class:ironic.drivers.modules.ilo.power.IloPower for power management - and - :class:ironic.drivers.modules.ilo.deploy.IloVirtualMediaAgentDriver for - deploy. - """ - - def __init__(self): - if not importutils.try_import('proliantutils'): - raise exception.DriverLoadError( - driver=self.__class__.__name__, - reason=_("Unable to import proliantutils library")) - - self.power = power.IloPower() - self.boot = boot.IloVirtualMediaBoot() - self.deploy = agent.AgentDeploy() - self.console = console.IloConsoleInterface() - self.management = management.IloManagement() - self.inspect = inspect.IloInspect() - self.raid = agent.AgentRAID() - - @classmethod - def to_hardware_type(cls): - return 'ilo', {'boot': 'ilo-virtual-media', - 'console': 'ilo', - 'deploy': 'direct', - 'inspect': 'ilo', - 'management': 'ilo', - 'power': 'ilo', - 'raid': 'agent'} diff --git a/ironic/drivers/modules/ilo/boot.py b/ironic/drivers/modules/ilo/boot.py index 4ef880f478..f6012db940 100644 --- a/ironic/drivers/modules/ilo/boot.py +++ b/ironic/drivers/modules/ilo/boot.py @@ -521,8 +521,8 @@ class IloVirtualMediaBoot(base.BootInterface): msg = 'Virtual media can not boot volume in BIOS boot mode.' raise exception.InstanceDeployFailure(msg) else: - # For iscsi_ilo driver, we boot from disk every time if the image - # deployed is a whole disk image. + # Boot from disk every time if the image deployed is + # a whole disk image. node = task.node iwdi = node.driver_internal_info.get('is_whole_disk_image') if deploy_utils.get_boot_option(node) == "local" or iwdi: diff --git a/ironic/drivers/modules/iscsi_deploy.py b/ironic/drivers/modules/iscsi_deploy.py index 05fac5029b..35fb9a08f2 100644 --- a/ironic/drivers/modules/iscsi_deploy.py +++ b/ironic/drivers/modules/iscsi_deploy.py @@ -440,9 +440,8 @@ class ISCSIDeploy(AgentDeployMixin, base.DeployInterface): 'volume.', node.uuid) return - # TODO(rameshg87): iscsi_ilo driver uses this method. Remove - # and copy-paste it's contents here once iscsi_ilo deploy driver - # broken down into separate boot and deploy implementations. + # TODO(rameshg87): iscsi_ilo driver used to call this function. Remove + # and copy-paste it's contents here. validate(task) @METRICS.timer('ISCSIDeploy.deploy') diff --git a/ironic/drivers/pxe.py b/ironic/drivers/pxe.py index 0c2e025110..ab2f9fca71 100644 --- a/ironic/drivers/pxe.py +++ b/ironic/drivers/pxe.py @@ -24,15 +24,8 @@ from ironic.common import exception from ironic.common.i18n import _ from ironic.drivers import base from ironic.drivers import ipmi -from ironic.drivers.modules import agent from ironic.drivers.modules.cimc import management as cimc_mgmt from ironic.drivers.modules.cimc import power as cimc_power -from ironic.drivers.modules.ilo import boot as ilo_boot -from ironic.drivers.modules.ilo import console as ilo_console -from ironic.drivers.modules.ilo import inspect as ilo_inspect -from ironic.drivers.modules.ilo import management as ilo_management -from ironic.drivers.modules.ilo import power as ilo_power -from ironic.drivers.modules.ilo import vendor as ilo_vendor from ironic.drivers.modules import inspector from ironic.drivers.modules import ipmitool from ironic.drivers.modules.irmc import boot as irmc_boot @@ -54,43 +47,6 @@ PXEAndIPMIToolDriver = ipmi.PXEAndIPMIToolDriver PXEAndIPMIToolAndSocatDriver = ipmi.PXEAndIPMIToolAndSocatDriver -class PXEAndIloDriver(base.BaseDriver): - """PXE + Ilo Driver using IloClient interface. - - This driver implements the `core` functionality using - :class:`ironic.drivers.modules.ilo.power.IloPower` for - power management - :class:`ironic.drivers.modules.iscsi_deploy.ISCSIDeploy` for - image deployment. - :class:`ironic.drivers.modules.ilo.boot.IloPXEBoot` for boot - related actions. - """ - def __init__(self): - if not importutils.try_import('proliantutils'): - raise exception.DriverLoadError( - driver=self.__class__.__name__, - reason=_("Unable to import proliantutils library")) - self.power = ilo_power.IloPower() - self.boot = ilo_boot.IloPXEBoot() - self.deploy = iscsi_deploy.ISCSIDeploy() - self.vendor = ilo_vendor.VendorPassthru() - self.console = ilo_console.IloConsoleInterface() - self.management = ilo_management.IloManagement() - self.inspect = ilo_inspect.IloInspect() - self.raid = agent.AgentRAID() - - @classmethod - def to_hardware_type(cls): - return 'ilo', {'boot': 'ilo-pxe', - 'console': 'ilo', - 'deploy': 'iscsi', - 'inspect': 'ilo', - 'management': 'ilo', - 'power': 'ilo', - 'raid': 'agent', - 'vendor': 'ilo'} - - class PXEAndSNMPDriver(base.BaseDriver): """PXE + SNMP driver. diff --git a/ironic/tests/unit/drivers/modules/ilo/test_boot.py b/ironic/tests/unit/drivers/modules/ilo/test_boot.py index c94cf6c383..7fa27363b6 100644 --- a/ironic/tests/unit/drivers/modules/ilo/test_boot.py +++ b/ironic/tests/unit/drivers/modules/ilo/test_boot.py @@ -39,26 +39,19 @@ from ironic.drivers.modules.ilo import management as ilo_management from ironic.drivers.modules import pxe from ironic.drivers.modules.storage import noop as noop_storage from ironic.drivers import utils as driver_utils -from ironic.tests.unit.db import base as db_base -from ironic.tests.unit.db import utils as db_utils -from ironic.tests.unit.objects import utils as obj_utils +from ironic.tests.unit.drivers.modules.ilo import test_common if six.PY3: import io file = io.BytesIO -INFO_DICT = db_utils.get_test_ilo_info() CONF = cfg.CONF -class IloBootCommonMethodsTestCase(db_base.DbTestCase): +class IloBootCommonMethodsTestCase(test_common.BaseIloTest): - def setUp(self): - super(IloBootCommonMethodsTestCase, self).setUp() - self.config(enabled_drivers=['iscsi_ilo']) - self.node = obj_utils.create_test_node( - self.context, driver='iscsi_ilo', driver_info=INFO_DICT) + boot_interface = 'ilo-virtual-media' def test_parse_driver_info(self): self.node.driver_info['ilo_deploy_iso'] = 'deploy-iso' @@ -72,13 +65,9 @@ class IloBootCommonMethodsTestCase(db_base.DbTestCase): ilo_boot.parse_driver_info, self.node) -class IloBootPrivateMethodsTestCase(db_base.DbTestCase): +class IloBootPrivateMethodsTestCase(test_common.BaseIloTest): - def setUp(self): - super(IloBootPrivateMethodsTestCase, self).setUp() - self.config(enabled_drivers=['iscsi_ilo']) - self.node = obj_utils.create_test_node( - self.context, driver='iscsi_ilo', driver_info=INFO_DICT) + boot_interface = 'ilo-virtual-media' def test__get_boot_iso_object_name(self): boot_iso_actual = ilo_boot._get_boot_iso_object_name(self.node) @@ -668,23 +657,9 @@ class IloBootPrivateMethodsTestCase(db_base.DbTestCase): self.assertNotIn('deploy_boot_mode', task.node.instance_info) -class IloVirtualMediaBootTestCase(db_base.DbTestCase): +class IloVirtualMediaBootTestCase(test_common.BaseIloTest): - def setUp(self): - super(IloVirtualMediaBootTestCase, self).setUp() - self.config(enabled_hardware_types=['ilo'], - enabled_boot_interfaces=['ilo-virtual-media'], - enabled_console_interfaces=['ilo'], - enabled_deploy_interfaces=['iscsi'], - enabled_inspect_interfaces=['ilo'], - enabled_management_interfaces=['ilo'], - enabled_power_interfaces=['ilo'], - enabled_raid_interfaces=['no-raid'], - enabled_rescue_interfaces=['agent'], - enabled_vendor_interfaces=['no-vendor']) - self.config(enabled_hardware_types=['ilo']) - self.node = obj_utils.create_test_node( - self.context, driver='ilo', driver_info=INFO_DICT) + boot_interface = 'ilo-virtual-media' @mock.patch.object(noop_storage.NoopStorage, 'should_write_image', autospec=True) @@ -1126,13 +1101,9 @@ class IloVirtualMediaBootTestCase(db_base.DbTestCase): task.driver.boot.validate_rescue, task) -class IloPXEBootTestCase(db_base.DbTestCase): +class IloPXEBootTestCase(test_common.BaseIloTest): - def setUp(self): - super(IloPXEBootTestCase, self).setUp() - self.config(enabled_drivers=['pxe_ilo']) - self.node = obj_utils.create_test_node( - self.context, driver='pxe_ilo', driver_info=INFO_DICT) + boot_interface = 'ilo-pxe' @mock.patch.object(ilo_boot, 'prepare_node_for_deploy', spec_set=True, autospec=True) diff --git a/ironic/tests/unit/drivers/modules/ilo/test_common.py b/ironic/tests/unit/drivers/modules/ilo/test_common.py index efb217eec8..aadb1a20cc 100644 --- a/ironic/tests/unit/drivers/modules/ilo/test_common.py +++ b/ironic/tests/unit/drivers/modules/ilo/test_common.py @@ -55,6 +55,8 @@ CONF = cfg.CONF class BaseIloTest(db_base.DbTestCase): + boot_interface = None + def setUp(self): super(BaseIloTest, self).setUp() self.config(enabled_hardware_types=['ilo', 'fake-hardware'], @@ -62,11 +64,14 @@ class BaseIloTest(db_base.DbTestCase): 'fake'], enabled_power_interfaces=['ilo', 'fake'], enabled_management_interfaces=['ilo', 'fake'], - enabled_inspect_interfaces=['ilo', 'fake', 'no-inspect']) + enabled_inspect_interfaces=['ilo', 'fake', 'no-inspect'], + enabled_console_interfaces=['ilo', 'fake', 'no-console'], + enabled_vendor_interfaces=['ilo', 'fake', 'no-vendor']) self.info = INFO_DICT.copy() self.node = obj_utils.create_test_node( self.context, uuid=uuidutils.generate_uuid(), - driver='ilo', driver_info=self.info) + driver='ilo', boot_interface=self.boot_interface, + driver_info=self.info) class IloValidateParametersTestCase(BaseIloTest): diff --git a/ironic/tests/unit/drivers/modules/ilo/test_console.py b/ironic/tests/unit/drivers/modules/ilo/test_console.py index 884f083228..6f885952e9 100644 --- a/ironic/tests/unit/drivers/modules/ilo/test_console.py +++ b/ironic/tests/unit/drivers/modules/ilo/test_console.py @@ -22,25 +22,17 @@ from ironic.common import exception from ironic.conductor import task_manager from ironic.drivers.modules.ilo import common as ilo_common from ironic.drivers.modules import ipmitool -from ironic.tests.unit.db import base as db_base -from ironic.tests.unit.db import utils as db_utils -from ironic.tests.unit.objects import utils as obj_utils +from ironic.tests.unit.drivers.modules.ilo import test_common if six.PY3: import io file = io.BytesIO -INFO_DICT = db_utils.get_test_ilo_info() +class IloConsoleInterfaceTestCase(test_common.BaseIloTest): -class IloConsoleInterfaceTestCase(db_base.DbTestCase): - - def setUp(self): - super(IloConsoleInterfaceTestCase, self).setUp() - self.config(enabled_drivers=['iscsi_ilo']) - self.node = obj_utils.create_test_node( - self.context, driver='iscsi_ilo', driver_info=INFO_DICT) + boot_interface = 'ilo-virtual-media' @mock.patch.object(ipmitool.IPMIShellinaboxConsole, 'validate', spec_set=True, autospec=True) diff --git a/ironic/tests/unit/drivers/modules/ilo/test_vendor.py b/ironic/tests/unit/drivers/modules/ilo/test_vendor.py index c8e600f7e6..2a9ebc61f8 100644 --- a/ironic/tests/unit/drivers/modules/ilo/test_vendor.py +++ b/ironic/tests/unit/drivers/modules/ilo/test_vendor.py @@ -24,22 +24,12 @@ from ironic.conductor import utils as manager_utils from ironic.drivers.modules import deploy_utils from ironic.drivers.modules.ilo import common as ilo_common from ironic.drivers.modules.ilo import vendor as ilo_vendor -from ironic.tests.unit.db import base as db_base -from ironic.tests.unit.db import utils as db_utils -from ironic.tests.unit.objects import utils as obj_utils +from ironic.tests.unit.drivers.modules.ilo import test_common -INFO_DICT = db_utils.get_test_ilo_info() +class VendorPassthruTestCase(test_common.BaseIloTest): - -class VendorPassthruTestCase(db_base.DbTestCase): - - def setUp(self): - super(VendorPassthruTestCase, self).setUp() - self.config(enabled_drivers=['iscsi_ilo']) - self.node = obj_utils.create_test_node(self.context, - driver='iscsi_ilo', - driver_info=INFO_DICT) + boot_interface = 'ilo-virtual-media' @mock.patch.object(manager_utils, 'node_power_action', spec_set=True, autospec=True) diff --git a/ironic/tests/unit/drivers/modules/test_deploy_utils.py b/ironic/tests/unit/drivers/modules/test_deploy_utils.py index 8f3fbe26db..62ee119da2 100644 --- a/ironic/tests/unit/drivers/modules/test_deploy_utils.py +++ b/ironic/tests/unit/drivers/modules/test_deploy_utils.py @@ -1256,14 +1256,11 @@ class OtherFunctionTestCase(db_base.DbTestCase): utils.get_ironic_api_url) -class VirtualMediaDeployUtilsTestCase(db_base.DbTestCase): +class GetSingleNicTestCase(db_base.DbTestCase): def setUp(self): - super(VirtualMediaDeployUtilsTestCase, self).setUp() - self.config(enabled_drivers=['iscsi_ilo']) - info_dict = db_utils.get_test_ilo_info() - self.node = obj_utils.create_test_node( - self.context, driver='iscsi_ilo', driver_info=info_dict) + super(GetSingleNicTestCase, self).setUp() + self.node = obj_utils.create_test_node(self.context) def test_get_single_nic_with_vif_port_id(self): obj_utils.create_test_port( diff --git a/ironic/tests/unit/drivers/test_ilo.py b/ironic/tests/unit/drivers/test_ilo.py index e6e056a207..5142708239 100644 --- a/ironic/tests/unit/drivers/test_ilo.py +++ b/ironic/tests/unit/drivers/test_ilo.py @@ -16,19 +16,9 @@ Test class for iLO Drivers """ -import mock -import testtools - -from ironic.common import exception from ironic.conductor import task_manager from ironic.drivers import ilo from ironic.drivers.modules import agent -from ironic.drivers.modules.ilo import boot -from ironic.drivers.modules.ilo import console -from ironic.drivers.modules.ilo import inspect -from ironic.drivers.modules.ilo import management -from ironic.drivers.modules.ilo import power -from ironic.drivers.modules.ilo import vendor from ironic.drivers.modules import inspector from ironic.drivers.modules import iscsi_deploy from ironic.drivers.modules import noop @@ -153,52 +143,3 @@ class IloHardwareTestCase(db_base.DbTestCase): agent.AgentRescue) self.assertIsInstance(task.driver.vendor, ilo.vendor.VendorPassthru) - - -@mock.patch.object(ilo.importutils, 'try_import', spec_set=True, - autospec=True) -class IloVirtualMediaIscsiDriversTestCase(testtools.TestCase): - - def test_ilo_iscsi_driver(self, mock_try_import): - mock_try_import.return_value = True - - driver = ilo.IloVirtualMediaIscsiDriver() - - self.assertIsInstance(driver.power, power.IloPower) - self.assertIsInstance(driver.boot, boot.IloVirtualMediaBoot) - self.assertIsInstance(driver.deploy, iscsi_deploy.ISCSIDeploy) - self.assertIsInstance(driver.console, console.IloConsoleInterface) - self.assertIsInstance(driver.management, management.IloManagement) - self.assertIsInstance(driver.vendor, vendor.VendorPassthru) - self.assertIsInstance(driver.inspect, inspect.IloInspect) - self.assertIsInstance(driver.raid, agent.AgentRAID) - - def test_ilo_iscsi_driver_exc(self, mock_try_import): - mock_try_import.return_value = None - - self.assertRaises(exception.DriverLoadError, - ilo.IloVirtualMediaIscsiDriver) - - -@mock.patch.object(ilo.importutils, 'try_import', spec_set=True, - autospec=True) -class IloVirtualMediaAgentDriversTestCase(testtools.TestCase): - - def test_ilo_agent_driver(self, mock_try_import): - mock_try_import.return_value = True - - driver = ilo.IloVirtualMediaAgentDriver() - - self.assertIsInstance(driver.power, power.IloPower) - self.assertIsInstance(driver.boot, boot.IloVirtualMediaBoot) - self.assertIsInstance(driver.deploy, agent.AgentDeploy) - self.assertIsInstance(driver.console, console.IloConsoleInterface) - self.assertIsInstance(driver.management, management.IloManagement) - self.assertIsInstance(driver.inspect, inspect.IloInspect) - self.assertIsInstance(driver.raid, agent.AgentRAID) - - def test_ilo_iscsi_driver_exc(self, mock_try_import): - mock_try_import.return_value = None - - self.assertRaises(exception.DriverLoadError, - ilo.IloVirtualMediaAgentDriver) diff --git a/ironic/tests/unit/drivers/test_pxe.py b/ironic/tests/unit/drivers/test_pxe.py index fb5d1a1943..7551a20868 100644 --- a/ironic/tests/unit/drivers/test_pxe.py +++ b/ironic/tests/unit/drivers/test_pxe.py @@ -20,14 +20,8 @@ import mock import testtools from ironic.common import exception -from ironic.drivers.modules import agent from ironic.drivers.modules.cimc import management as cimc_management from ironic.drivers.modules.cimc import power as cimc_power -from ironic.drivers.modules.ilo import console as ilo_console -from ironic.drivers.modules.ilo import inspect as ilo_inspect -from ironic.drivers.modules.ilo import management as ilo_management -from ironic.drivers.modules.ilo import power as ilo_power -from ironic.drivers.modules.ilo import vendor as ilo_vendor from ironic.drivers.modules import ipmitool from ironic.drivers.modules.irmc import boot as irmc_boot from ironic.drivers.modules.irmc import management as irmc_management @@ -42,32 +36,6 @@ from ironic.drivers import pxe class PXEDriversTestCase(testtools.TestCase): - @mock.patch.object(pxe.importutils, 'try_import', spec_set=True, - autospec=True) - def test_pxe_ilo_driver(self, try_import_mock): - try_import_mock.return_value = True - - driver = pxe.PXEAndIloDriver() - - self.assertIsInstance(driver.power, ilo_power.IloPower) - self.assertIsInstance(driver.boot, pxe_module.PXEBoot) - self.assertIsInstance(driver.deploy, iscsi_deploy.ISCSIDeploy) - self.assertIsInstance(driver.vendor, ilo_vendor.VendorPassthru) - self.assertIsInstance(driver.console, - ilo_console.IloConsoleInterface) - self.assertIsInstance(driver.management, - ilo_management.IloManagement) - self.assertIsInstance(driver.inspect, ilo_inspect.IloInspect) - self.assertIsInstance(driver.raid, agent.AgentRAID) - - @mock.patch.object(pxe.importutils, 'try_import', spec_set=True, - autospec=True) - def test_pxe_ilo_driver_import_error(self, try_import_mock): - try_import_mock.return_value = False - - self.assertRaises(exception.DriverLoadError, - pxe.PXEAndIloDriver) - @mock.patch.object(pxe.importutils, 'try_import', spec_set=True, autospec=True) def test_pxe_snmp_driver(self, try_import_mock): diff --git a/releasenotes/notes/no-classic-ilo-7822af6821d2f1cc.yaml b/releasenotes/notes/no-classic-ilo-7822af6821d2f1cc.yaml new file mode 100644 index 0000000000..a91bccc884 --- /dev/null +++ b/releasenotes/notes/no-classic-ilo-7822af6821d2f1cc.yaml @@ -0,0 +1,5 @@ +--- +upgrade: + - | + The deprecated iLO classic drivers ``pxe_ilo``, ``iscsi_ilo`` and + ``agent_ilo`` have been removed. Please use the ``ilo`` hardware type. diff --git a/setup.cfg b/setup.cfg index 807a72f7ce..1a7cc3bb8a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -53,18 +53,15 @@ ironic.dhcp = none = ironic.dhcp.none:NoneDHCPApi ironic.drivers = - agent_ilo = ironic.drivers.ilo:IloVirtualMediaAgentDriver agent_ipmitool = ironic.drivers.ipmi:AgentAndIPMIToolDriver agent_ipmitool_socat = ironic.drivers.ipmi:AgentAndIPMIToolAndSocatDriver agent_irmc = ironic.drivers.irmc:IRMCVirtualMediaAgentDriver agent_pxe_oneview = ironic.drivers.oneview:AgentPXEOneViewDriver agent_ucs = ironic.drivers.agent:AgentAndUcsDriver - iscsi_ilo = ironic.drivers.ilo:IloVirtualMediaIscsiDriver iscsi_irmc = ironic.drivers.irmc:IRMCVirtualMediaIscsiDriver iscsi_pxe_oneview = ironic.drivers.oneview:ISCSIPXEOneViewDriver pxe_ipmitool = ironic.drivers.ipmi:PXEAndIPMIToolDriver pxe_ipmitool_socat = ironic.drivers.ipmi:PXEAndIPMIToolAndSocatDriver - pxe_ilo = ironic.drivers.pxe:PXEAndIloDriver pxe_drac = ironic.drivers.drac:PXEDracDriver pxe_drac_inspector = ironic.drivers.drac:PXEDracInspectorDriver pxe_snmp = ironic.drivers.pxe:PXEAndSNMPDriver