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:
parent
cfea538ea3
commit
9c7729d6b7
@ -634,7 +634,7 @@ function is_deployed_by_oneview {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function is_deployed_by_ilo {
|
function is_deployed_by_ilo {
|
||||||
[[ -z "${IRONIC_DEPLOY_DRIVER##*ilo}" ]] && return 0
|
[[ "${IRONIC_DEPLOY_DRIVER}" == ilo ]] && return 0
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1966,8 +1966,7 @@ function enroll_nodes {
|
|||||||
node_options+=" --driver-info ilo_address=$bmc_address \
|
node_options+=" --driver-info ilo_address=$bmc_address \
|
||||||
--driver-info ilo_password=$bmc_passwd \
|
--driver-info ilo_password=$bmc_passwd \
|
||||||
--driver-info ilo_username=$bmc_username"
|
--driver-info ilo_username=$bmc_username"
|
||||||
if [[ $IRONIC_DEPLOY_DRIVER != "pxe_ilo" && \
|
if [[ $IRONIC_ENABLED_BOOT_INTERFACES == *"ilo-virtual-media"* ]]; then
|
||||||
$IRONIC_ENABLED_BOOT_INTERFACES == *"ilo-virtual-media"* ]]; then
|
|
||||||
node_options+=" --driver-info ilo_deploy_iso=$IRONIC_DEPLOY_ISO_ID"
|
node_options+=" --driver-info ilo_deploy_iso=$IRONIC_DEPLOY_ISO_ID"
|
||||||
fi
|
fi
|
||||||
elif is_deployed_by_drac; then
|
elif is_deployed_by_drac; then
|
||||||
|
@ -375,551 +375,6 @@ Enable driver
|
|||||||
|
|
||||||
$ service ironic-conductor restart
|
$ 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
|
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
|
In UEFI secure boot, digitally signed bootloader should be able to validate
|
||||||
digital signatures of kernel during boot process. This requires that the
|
digital signatures of kernel during boot process. This requires that the
|
||||||
bootloader contains the digital signatures of the kernel.
|
bootloader contains the digital signatures of the kernel.
|
||||||
For ``iscsi_ilo`` driver, it is recommended that ``boot_iso`` property for
|
For the ``ilo-virtual-media`` boot interface, it is recommended that
|
||||||
user image contains the glance UUID of the boot ISO.
|
``boot_iso`` property for user image contains the glance UUID of the boot
|
||||||
If ``boot_iso`` property is not updated in glance for the user image, it
|
ISO. If ``boot_iso`` property is not updated in glance for the user image,
|
||||||
would create the ``boot_iso`` using bootloader from the deploy iso. This
|
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
|
``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
|
environment only if the bootloader is signed and can validate digital
|
||||||
signatures of user image kernel.
|
signatures of user image kernel.
|
||||||
@ -1097,7 +552,7 @@ Supported **Automated** Cleaning Operations
|
|||||||
diskimage-builder from Ocata release. By default, this step is disabled.
|
diskimage-builder from Ocata release. By default, this step is disabled.
|
||||||
See `Disk Erase Support`_ for more details.
|
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`.
|
:ref:`InbandvsOutOfBandCleaning`.
|
||||||
|
|
||||||
* All the automated cleaning steps have an explicit configuration option for
|
* 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
|
Activates the iLO Advanced license. This is an out-of-band manual cleaning
|
||||||
step associated with the ``management`` interface. See
|
step associated with the ``management`` interface. See
|
||||||
`Activating iLO Advanced license as manual clean step`_ for user guidance
|
`Activating iLO Advanced license as manual clean step`_ for user guidance
|
||||||
on usage. Please note that this operation cannot be performed using virtual
|
on usage. Please note that this operation cannot be performed using the
|
||||||
media based drivers like ``iscsi_ilo`` and ``agent_ilo`` as they need this
|
``ilo-virtual-media`` boot interface as it needs this
|
||||||
type of advanced license already active to use virtual media to boot into
|
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
|
to start cleaning operation. Virtual media is an advanced feature. If an
|
||||||
advanced license is already active and the user wants to overwrite the
|
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
|
Swiftless deploy for intermediate images
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The hardware type ``ilo`` with ``ilo-virtual-media`` as boot interface and
|
The hardware type ``ilo`` with ``ilo-virtual-media`` as boot interface
|
||||||
virtual media based classical drivers (``iscsi_ilo`` and ``agent_ilo``)
|
|
||||||
can deploy and boot the server with and without ``swift`` being used for
|
can deploy and boot the server with and without ``swift`` being used for
|
||||||
hosting the intermediate temporary floppy image (holding metadata 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
|
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
|
intermediate images on conductor as described in
|
||||||
`Swiftless deploy for intermediate images`_.
|
`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
|
Deploy Process
|
||||||
==============
|
==============
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ Introduction
|
|||||||
|
|
||||||
The Bare Metal service delegates actual hardware management to **drivers**.
|
The Bare Metal service delegates actual hardware management to **drivers**.
|
||||||
Starting with the Ocata release, two types of drivers are supported:
|
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``
|
the newer *hardware types* (for example, generic ``redfish`` and ``ipmi``
|
||||||
or vendor-specific ``ilo`` and ``irmc``).
|
or vendor-specific ``ilo`` and ``irmc``).
|
||||||
|
|
||||||
@ -311,7 +311,7 @@ option, for example:
|
|||||||
.. code-block:: ini
|
.. code-block:: ini
|
||||||
|
|
||||||
[DEFAULT]
|
[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.
|
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
|
They have to be available at conductor start-up, and all dependencies must
|
||||||
|
@ -15,13 +15,7 @@
|
|||||||
iLO Driver for managing HP Proliant Gen8 and above servers.
|
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 import generic
|
||||||
from ironic.drivers.modules import agent
|
|
||||||
from ironic.drivers.modules.ilo import boot
|
from ironic.drivers.modules.ilo import boot
|
||||||
from ironic.drivers.modules.ilo import console
|
from ironic.drivers.modules.ilo import console
|
||||||
from ironic.drivers.modules.ilo import inspect
|
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 power
|
||||||
from ironic.drivers.modules.ilo import vendor
|
from ironic.drivers.modules.ilo import vendor
|
||||||
from ironic.drivers.modules import inspector
|
from ironic.drivers.modules import inspector
|
||||||
from ironic.drivers.modules import iscsi_deploy
|
|
||||||
from ironic.drivers.modules import noop
|
from ironic.drivers.modules import noop
|
||||||
|
|
||||||
|
|
||||||
@ -70,75 +63,3 @@ class IloHardware(generic.GenericHardware):
|
|||||||
def supported_vendor_interfaces(self):
|
def supported_vendor_interfaces(self):
|
||||||
"""List of supported power interfaces."""
|
"""List of supported power interfaces."""
|
||||||
return [vendor.VendorPassthru, noop.NoVendor]
|
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'}
|
|
||||||
|
@ -521,8 +521,8 @@ class IloVirtualMediaBoot(base.BootInterface):
|
|||||||
msg = 'Virtual media can not boot volume in BIOS boot mode.'
|
msg = 'Virtual media can not boot volume in BIOS boot mode.'
|
||||||
raise exception.InstanceDeployFailure(msg)
|
raise exception.InstanceDeployFailure(msg)
|
||||||
else:
|
else:
|
||||||
# For iscsi_ilo driver, we boot from disk every time if the image
|
# Boot from disk every time if the image deployed is
|
||||||
# deployed is a whole disk image.
|
# a whole disk image.
|
||||||
node = task.node
|
node = task.node
|
||||||
iwdi = node.driver_internal_info.get('is_whole_disk_image')
|
iwdi = node.driver_internal_info.get('is_whole_disk_image')
|
||||||
if deploy_utils.get_boot_option(node) == "local" or iwdi:
|
if deploy_utils.get_boot_option(node) == "local" or iwdi:
|
||||||
|
@ -440,9 +440,8 @@ class ISCSIDeploy(AgentDeployMixin, base.DeployInterface):
|
|||||||
'volume.', node.uuid)
|
'volume.', node.uuid)
|
||||||
return
|
return
|
||||||
|
|
||||||
# TODO(rameshg87): iscsi_ilo driver uses this method. Remove
|
# TODO(rameshg87): iscsi_ilo driver used to call this function. Remove
|
||||||
# and copy-paste it's contents here once iscsi_ilo deploy driver
|
# and copy-paste it's contents here.
|
||||||
# broken down into separate boot and deploy implementations.
|
|
||||||
validate(task)
|
validate(task)
|
||||||
|
|
||||||
@METRICS.timer('ISCSIDeploy.deploy')
|
@METRICS.timer('ISCSIDeploy.deploy')
|
||||||
|
@ -24,15 +24,8 @@ from ironic.common import exception
|
|||||||
from ironic.common.i18n import _
|
from ironic.common.i18n import _
|
||||||
from ironic.drivers import base
|
from ironic.drivers import base
|
||||||
from ironic.drivers import ipmi
|
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 management as cimc_mgmt
|
||||||
from ironic.drivers.modules.cimc import power as cimc_power
|
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 inspector
|
||||||
from ironic.drivers.modules import ipmitool
|
from ironic.drivers.modules import ipmitool
|
||||||
from ironic.drivers.modules.irmc import boot as irmc_boot
|
from ironic.drivers.modules.irmc import boot as irmc_boot
|
||||||
@ -54,43 +47,6 @@ PXEAndIPMIToolDriver = ipmi.PXEAndIPMIToolDriver
|
|||||||
PXEAndIPMIToolAndSocatDriver = ipmi.PXEAndIPMIToolAndSocatDriver
|
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):
|
class PXEAndSNMPDriver(base.BaseDriver):
|
||||||
"""PXE + SNMP driver.
|
"""PXE + SNMP driver.
|
||||||
|
|
||||||
|
@ -39,26 +39,19 @@ from ironic.drivers.modules.ilo import management as ilo_management
|
|||||||
from ironic.drivers.modules import pxe
|
from ironic.drivers.modules import pxe
|
||||||
from ironic.drivers.modules.storage import noop as noop_storage
|
from ironic.drivers.modules.storage import noop as noop_storage
|
||||||
from ironic.drivers import utils as driver_utils
|
from ironic.drivers import utils as driver_utils
|
||||||
from ironic.tests.unit.db import base as db_base
|
from ironic.tests.unit.drivers.modules.ilo import test_common
|
||||||
from ironic.tests.unit.db import utils as db_utils
|
|
||||||
from ironic.tests.unit.objects import utils as obj_utils
|
|
||||||
|
|
||||||
|
|
||||||
if six.PY3:
|
if six.PY3:
|
||||||
import io
|
import io
|
||||||
file = io.BytesIO
|
file = io.BytesIO
|
||||||
|
|
||||||
INFO_DICT = db_utils.get_test_ilo_info()
|
|
||||||
CONF = cfg.CONF
|
CONF = cfg.CONF
|
||||||
|
|
||||||
|
|
||||||
class IloBootCommonMethodsTestCase(db_base.DbTestCase):
|
class IloBootCommonMethodsTestCase(test_common.BaseIloTest):
|
||||||
|
|
||||||
def setUp(self):
|
boot_interface = 'ilo-virtual-media'
|
||||||
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)
|
|
||||||
|
|
||||||
def test_parse_driver_info(self):
|
def test_parse_driver_info(self):
|
||||||
self.node.driver_info['ilo_deploy_iso'] = 'deploy-iso'
|
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)
|
ilo_boot.parse_driver_info, self.node)
|
||||||
|
|
||||||
|
|
||||||
class IloBootPrivateMethodsTestCase(db_base.DbTestCase):
|
class IloBootPrivateMethodsTestCase(test_common.BaseIloTest):
|
||||||
|
|
||||||
def setUp(self):
|
boot_interface = 'ilo-virtual-media'
|
||||||
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)
|
|
||||||
|
|
||||||
def test__get_boot_iso_object_name(self):
|
def test__get_boot_iso_object_name(self):
|
||||||
boot_iso_actual = ilo_boot._get_boot_iso_object_name(self.node)
|
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)
|
self.assertNotIn('deploy_boot_mode', task.node.instance_info)
|
||||||
|
|
||||||
|
|
||||||
class IloVirtualMediaBootTestCase(db_base.DbTestCase):
|
class IloVirtualMediaBootTestCase(test_common.BaseIloTest):
|
||||||
|
|
||||||
def setUp(self):
|
boot_interface = 'ilo-virtual-media'
|
||||||
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)
|
|
||||||
|
|
||||||
@mock.patch.object(noop_storage.NoopStorage, 'should_write_image',
|
@mock.patch.object(noop_storage.NoopStorage, 'should_write_image',
|
||||||
autospec=True)
|
autospec=True)
|
||||||
@ -1126,13 +1101,9 @@ class IloVirtualMediaBootTestCase(db_base.DbTestCase):
|
|||||||
task.driver.boot.validate_rescue, task)
|
task.driver.boot.validate_rescue, task)
|
||||||
|
|
||||||
|
|
||||||
class IloPXEBootTestCase(db_base.DbTestCase):
|
class IloPXEBootTestCase(test_common.BaseIloTest):
|
||||||
|
|
||||||
def setUp(self):
|
boot_interface = 'ilo-pxe'
|
||||||
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)
|
|
||||||
|
|
||||||
@mock.patch.object(ilo_boot, 'prepare_node_for_deploy', spec_set=True,
|
@mock.patch.object(ilo_boot, 'prepare_node_for_deploy', spec_set=True,
|
||||||
autospec=True)
|
autospec=True)
|
||||||
|
@ -55,6 +55,8 @@ CONF = cfg.CONF
|
|||||||
|
|
||||||
class BaseIloTest(db_base.DbTestCase):
|
class BaseIloTest(db_base.DbTestCase):
|
||||||
|
|
||||||
|
boot_interface = None
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(BaseIloTest, self).setUp()
|
super(BaseIloTest, self).setUp()
|
||||||
self.config(enabled_hardware_types=['ilo', 'fake-hardware'],
|
self.config(enabled_hardware_types=['ilo', 'fake-hardware'],
|
||||||
@ -62,11 +64,14 @@ class BaseIloTest(db_base.DbTestCase):
|
|||||||
'fake'],
|
'fake'],
|
||||||
enabled_power_interfaces=['ilo', 'fake'],
|
enabled_power_interfaces=['ilo', 'fake'],
|
||||||
enabled_management_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.info = INFO_DICT.copy()
|
||||||
self.node = obj_utils.create_test_node(
|
self.node = obj_utils.create_test_node(
|
||||||
self.context, uuid=uuidutils.generate_uuid(),
|
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):
|
class IloValidateParametersTestCase(BaseIloTest):
|
||||||
|
@ -22,25 +22,17 @@ from ironic.common import exception
|
|||||||
from ironic.conductor import task_manager
|
from ironic.conductor import task_manager
|
||||||
from ironic.drivers.modules.ilo import common as ilo_common
|
from ironic.drivers.modules.ilo import common as ilo_common
|
||||||
from ironic.drivers.modules import ipmitool
|
from ironic.drivers.modules import ipmitool
|
||||||
from ironic.tests.unit.db import base as db_base
|
from ironic.tests.unit.drivers.modules.ilo import test_common
|
||||||
from ironic.tests.unit.db import utils as db_utils
|
|
||||||
from ironic.tests.unit.objects import utils as obj_utils
|
|
||||||
|
|
||||||
|
|
||||||
if six.PY3:
|
if six.PY3:
|
||||||
import io
|
import io
|
||||||
file = io.BytesIO
|
file = io.BytesIO
|
||||||
|
|
||||||
INFO_DICT = db_utils.get_test_ilo_info()
|
|
||||||
|
|
||||||
|
class IloConsoleInterfaceTestCase(test_common.BaseIloTest):
|
||||||
|
|
||||||
class IloConsoleInterfaceTestCase(db_base.DbTestCase):
|
boot_interface = 'ilo-virtual-media'
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
@mock.patch.object(ipmitool.IPMIShellinaboxConsole, 'validate',
|
@mock.patch.object(ipmitool.IPMIShellinaboxConsole, 'validate',
|
||||||
spec_set=True, autospec=True)
|
spec_set=True, autospec=True)
|
||||||
|
@ -24,22 +24,12 @@ from ironic.conductor import utils as manager_utils
|
|||||||
from ironic.drivers.modules import deploy_utils
|
from ironic.drivers.modules import deploy_utils
|
||||||
from ironic.drivers.modules.ilo import common as ilo_common
|
from ironic.drivers.modules.ilo import common as ilo_common
|
||||||
from ironic.drivers.modules.ilo import vendor as ilo_vendor
|
from ironic.drivers.modules.ilo import vendor as ilo_vendor
|
||||||
from ironic.tests.unit.db import base as db_base
|
from ironic.tests.unit.drivers.modules.ilo import test_common
|
||||||
from ironic.tests.unit.db import utils as db_utils
|
|
||||||
from ironic.tests.unit.objects import utils as obj_utils
|
|
||||||
|
|
||||||
|
|
||||||
INFO_DICT = db_utils.get_test_ilo_info()
|
class VendorPassthruTestCase(test_common.BaseIloTest):
|
||||||
|
|
||||||
|
boot_interface = 'ilo-virtual-media'
|
||||||
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)
|
|
||||||
|
|
||||||
@mock.patch.object(manager_utils, 'node_power_action', spec_set=True,
|
@mock.patch.object(manager_utils, 'node_power_action', spec_set=True,
|
||||||
autospec=True)
|
autospec=True)
|
||||||
|
@ -1256,14 +1256,11 @@ class OtherFunctionTestCase(db_base.DbTestCase):
|
|||||||
utils.get_ironic_api_url)
|
utils.get_ironic_api_url)
|
||||||
|
|
||||||
|
|
||||||
class VirtualMediaDeployUtilsTestCase(db_base.DbTestCase):
|
class GetSingleNicTestCase(db_base.DbTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(VirtualMediaDeployUtilsTestCase, self).setUp()
|
super(GetSingleNicTestCase, self).setUp()
|
||||||
self.config(enabled_drivers=['iscsi_ilo'])
|
self.node = obj_utils.create_test_node(self.context)
|
||||||
info_dict = db_utils.get_test_ilo_info()
|
|
||||||
self.node = obj_utils.create_test_node(
|
|
||||||
self.context, driver='iscsi_ilo', driver_info=info_dict)
|
|
||||||
|
|
||||||
def test_get_single_nic_with_vif_port_id(self):
|
def test_get_single_nic_with_vif_port_id(self):
|
||||||
obj_utils.create_test_port(
|
obj_utils.create_test_port(
|
||||||
|
@ -16,19 +16,9 @@
|
|||||||
Test class for iLO Drivers
|
Test class for iLO Drivers
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import mock
|
|
||||||
import testtools
|
|
||||||
|
|
||||||
from ironic.common import exception
|
|
||||||
from ironic.conductor import task_manager
|
from ironic.conductor import task_manager
|
||||||
from ironic.drivers import ilo
|
from ironic.drivers import ilo
|
||||||
from ironic.drivers.modules import agent
|
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 inspector
|
||||||
from ironic.drivers.modules import iscsi_deploy
|
from ironic.drivers.modules import iscsi_deploy
|
||||||
from ironic.drivers.modules import noop
|
from ironic.drivers.modules import noop
|
||||||
@ -153,52 +143,3 @@ class IloHardwareTestCase(db_base.DbTestCase):
|
|||||||
agent.AgentRescue)
|
agent.AgentRescue)
|
||||||
self.assertIsInstance(task.driver.vendor,
|
self.assertIsInstance(task.driver.vendor,
|
||||||
ilo.vendor.VendorPassthru)
|
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)
|
|
||||||
|
@ -20,14 +20,8 @@ import mock
|
|||||||
import testtools
|
import testtools
|
||||||
|
|
||||||
from ironic.common import exception
|
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 management as cimc_management
|
||||||
from ironic.drivers.modules.cimc import power as cimc_power
|
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 import ipmitool
|
||||||
from ironic.drivers.modules.irmc import boot as irmc_boot
|
from ironic.drivers.modules.irmc import boot as irmc_boot
|
||||||
from ironic.drivers.modules.irmc import management as irmc_management
|
from ironic.drivers.modules.irmc import management as irmc_management
|
||||||
@ -42,32 +36,6 @@ from ironic.drivers import pxe
|
|||||||
|
|
||||||
class PXEDriversTestCase(testtools.TestCase):
|
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,
|
@mock.patch.object(pxe.importutils, 'try_import', spec_set=True,
|
||||||
autospec=True)
|
autospec=True)
|
||||||
def test_pxe_snmp_driver(self, try_import_mock):
|
def test_pxe_snmp_driver(self, try_import_mock):
|
||||||
|
5
releasenotes/notes/no-classic-ilo-7822af6821d2f1cc.yaml
Normal file
5
releasenotes/notes/no-classic-ilo-7822af6821d2f1cc.yaml
Normal 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.
|
@ -53,18 +53,15 @@ ironic.dhcp =
|
|||||||
none = ironic.dhcp.none:NoneDHCPApi
|
none = ironic.dhcp.none:NoneDHCPApi
|
||||||
|
|
||||||
ironic.drivers =
|
ironic.drivers =
|
||||||
agent_ilo = ironic.drivers.ilo:IloVirtualMediaAgentDriver
|
|
||||||
agent_ipmitool = ironic.drivers.ipmi:AgentAndIPMIToolDriver
|
agent_ipmitool = ironic.drivers.ipmi:AgentAndIPMIToolDriver
|
||||||
agent_ipmitool_socat = ironic.drivers.ipmi:AgentAndIPMIToolAndSocatDriver
|
agent_ipmitool_socat = ironic.drivers.ipmi:AgentAndIPMIToolAndSocatDriver
|
||||||
agent_irmc = ironic.drivers.irmc:IRMCVirtualMediaAgentDriver
|
agent_irmc = ironic.drivers.irmc:IRMCVirtualMediaAgentDriver
|
||||||
agent_pxe_oneview = ironic.drivers.oneview:AgentPXEOneViewDriver
|
agent_pxe_oneview = ironic.drivers.oneview:AgentPXEOneViewDriver
|
||||||
agent_ucs = ironic.drivers.agent:AgentAndUcsDriver
|
agent_ucs = ironic.drivers.agent:AgentAndUcsDriver
|
||||||
iscsi_ilo = ironic.drivers.ilo:IloVirtualMediaIscsiDriver
|
|
||||||
iscsi_irmc = ironic.drivers.irmc:IRMCVirtualMediaIscsiDriver
|
iscsi_irmc = ironic.drivers.irmc:IRMCVirtualMediaIscsiDriver
|
||||||
iscsi_pxe_oneview = ironic.drivers.oneview:ISCSIPXEOneViewDriver
|
iscsi_pxe_oneview = ironic.drivers.oneview:ISCSIPXEOneViewDriver
|
||||||
pxe_ipmitool = ironic.drivers.ipmi:PXEAndIPMIToolDriver
|
pxe_ipmitool = ironic.drivers.ipmi:PXEAndIPMIToolDriver
|
||||||
pxe_ipmitool_socat = ironic.drivers.ipmi:PXEAndIPMIToolAndSocatDriver
|
pxe_ipmitool_socat = ironic.drivers.ipmi:PXEAndIPMIToolAndSocatDriver
|
||||||
pxe_ilo = ironic.drivers.pxe:PXEAndIloDriver
|
|
||||||
pxe_drac = ironic.drivers.drac:PXEDracDriver
|
pxe_drac = ironic.drivers.drac:PXEDracDriver
|
||||||
pxe_drac_inspector = ironic.drivers.drac:PXEDracInspectorDriver
|
pxe_drac_inspector = ironic.drivers.drac:PXEDracInspectorDriver
|
||||||
pxe_snmp = ironic.drivers.pxe:PXEAndSNMPDriver
|
pxe_snmp = ironic.drivers.pxe:PXEAndSNMPDriver
|
||||||
|
Loading…
x
Reference in New Issue
Block a user