idrac: inherit driver interface from redfish
With the removal of the wsman interfaces in the idrac driver and only redfish being supported, the idrac driver should inherit from the redfish driver to ensure that it properly supports all the redfish supported interfaces. Furthermore with several of the interfaces being no-op passthru to the redfish implementation there is no reason to not let the user select those interfaces as well. With an eye towards not having to support these in the future, direct users to use the stock redfish versions in the docs as well. Change-Id: I79ab44f31660e6d5311db46223e8bd60d2b3f213 Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
This commit is contained in:
parent
58a79bedfa
commit
52fdbb743d
@ -26,7 +26,8 @@ Key features of the Dell iDRAC driver include:
|
||||
Ironic Features
|
||||
---------------
|
||||
|
||||
The ``idrac`` hardware type supports the following Ironic interfaces:
|
||||
The ``idrac`` hardware type extends the ``redfish`` hardware type
|
||||
and supports the following Ironic interfaces:
|
||||
|
||||
* `BIOS Interface`_: BIOS management
|
||||
* `Inspect Interface`_: Hardware inspection
|
||||
@ -61,7 +62,7 @@ To enable the ``idrac`` hardware type, add the following to your
|
||||
[DEFAULT]
|
||||
enabled_hardware_types=idrac
|
||||
enabled_management_interfaces=idrac-redfish
|
||||
enabled_power_interfaces=idrac-redfish
|
||||
enabled_power_interfaces=redfish
|
||||
|
||||
To enable all optional features (BIOS, inspection, RAID, and vendor passthru),
|
||||
use the following configuration:
|
||||
@ -70,7 +71,7 @@ use the following configuration:
|
||||
|
||||
[DEFAULT]
|
||||
enabled_hardware_types=idrac
|
||||
enabled_bios_interfaces=idrac-redfish
|
||||
enabled_bios_interfaces=redfish
|
||||
enabled_firmware_interfaces=redfish
|
||||
enabled_inspect_interfaces=idrac-redfish
|
||||
enabled_management_interfaces=idrac-redfish
|
||||
@ -85,7 +86,8 @@ order:
|
||||
Interface Supported Implementations
|
||||
================ ===================================================
|
||||
``bios`` ``idrac-redfish``, ``no-bios``
|
||||
``boot`` ``ipxe``, ``pxe``, ``idrac-redfish-virtual-media``
|
||||
``boot`` ``ipxe``, ``pxe``, ``http-ipxe``, ``http``,
|
||||
``redfish-https``, ``idrac-redfish-virtual-media``
|
||||
``console`` ``no-console``
|
||||
``deploy`` ``direct``, ``ansible``, ``ramdisk``
|
||||
``firmware`` ``redfish``, ``no-firmware``
|
||||
@ -93,11 +95,11 @@ Interface Supported Implementations
|
||||
``inspector``, ``no-inspect``
|
||||
``management`` ``idrac-redfish``
|
||||
``network`` ``flat``, ``neutron``, ``noop``
|
||||
``power`` ``idrac-redfish``
|
||||
``power`` ``redfish``, ``idrac-redfish``
|
||||
``raid`` ``idrac-redfish``, ``no-raid``
|
||||
``rescue`` ``no-rescue``, ``agent``
|
||||
``storage`` ``noop``, ``cinder``, ``external``
|
||||
``vendor`` ``idrac-redfish``,
|
||||
``vendor`` ``redfish``, ``idrac-redfish``,
|
||||
``no-vendor``
|
||||
================ ===================================================
|
||||
|
||||
@ -135,12 +137,12 @@ hardware type using Redfish for all interfaces:
|
||||
--driver-info redfish_password=pa$$w0rd \
|
||||
--driver-info redfish_address=drac.host \
|
||||
--driver-info redfish_system_id=/redfish/v1/Systems/System.Embedded.1 \
|
||||
--bios-interface idrac-redfish \
|
||||
--bios-interface redfish \
|
||||
--inspect-interface idrac-redfish \
|
||||
--management-interface idrac-redfish \
|
||||
--power-interface idrac-redfish \
|
||||
--power-interface redfish \
|
||||
--raid-interface idrac-redfish \
|
||||
--vendor-interface idrac-redfish
|
||||
--vendor-interface redfish
|
||||
|
||||
BIOS Interface
|
||||
==============
|
||||
|
@ -17,7 +17,6 @@ DRAC Driver for remote system management using Dell Remote Access Card.
|
||||
|
||||
from oslo_config import cfg
|
||||
|
||||
from ironic.drivers import generic
|
||||
from ironic.drivers.modules.drac import bios
|
||||
from ironic.drivers.modules.drac import boot
|
||||
from ironic.drivers.modules.drac import inspect as drac_inspect
|
||||
@ -25,16 +24,16 @@ from ironic.drivers.modules.drac import management
|
||||
from ironic.drivers.modules.drac import power
|
||||
from ironic.drivers.modules.drac import raid
|
||||
from ironic.drivers.modules.drac import vendor_passthru
|
||||
from ironic.drivers.modules import ipxe
|
||||
from ironic.drivers.modules import noop
|
||||
from ironic.drivers.modules import pxe
|
||||
from ironic.drivers.modules.redfish import firmware as redfish_firmware
|
||||
from ironic.drivers.modules.redfish import boot as redfish_boot
|
||||
from ironic.drivers.modules.redfish import inspect as redfish_inspect
|
||||
from ironic.drivers.modules.redfish import raid as redfish_raid
|
||||
from ironic.drivers import redfish
|
||||
|
||||
|
||||
CONF = cfg.CONF
|
||||
|
||||
|
||||
class IDRACHardware(generic.GenericHardware):
|
||||
class IDRACHardware(redfish.RedfishHardware):
|
||||
"""integrated Dell Remote Access Controller hardware type"""
|
||||
|
||||
# Required hardware interfaces
|
||||
@ -42,7 +41,11 @@ class IDRACHardware(generic.GenericHardware):
|
||||
@property
|
||||
def supported_boot_interfaces(self):
|
||||
"""List of supported boot interfaces."""
|
||||
return [ipxe.iPXEBoot, pxe.PXEBoot, boot.DracRedfishVirtualMediaBoot]
|
||||
inherited = super().supported_boot_interfaces
|
||||
# remove the generic redfish one in favor of the Dell specific
|
||||
idx = inherited.index(redfish_boot.RedfishVirtualMediaBoot)
|
||||
inherited[idx] = boot.DracRedfishVirtualMediaBoot
|
||||
return inherited
|
||||
|
||||
@property
|
||||
def supported_management_interfaces(self):
|
||||
@ -52,18 +55,16 @@ class IDRACHardware(generic.GenericHardware):
|
||||
@property
|
||||
def supported_power_interfaces(self):
|
||||
"""List of supported power interfaces."""
|
||||
return [power.DracRedfishPower]
|
||||
return ([power.DracRedfishPower]
|
||||
+ super().supported_power_interfaces)
|
||||
|
||||
# Optional hardware interfaces
|
||||
|
||||
@property
|
||||
def supported_bios_interfaces(self):
|
||||
"""List of supported bios interfaces."""
|
||||
return [bios.DracRedfishBIOS, noop.NoBIOS]
|
||||
|
||||
@property
|
||||
def supported_firmware_interfaces(self):
|
||||
return [redfish_firmware.RedfishFirmware, noop.NoFirmware]
|
||||
return ([bios.DracRedfishBIOS]
|
||||
+ super().supported_bios_interfaces)
|
||||
|
||||
@property
|
||||
def supported_inspect_interfaces(self):
|
||||
@ -71,17 +72,23 @@ class IDRACHardware(generic.GenericHardware):
|
||||
# Inspector support should have a higher priority than NoInspect
|
||||
# if it is enabled by an operator (implying that the service is
|
||||
# installed).
|
||||
return [drac_inspect.DracRedfishInspect] + super(
|
||||
IDRACHardware, self).supported_inspect_interfaces
|
||||
inherited = super().supported_inspect_interfaces
|
||||
# remove the generic redfish one in favor of the Dell specific
|
||||
idx = inherited.index(redfish_inspect.RedfishInspect)
|
||||
inherited[idx] = drac_inspect.DracRedfishInspect
|
||||
return inherited
|
||||
|
||||
@property
|
||||
def supported_raid_interfaces(self):
|
||||
"""List of supported raid interfaces."""
|
||||
return [raid.DracRedfishRAID] + super(
|
||||
IDRACHardware, self).supported_raid_interfaces
|
||||
inherited = super().supported_raid_interfaces
|
||||
# remove the generic redfish one in favor of the Dell specific
|
||||
idx = inherited.index(redfish_raid.RedfishRAID)
|
||||
inherited[idx] = raid.DracRedfishRAID
|
||||
return inherited
|
||||
|
||||
@property
|
||||
def supported_vendor_interfaces(self):
|
||||
"""List of supported vendor interfaces."""
|
||||
return [vendor_passthru.DracRedfishVendorPassthru,
|
||||
noop.NoVendor]
|
||||
return ([vendor_passthru.DracRedfishVendorPassthru]
|
||||
+ super().supported_vendor_interfaces)
|
||||
|
@ -26,3 +26,5 @@ class DracRedfishBIOS(redfish_bios.RedfishBIOS):
|
||||
specific incompatibilities and introduction of vendor value added
|
||||
should be implemented by this class.
|
||||
"""
|
||||
# NOTE(cardoe): deprecated in favor of plain Redfish
|
||||
supported = False
|
||||
|
@ -27,4 +27,5 @@ class DracRedfishPower(redfish_power.RedfishPower):
|
||||
specific incompatibilities and introduction of vendor value added
|
||||
should be implemented by this class.
|
||||
"""
|
||||
pass
|
||||
# NOTE(cardoe): deprecated in favor of plain Redfish
|
||||
supported = False
|
||||
|
@ -23,3 +23,5 @@ class DracRedfishVendorPassthru(redfish_vendor.RedfishVendorPassthru):
|
||||
|
||||
Use the Redfish implementation for vendor passthru.
|
||||
"""
|
||||
# NOTE(cardoe): deprecated in favor of plain Redfish
|
||||
supported = False
|
||||
|
@ -21,6 +21,7 @@ from ironic.drivers.modules import inspector
|
||||
from ironic.drivers.modules import ipxe
|
||||
from ironic.drivers.modules.network import flat as flat_net
|
||||
from ironic.drivers.modules import noop
|
||||
from ironic.drivers.modules import redfish
|
||||
from ironic.drivers.modules.storage import noop as noop_storage
|
||||
from ironic.tests.unit.db import base as db_base
|
||||
from ironic.tests.unit.objects import utils as obj_utils
|
||||
@ -35,7 +36,7 @@ class IDRACHardwareTestCase(db_base.DbTestCase):
|
||||
enabled_boot_interfaces=[
|
||||
'idrac-redfish-virtual-media', 'ipxe', 'pxe'],
|
||||
enabled_management_interfaces=['idrac-redfish'],
|
||||
enabled_power_interfaces=['idrac-redfish'],
|
||||
enabled_power_interfaces=['idrac-redfish', 'redfish'],
|
||||
enabled_inspect_interfaces=[
|
||||
'idrac-redfish', 'inspector',
|
||||
'no-inspect'],
|
||||
@ -43,8 +44,10 @@ class IDRACHardwareTestCase(db_base.DbTestCase):
|
||||
enabled_raid_interfaces=[
|
||||
'idrac-redfish', 'no-raid',
|
||||
'agent'],
|
||||
enabled_vendor_interfaces=['idrac-redfish', 'no-vendor'],
|
||||
enabled_bios_interfaces=['idrac-redfish', 'no-bios'])
|
||||
enabled_vendor_interfaces=[
|
||||
'idrac-redfish', 'redfish', 'no-vendor'],
|
||||
enabled_bios_interfaces=[
|
||||
'idrac-redfish', 'redfish', 'no-bios'])
|
||||
|
||||
def _validate_interfaces(self, driver, **kwargs):
|
||||
self.assertIsInstance(
|
||||
@ -120,30 +123,37 @@ class IDRACHardwareTestCase(db_base.DbTestCase):
|
||||
self._validate_interfaces(task.driver,
|
||||
raid=drac.raid.DracRedfishRAID)
|
||||
|
||||
def test_override_no_vendor(self):
|
||||
node = obj_utils.create_test_node(self.context, driver='idrac',
|
||||
vendor_interface='no-vendor')
|
||||
with task_manager.acquire(self.context, node.id) as task:
|
||||
self._validate_interfaces(task.driver,
|
||||
vendor=noop.NoVendor)
|
||||
def test_override_with_redfish_vendor(self):
|
||||
for iface, impl in [('redfish',
|
||||
redfish.vendor.RedfishVendorPassthru),
|
||||
('no-vendor', noop.NoVendor)]:
|
||||
node = obj_utils.create_test_node(self.context,
|
||||
uuid=uuidutils.generate_uuid(),
|
||||
driver='idrac',
|
||||
vendor_interface=iface)
|
||||
with task_manager.acquire(self.context, node.id) as task:
|
||||
self._validate_interfaces(task.driver,
|
||||
vendor=impl)
|
||||
|
||||
def test_override_with_redfish_management_and_power(self):
|
||||
node = obj_utils.create_test_node(self.context, driver='idrac',
|
||||
management_interface='idrac-redfish',
|
||||
power_interface='idrac-redfish')
|
||||
power_interface='redfish')
|
||||
with task_manager.acquire(self.context, node.id) as task:
|
||||
self._validate_interfaces(
|
||||
task.driver,
|
||||
management=drac.management.DracRedfishManagement,
|
||||
power=drac.power.DracRedfishPower)
|
||||
power=redfish.power.RedfishPower)
|
||||
|
||||
def test_override_with_redfish_bios(self):
|
||||
node = obj_utils.create_test_node(self.context, driver='idrac',
|
||||
bios_interface='idrac-redfish')
|
||||
with task_manager.acquire(self.context, node.id) as task:
|
||||
self._validate_interfaces(
|
||||
task.driver,
|
||||
bios=drac.bios.DracRedfishBIOS)
|
||||
for iface, impl in [('redfish', redfish.bios.RedfishBIOS),
|
||||
('no-bios', noop.NoBIOS)]:
|
||||
node = obj_utils.create_test_node(self.context,
|
||||
uuid=uuidutils.generate_uuid(),
|
||||
driver='idrac',
|
||||
bios_interface=iface)
|
||||
with task_manager.acquire(self.context, node.id) as task:
|
||||
self._validate_interfaces(task.driver, bios=impl)
|
||||
|
||||
def test_override_with_redfish_inspect(self):
|
||||
node = obj_utils.create_test_node(self.context, driver='idrac',
|
||||
|
@ -0,0 +1,15 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Make the ``idrac`` hardware type inherit from the ``redfish`` hardware
|
||||
type since the ``idrac`` hardware type is an extension of the ``redfish``
|
||||
with Dell specific overrides. This will ensure that features available
|
||||
to the ``redfish`` hardware type will always be available to ``idrac``.
|
||||
Added ``redfish`` interface as available for the ``bios``, ``power``
|
||||
and ``vendor`` interfaces of the ``idrac`` hardware type.
|
||||
deprecations:
|
||||
- |
|
||||
Deprecates the ``idrac-redfish`` interfaces in favor of the ``redfish``
|
||||
interfaces for the ``bios``, ``power``, and ``vendor`` interfaces. This
|
||||
is a no-op change as these interfaces wrapped the ``redfish`` interface
|
||||
with no change already.
|
Loading…
Reference in New Issue
Block a user