From ba4ced4657fe3c141cbf7477b7f8ff3b061b7967 Mon Sep 17 00:00:00 2001 From: Ilya Etingof Date: Wed, 9 May 2018 13:46:49 +0200 Subject: [PATCH] Fix power status command error reporting With pyghmi API, some methods return generic IPMI error codes, while some return payload values. This patch fixes the `get_power_state()` method to raise exception instead of returning IPMI error code because the latter goes against pyghmi API. Change-Id: If30c1ee49982a7a1198a39a7afdc1edc2c516078 --- virtualbmc/tests/unit/test_vbmc.py | 4 ++-- virtualbmc/vbmc.py | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/virtualbmc/tests/unit/test_vbmc.py b/virtualbmc/tests/unit/test_vbmc.py index 9d6f66e..8f37764 100644 --- a/virtualbmc/tests/unit/test_vbmc.py +++ b/virtualbmc/tests/unit/test_vbmc.py @@ -16,6 +16,7 @@ import libvirt import mock +from virtualbmc import exception from virtualbmc.tests.unit import base from virtualbmc.tests.unit import utils as test_utils from virtualbmc import utils @@ -132,8 +133,7 @@ class VirtualBMCTestCase(base.TestCase): def test_get_power_state_error(self, mock_libvirt_domain, mock_libvirt_open): mock_libvirt_domain.side_effect = libvirt.libvirtError('boom') - ret = self.vbmc.get_power_state() - self.assertEqual(0xC0, ret) + self.assertRaises(exception.VirtualBMCError, self.vbmc.get_power_state) self._assert_libvirt_calls(mock_libvirt_domain, mock_libvirt_open, readonly=True) diff --git a/virtualbmc/vbmc.py b/virtualbmc/vbmc.py index c20a9f1..98f76ac 100644 --- a/virtualbmc/vbmc.py +++ b/virtualbmc/vbmc.py @@ -15,6 +15,7 @@ import xml.etree.ElementTree as ET import libvirt import pyghmi.ipmi.bmc as bmc +from virtualbmc import exception from virtualbmc import log from virtualbmc import utils @@ -116,11 +117,11 @@ class VirtualBMC(bmc.Bmc): if domain.isActive(): return POWERON except libvirt.libvirtError as e: - LOG.error('Error getting the power state of domain %(domain)s. ' - 'Error: %(error)s', {'domain': self.domain_name, - 'error': e}) - # Command failed, but let client to retry - return IPMI_COMMAND_NODE_BUSY + msg = ('Error getting the power state of domain %(domain)s. ' + 'Error: %(error)s', {'domain': self.domain_name, + 'error': e}) + LOG.error(msg) + raise exception.VirtualBMCError(message=msg) return POWEROFF