Add hardware type for HPE ProLiant servers based on iLO 4
Added hardware type 'ilo' for HPE ProLiant servers based on iLO 4 management engine. 'ilo' hardware type only supports 'agent' deploy method and does not support 'iscsi' deploy method. Change-Id: Id2186717633630fabe11041634759adb3b74a0f9 Closes-Bug: #1666787
This commit is contained in:
parent
79b252ef4e
commit
317afc8d37
@ -20,6 +20,7 @@ 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
|
||||
@ -27,7 +28,60 @@ 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
|
||||
|
||||
|
||||
class IloHardware(generic.GenericHardware):
|
||||
"""iLO hardware type.
|
||||
|
||||
iLO hardware type is targeted for iLO 4 based Proliant Gen8
|
||||
and Gen9 servers.
|
||||
"""
|
||||
|
||||
@property
|
||||
def supported_boot_interfaces(self):
|
||||
"""List of supported boot interfaces."""
|
||||
return [boot.IloVirtualMediaBoot, boot.IloPXEBoot]
|
||||
|
||||
@property
|
||||
def supported_deploy_interfaces(self):
|
||||
"""List of supported deploy interfaces."""
|
||||
|
||||
# Note(stendulker) It does not support ISCSI based deploy
|
||||
# (iscsi.ISCSIDeploy) mechanism.
|
||||
# The reason being all the Ironic features supported by ISCSIDeploy
|
||||
# are supported with agentDeploy as well. There is no additional
|
||||
# advantage of having iscsi based deploy except for the cases wherein
|
||||
# instance images(qcow2) are larger than RAM size of the bare metal.
|
||||
# That also could be overcome by using 'raw' images.
|
||||
# To avoid the additional driver supportability and reduce test matrix,
|
||||
# ISCSI based deploy is not supported. However, if any user insists
|
||||
# for ISCSI based deploy, we would surely enable the same.
|
||||
|
||||
return [agent.AgentDeploy]
|
||||
|
||||
@property
|
||||
def supported_console_interfaces(self):
|
||||
"""List of supported console interfaces."""
|
||||
return [console.IloConsoleInterface, noop.NoConsole]
|
||||
|
||||
@property
|
||||
def supported_inspect_interfaces(self):
|
||||
"""List of supported inspect interfaces."""
|
||||
return [inspect.IloInspect, inspector.Inspector,
|
||||
noop.NoInspect]
|
||||
|
||||
@property
|
||||
def supported_management_interfaces(self):
|
||||
"""List of supported management interfaces."""
|
||||
return [management.IloManagement]
|
||||
|
||||
@property
|
||||
def supported_power_interfaces(self):
|
||||
"""List of supported power interfaces."""
|
||||
return [power.IloPower]
|
||||
|
||||
|
||||
class IloVirtualMediaIscsiDriver(base.BaseDriver):
|
||||
|
@ -20,6 +20,7 @@ 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
|
||||
@ -28,7 +29,96 @@ 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
|
||||
from ironic.tests.unit.db import base as db_base
|
||||
from ironic.tests.unit.objects import utils as obj_utils
|
||||
|
||||
|
||||
class IloHardwareTestCase(db_base.DbTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(IloHardwareTestCase, self).setUp()
|
||||
self.config(enabled_hardware_types=['ilo'],
|
||||
enabled_boot_interfaces=['ilo-virtual-media', 'ilo-pxe'],
|
||||
enabled_console_interfaces=['ilo'],
|
||||
enabled_deploy_interfaces=['direct'],
|
||||
enabled_inspect_interfaces=['ilo'],
|
||||
enabled_management_interfaces=['ilo'],
|
||||
enabled_power_interfaces=['ilo'],
|
||||
enabled_raid_interfaces=['no-raid', 'agent'],
|
||||
enabled_vendor_interfaces=['no-vendor'])
|
||||
|
||||
def test_default_interfaces(self):
|
||||
node = obj_utils.create_test_node(self.context,
|
||||
driver='ilo')
|
||||
with task_manager.acquire(self.context, node.id) as task:
|
||||
self.assertIsInstance(task.driver.boot,
|
||||
ilo.boot.IloVirtualMediaBoot)
|
||||
self.assertIsInstance(task.driver.console,
|
||||
ilo.console.IloConsoleInterface)
|
||||
self.assertIsInstance(task.driver.deploy,
|
||||
agent.AgentDeploy)
|
||||
self.assertIsInstance(task.driver.inspect,
|
||||
ilo.inspect.IloInspect)
|
||||
self.assertIsInstance(task.driver.management,
|
||||
ilo.management.IloManagement)
|
||||
self.assertIsInstance(task.driver.power,
|
||||
ilo.power.IloPower)
|
||||
self.assertIsInstance(task.driver.raid,
|
||||
noop.NoRAID)
|
||||
self.assertIsInstance(task.driver.vendor,
|
||||
noop.NoVendor)
|
||||
|
||||
def test_override_with_inspector(self):
|
||||
self.config(enabled_inspect_interfaces=['inspector', 'ilo'])
|
||||
node = obj_utils.create_test_node(
|
||||
self.context, driver='ilo',
|
||||
deploy_interface='direct',
|
||||
inspect_interface='inspector',
|
||||
raid_interface='agent')
|
||||
with task_manager.acquire(self.context, node.id) as task:
|
||||
self.assertIsInstance(task.driver.boot,
|
||||
ilo.boot.IloVirtualMediaBoot)
|
||||
self.assertIsInstance(task.driver.console,
|
||||
ilo.console.IloConsoleInterface)
|
||||
self.assertIsInstance(task.driver.deploy,
|
||||
agent.AgentDeploy)
|
||||
self.assertIsInstance(task.driver.inspect,
|
||||
inspector.Inspector)
|
||||
self.assertIsInstance(task.driver.management,
|
||||
ilo.management.IloManagement)
|
||||
self.assertIsInstance(task.driver.power,
|
||||
ilo.power.IloPower)
|
||||
self.assertIsInstance(task.driver.raid,
|
||||
agent.AgentRAID)
|
||||
self.assertIsInstance(task.driver.vendor,
|
||||
noop.NoVendor)
|
||||
|
||||
def test_override_with_pxe(self):
|
||||
node = obj_utils.create_test_node(
|
||||
self.context, driver='ilo',
|
||||
deploy_interface='direct',
|
||||
boot_interface='ilo-pxe',
|
||||
raid_interface='agent')
|
||||
with task_manager.acquire(self.context, node.id) as task:
|
||||
self.assertIsInstance(task.driver.boot,
|
||||
ilo.boot.IloPXEBoot)
|
||||
self.assertIsInstance(task.driver.console,
|
||||
ilo.console.IloConsoleInterface)
|
||||
self.assertIsInstance(task.driver.deploy,
|
||||
agent.AgentDeploy)
|
||||
self.assertIsInstance(task.driver.inspect,
|
||||
ilo.inspect.IloInspect)
|
||||
self.assertIsInstance(task.driver.management,
|
||||
ilo.management.IloManagement)
|
||||
self.assertIsInstance(task.driver.power,
|
||||
ilo.power.IloPower)
|
||||
self.assertIsInstance(task.driver.raid,
|
||||
agent.AgentRAID)
|
||||
self.assertIsInstance(task.driver.vendor,
|
||||
noop.NoVendor)
|
||||
|
||||
|
||||
@mock.patch.object(ilo.importutils, 'try_import', spec_set=True,
|
||||
|
17
releasenotes/notes/ilo-hardware-type-48fd1c8bccd70659.yaml
Normal file
17
releasenotes/notes/ilo-hardware-type-48fd1c8bccd70659.yaml
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Adds a new hardware type ``ilo`` for iLO 4 based Proliant Gen 8
|
||||
and Gen 9 servers.
|
||||
``ilo`` hardware type will support virtual media and PXE based
|
||||
provisioning using HPE iLO 4 management engine. It supports the
|
||||
following driver interfaces:
|
||||
|
||||
* boot: ``ilo-virtual-media`` and ``ilo-pxe``
|
||||
* console: ``ilo`` and ``no-console``
|
||||
* deploy: ``direct``
|
||||
* inspect: ``ilo``, ``inspector`` and ``no-inspect``
|
||||
* management: ``ilo``
|
||||
* network: ``flat``, ``no-op`` and ``neutron``
|
||||
* power: ``ilo``
|
||||
* raid: ``no-raid`` and ``agent``
|
17
setup.cfg
17
setup.cfg
@ -84,39 +84,45 @@ ironic.drivers =
|
||||
|
||||
ironic.hardware.interfaces.boot =
|
||||
fake = ironic.drivers.modules.fake:FakeBoot
|
||||
pxe = ironic.drivers.modules.pxe:PXEBoot
|
||||
ilo-pxe = ironic.drivers.modules.ilo.boot:IloPXEBoot
|
||||
ilo-virtual-media = ironic.drivers.modules.ilo.boot:IloVirtualMediaBoot
|
||||
irmc-virtual-media = ironic.drivers.modules.irmc.boot:IRMCVirtualMediaBoot
|
||||
pxe = ironic.drivers.modules.pxe:PXEBoot
|
||||
|
||||
ironic.hardware.interfaces.console =
|
||||
fake = ironic.drivers.modules.fake:FakeConsole
|
||||
ilo = ironic.drivers.modules.ilo.console:IloConsoleInterface
|
||||
ipmitool-shellinabox = ironic.drivers.modules.ipmitool:IPMIShellinaboxConsole
|
||||
ipmitool-socat = ironic.drivers.modules.ipmitool:IPMISocatConsole
|
||||
no-console = ironic.drivers.modules.noop:NoConsole
|
||||
|
||||
ironic.hardware.interfaces.deploy =
|
||||
direct = ironic.drivers.modules.agent:AgentDeploy
|
||||
iscsi = ironic.drivers.modules.iscsi_deploy:ISCSIDeploy
|
||||
fake = ironic.drivers.modules.fake:FakeDeploy
|
||||
iscsi = ironic.drivers.modules.iscsi_deploy:ISCSIDeploy
|
||||
|
||||
ironic.hardware.interfaces.inspect =
|
||||
fake = ironic.drivers.modules.fake:FakeInspect
|
||||
ilo = ironic.drivers.modules.ilo.inspect:IloInspect
|
||||
inspector = ironic.drivers.modules.inspector:Inspector
|
||||
no-inspect = ironic.drivers.modules.noop:NoInspect
|
||||
irmc = ironic.drivers.modules.irmc.inspect:IRMCInspect
|
||||
no-inspect = ironic.drivers.modules.noop:NoInspect
|
||||
|
||||
ironic.hardware.interfaces.management =
|
||||
fake = ironic.drivers.modules.fake:FakeManagement
|
||||
ilo = ironic.drivers.modules.ilo.management:IloManagement
|
||||
ipmitool = ironic.drivers.modules.ipmitool:IPMIManagement
|
||||
irmc = ironic.drivers.modules.irmc.management:IRMCManagement
|
||||
redfish = ironic.drivers.modules.redfish.management:RedfishManagement
|
||||
|
||||
ironic.hardware.interfaces.network =
|
||||
flat = ironic.drivers.modules.network.flat:FlatNetwork
|
||||
noop = ironic.drivers.modules.network.noop:NoopNetwork
|
||||
neutron = ironic.drivers.modules.network.neutron:NeutronNetwork
|
||||
noop = ironic.drivers.modules.network.noop:NoopNetwork
|
||||
|
||||
ironic.hardware.interfaces.power =
|
||||
fake = ironic.drivers.modules.fake:FakePower
|
||||
ilo = ironic.drivers.modules.ilo.power:IloPower
|
||||
ipmitool = ironic.drivers.modules.ipmitool:IPMIPower
|
||||
irmc = ironic.drivers.modules.irmc.power:IRMCPower
|
||||
redfish = ironic.drivers.modules.redfish.power:RedfishPower
|
||||
@ -139,9 +145,10 @@ ironic.hardware.interfaces.vendor =
|
||||
|
||||
ironic.hardware.types =
|
||||
fake-hardware = ironic.drivers.fake_hardware:FakeHardware
|
||||
manual-management = ironic.drivers.generic:ManualManagementHardware
|
||||
ilo = ironic.drivers.ilo:IloHardware
|
||||
ipmi = ironic.drivers.ipmi:IPMIHardware
|
||||
irmc = ironic.drivers.irmc:IRMCHardware
|
||||
manual-management = ironic.drivers.generic:ManualManagementHardware
|
||||
redfish = ironic.drivers.redfish:RedfishHardware
|
||||
|
||||
ironic.database.migration_backend =
|
||||
|
Loading…
Reference in New Issue
Block a user