From 0b927ffc024151a3f24b7097104f8139414524dc Mon Sep 17 00:00:00 2001 From: Jonathan Provost Date: Thu, 7 Jan 2016 17:13:06 -0500 Subject: [PATCH] Adjust ipminative._reboot to comply with pyghmi contract In most of the cases, pyghmi will raise if the expected powerstate is not applied. In some other cases, it will return a dict containing a key "error". Change-Id: I1d63401a58a7d1a6de92ab482ebbcb89bf752b63 Closes-Bug: 1531981 --- ironic/drivers/modules/ipminative.py | 7 +++---- ironic/tests/unit/drivers/modules/test_ipminative.py | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/ironic/drivers/modules/ipminative.py b/ironic/drivers/modules/ipminative.py index 9b9409a2f4..d461d3ed71 100644 --- a/ironic/drivers/modules/ipminative.py +++ b/ironic/drivers/modules/ipminative.py @@ -221,14 +221,13 @@ def _reboot(driver_info): LOG.error(error) raise exception.IPMIFailure(error) - state = ret.get('powerstate') - if state == 'on': - return states.POWER_ON - else: + if 'error' in ret: error = _("bad response: %s") % ret LOG.error(msg, {'node_id': driver_info['uuid'], 'error': error}) raise exception.PowerStateFailure(pstate=states.REBOOT) + return states.POWER_ON + def _power_status(driver_info): """Get the power status for this node. diff --git a/ironic/tests/unit/drivers/modules/test_ipminative.py b/ironic/tests/unit/drivers/modules/test_ipminative.py index e745590f67..b89e528a5b 100644 --- a/ironic/tests/unit/drivers/modules/test_ipminative.py +++ b/ironic/tests/unit/drivers/modules/test_ipminative.py @@ -400,7 +400,7 @@ class IPMINativeDriverTestCase(db_base.DbTestCase): @mock.patch('pyghmi.ipmi.command.Command', autospec=True) def test_reboot_fail(self, ipmi_mock): ipmicmd = ipmi_mock.return_value - ipmicmd.set_power.return_value = {'powerstate': 'error'} + ipmicmd.set_power.return_value = {'error': 'Some IPMI error'} self.config(retry_timeout=500, group='ipmi') with task_manager.acquire(self.context,