From aaf17eb5e7c356b55f017f8fba7cd69f69e50156 Mon Sep 17 00:00:00 2001 From: Hironori Shiina Date: Mon, 18 Jun 2018 15:50:17 +0900 Subject: [PATCH] iRMC: Support ipmitool power interface with irmc hardware Irmc power interface requires a vendor agent on an instance for enabling soft reboot and soft power off. For a case where the agent is not installed, this patch enables ipmitool power interface with irmc hardware type. Change-Id: I9bbe702645ba2a8ddbc0cf825b00999568f384c5 Story: 2002595 Task: 22206 --- doc/source/admin/drivers/irmc.rst | 9 ++++---- ironic/drivers/irmc.py | 2 +- ironic/tests/unit/drivers/test_irmc.py | 23 ++++++++++++++++++- ...pport-ipmitool-power-a3480a70753948e5.yaml | 4 ++++ 4 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 releasenotes/notes/irmc-support-ipmitool-power-a3480a70753948e5.yaml diff --git a/doc/source/admin/drivers/irmc.rst b/doc/source/admin/drivers/irmc.rst index 3b80cf4e13..5af489af56 100644 --- a/doc/source/admin/drivers/irmc.rst +++ b/doc/source/admin/drivers/irmc.rst @@ -62,8 +62,8 @@ hardware interfaces: Supports only ``irmc``. * power - Supports only ``irmc``, which enables power control via ServerView Common - Command Interface (SCCI). + Supports ``irmc``, which enables power control via ServerView Common + Command Interface (SCCI), by default. Also supports ``ipmitool``. For other hardware interfaces, ``irmc`` hardware type supports the Bare Metal reference interfaces. For more details about the hardware @@ -653,7 +653,8 @@ This driver supports FUJITSU PRIMERGY BX S4 or RX S8 servers and above. - PRIMERGY BX924 S4 - PRIMERGY RX300 S8 -Soft Reboot (Graceful Reset) and Soft Power Off (Graceful Power Off) -are only available if `ServerView agents `_ +When ``irmc`` power interface is used, Soft Reboot (Graceful Reset) and Soft +Power Off (Graceful Power Off) are only available if +`ServerView agents `_ are installed. See `iRMC S4 Manual `_ for more details. diff --git a/ironic/drivers/irmc.py b/ironic/drivers/irmc.py index 4cf9315045..c962747265 100644 --- a/ironic/drivers/irmc.py +++ b/ironic/drivers/irmc.py @@ -134,4 +134,4 @@ class IRMCHardware(generic.GenericHardware): @property def supported_power_interfaces(self): """List of supported power interfaces.""" - return [power.IRMCPower] + return [power.IRMCPower, ipmitool.IPMIPower] diff --git a/ironic/tests/unit/drivers/test_irmc.py b/ironic/tests/unit/drivers/test_irmc.py index 47e67263e7..cc45a1a3b9 100644 --- a/ironic/tests/unit/drivers/test_irmc.py +++ b/ironic/tests/unit/drivers/test_irmc.py @@ -127,7 +127,7 @@ class IRMCHardwareTestCase(db_base.DbTestCase): enabled_deploy_interfaces=['iscsi', 'direct'], enabled_inspect_interfaces=['irmc'], enabled_management_interfaces=['irmc'], - enabled_power_interfaces=['irmc'], + enabled_power_interfaces=['irmc', 'ipmitool'], enabled_raid_interfaces=['no-raid', 'agent'], enabled_rescue_interfaces=['no-rescue', 'agent']) @@ -199,3 +199,24 @@ class IRMCHardwareTestCase(db_base.DbTestCase): agent.AgentRAID) self.assertIsInstance(task.driver.rescue, agent.AgentRescue) + + def test_override_with_ipmitool_power(self): + node = obj_utils.create_test_node( + self.context, driver='irmc', power_interface='ipmitool') + with task_manager.acquire(self.context, node.id) as task: + self.assertIsInstance(task.driver.boot, + irmc.boot.IRMCVirtualMediaBoot) + self.assertIsInstance(task.driver.console, + ipmitool.IPMISocatConsole) + self.assertIsInstance(task.driver.deploy, + iscsi_deploy.ISCSIDeploy) + self.assertIsInstance(task.driver.inspect, + irmc.inspect.IRMCInspect) + self.assertIsInstance(task.driver.management, + irmc.management.IRMCManagement) + self.assertIsInstance(task.driver.power, + ipmitool.IPMIPower) + self.assertIsInstance(task.driver.raid, + noop.NoRAID) + self.assertIsInstance(task.driver.rescue, + noop.NoRescue) diff --git a/releasenotes/notes/irmc-support-ipmitool-power-a3480a70753948e5.yaml b/releasenotes/notes/irmc-support-ipmitool-power-a3480a70753948e5.yaml new file mode 100644 index 0000000000..910370791e --- /dev/null +++ b/releasenotes/notes/irmc-support-ipmitool-power-a3480a70753948e5.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Adds support for ``ipmitool`` power interface to ``irmc`` hardware type.