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
This commit is contained in:
Ilya Etingof 2018-05-09 13:46:49 +02:00
parent 189457ba9d
commit ba4ced4657
2 changed files with 8 additions and 7 deletions

View File

@ -16,6 +16,7 @@
import libvirt import libvirt
import mock import mock
from virtualbmc import exception
from virtualbmc.tests.unit import base from virtualbmc.tests.unit import base
from virtualbmc.tests.unit import utils as test_utils from virtualbmc.tests.unit import utils as test_utils
from virtualbmc import utils from virtualbmc import utils
@ -132,8 +133,7 @@ class VirtualBMCTestCase(base.TestCase):
def test_get_power_state_error(self, mock_libvirt_domain, def test_get_power_state_error(self, mock_libvirt_domain,
mock_libvirt_open): mock_libvirt_open):
mock_libvirt_domain.side_effect = libvirt.libvirtError('boom') mock_libvirt_domain.side_effect = libvirt.libvirtError('boom')
ret = self.vbmc.get_power_state() self.assertRaises(exception.VirtualBMCError, self.vbmc.get_power_state)
self.assertEqual(0xC0, ret)
self._assert_libvirt_calls(mock_libvirt_domain, mock_libvirt_open, self._assert_libvirt_calls(mock_libvirt_domain, mock_libvirt_open,
readonly=True) readonly=True)

View File

@ -15,6 +15,7 @@ import xml.etree.ElementTree as ET
import libvirt import libvirt
import pyghmi.ipmi.bmc as bmc import pyghmi.ipmi.bmc as bmc
from virtualbmc import exception
from virtualbmc import log from virtualbmc import log
from virtualbmc import utils from virtualbmc import utils
@ -116,11 +117,11 @@ class VirtualBMC(bmc.Bmc):
if domain.isActive(): if domain.isActive():
return POWERON return POWERON
except libvirt.libvirtError as e: except libvirt.libvirtError as e:
LOG.error('Error getting the power state of domain %(domain)s. ' msg = ('Error getting the power state of domain %(domain)s. '
'Error: %(error)s', {'domain': self.domain_name, 'Error: %(error)s', {'domain': self.domain_name,
'error': e}) 'error': e})
# Command failed, but let client to retry LOG.error(msg)
return IPMI_COMMAND_NODE_BUSY raise exception.VirtualBMCError(message=msg)
return POWEROFF return POWEROFF