Remove the ilo classic drivers

This removes pxe_ilo, iscsi_ilo and agent_ilo. Also removed is
the whole documentation section dedicated to them.

Change-Id: Ie6f8a65d68ce4eb9c8467c416df5f3a35f0abe98
This commit is contained in:
Dmitry Tantsur 2018-06-22 16:50:51 +02:00
parent cfea538ea3
commit 9c7729d6b7
16 changed files with 46 additions and 858 deletions

View File

@ -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

View File

@ -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=<ilo-ip-address> \
--driver-info ilo_username=<ilo-username> \
--driver-info ilo_password=<ilo-password> \
--driver-info ilo_deploy_iso=<glance-uuid-of-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=<ilo-ip-address> \
--driver-info ilo_username=<ilo-username> \
--driver-info ilo_password=<ilo-password> \
--driver-info deploy_kernel=<glance-uuid-of-pxe-deploy-kernel> \
--driver-info deploy_ramdisk=<glance-uuid-of-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=<ilo-ip-address> \
--driver-info ilo_username=<ilo-username> \
--driver-info ilo_password=<ilo-password> \
--driver-info ilo_deploy_iso=<glance-uuid-of-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 <https://wiki.openstack.org/wiki/Ironic/Drivers/iLODrivers>`_.
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 <http://h20564.www2.hpe.com/hpsc/doc/public/display?docId=c04530504>`_.
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=<ilo-ip-address> \
--driver-info ilo_username=<ilo-username> \
--driver-info ilo_password=<ilo-password> \
--driver-info ilo_deploy_iso=<glance-uuid-of-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 <https://wiki.openstack.org/wiki/Ironic/Drivers/iLODrivers>`_.
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 <http://h20564.www2.hpe.com/hpsc/doc/public/display?docId=c04530504>`_.
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=<ilo-ip-address> \
--driver-info ilo_username=<ilo-username> \
--driver-info ilo_password=<ilo-password> \
--driver-info ilo_deploy_iso=<glance-uuid-of-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 <https://wiki.openstack.org/wiki/Ironic/Drivers/iLODrivers>`_.
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 <http://h20564.www2.hpe.com/hpsc/doc/public/display?docId=c04530504>`_.
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=<ilo-ip-address> \
--driver-info ilo_username=<ilo-username> \
--driver-info ilo_password=<ilo-password> \
--driver-info deploy_kernel=<glance-uuid-of-pxe-deploy-kernel> \
--driver-info deploy_ramdisk=<glance-uuid-of-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
==============

View File

@ -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

View File

@ -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'}

View File

@ -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:

View File

@ -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')

View File

@ -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.

View File

@ -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)

View File

@ -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):

View File

@ -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)

View File

@ -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)

View File

@ -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(

View File

@ -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)

View File

@ -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):

View File

@ -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.

View File

@ -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