summaryrefslogtreecommitdiff
path: root/ironic/drivers/modules/irmc/management.py
diff options
context:
space:
mode:
authorNaohiro Tamura <naohirot@jp.fujitsu.com>2016-07-29 14:12:52 +0900
committerNaohiro Tamura <naohirot@jp.fujitsu.com>2017-01-24 09:29:53 +0900
commitc46b720036a3cb6c07b3c76913ede8cb02ecdae2 (patch)
treeb01e44405e4da4443de4b0c57660efef2469f684 /ironic/drivers/modules/irmc/management.py
parent58d59db30fb5925bd3a7d326338cc57e44df04b5 (diff)
downloadironic-c46b720036a3cb6c07b3c76913ede8cb02ecdae2.tar.gz
iRMC management driver for Inject NMI
This patch enhances iRMC management driver to support Inject NMI. Partial-Bug: #1526226 Change-Id: Id9dde5094239f215297d350a78b005accbdd8be4
Diffstat (limited to 'ironic/drivers/modules/irmc/management.py')
-rw-r--r--ironic/drivers/modules/irmc/management.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/ironic/drivers/modules/irmc/management.py b/ironic/drivers/modules/irmc/management.py
index ea85d9216..7aac1683f 100644
--- a/ironic/drivers/modules/irmc/management.py
+++ b/ironic/drivers/modules/irmc/management.py
@@ -233,3 +233,26 @@ class IRMCManagement(ipmitool.IPMIManagement):
return _get_sensors_data(task)
elif sensor_method == 'ipmitool':
return super(IRMCManagement, self).get_sensors_data(task)
+
+ @METRICS.timer('IRMCManagement.inject_nmi')
+ @task_manager.require_exclusive_lock
+ def inject_nmi(self, task):
+ """Inject NMI, Non Maskable Interrupt.
+
+ Inject NMI (Non Maskable Interrupt) for a node immediately.
+
+ :param task: A TaskManager instance containing the node to act on.
+ :raises: IRMCOperationError on an error from SCCI
+ :returns: None
+
+ """
+ node = task.node
+ irmc_client = irmc_common.get_irmc_client(node)
+ try:
+ irmc_client(scci.POWER_RAISE_NMI)
+ except scci.SCCIClientError as err:
+ LOG.error(
+ _LE('iRMC Inject NMI failed for node %(node)s: %(err)s.'),
+ {'node': node.uuid, 'err': err})
+ raise exception.IRMCOperationError(
+ operation=scci.POWER_RAISE_NMI, error=err)