zvm inspector can not get instance data in shutdown stat
There's no performance data return from zvm management tool if the virtual machine in shutdown stat. In current implementation, InstanceNotFoundException would be raised in this case. With this change integrated, zvm inspector will check instance's power_state at first, then try to get the data. Also did some change to ignore invalid data format exception that in case of all virtual machines on the compute node are in shutdow state. Change-Id: I02b69adc6e818a69d1e6887a3344f6bf0b344aa7
This commit is contained in:
parent
a2f452b5ee
commit
dddf5f281b
@ -14,6 +14,7 @@
|
||||
|
||||
|
||||
from ceilometer.compute.virt import inspector as virt_inspector
|
||||
from ceilometer.i18n import _
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log
|
||||
from oslo_utils import timeutils
|
||||
@ -138,9 +139,15 @@ class ZVMInspector(virt_inspector.Inspector):
|
||||
self._update_cache(meter)
|
||||
|
||||
def _get_inst_stat(self, meter, instance):
|
||||
inst_name = zvmutils.get_inst_name(instance)
|
||||
# zvm inspector can not get instance info in shutdown stat
|
||||
if zvmutils.get_inst_power_state(instance) == 0x04:
|
||||
msg = _("Can not get vm info in shutdown state "
|
||||
"for %s") % inst_name
|
||||
raise virt_inspector.InstanceShutOffException(msg)
|
||||
|
||||
self._check_expiration_and_update_cache(meter)
|
||||
|
||||
inst_name = zvmutils.get_inst_name(instance)
|
||||
inst_stat = self.cache.get(meter, inst_name)
|
||||
|
||||
if inst_stat is None:
|
||||
@ -150,7 +157,8 @@ class ZVMInspector(virt_inspector.Inspector):
|
||||
inst_stat = self.cache.get(meter, inst_name)
|
||||
|
||||
if inst_stat is None:
|
||||
raise virt_inspector.InstanceNotFoundException()
|
||||
msg = _("Can not get vm info for %s") % inst_name
|
||||
raise virt_inspector.InstanceNotFoundException(msg)
|
||||
else:
|
||||
return inst_stat
|
||||
|
||||
|
@ -235,11 +235,6 @@ def translate_xcat_resp(rawdata, dirt):
|
||||
data[k] = ls[(ls.find(dirt[k]) + len(dirt[k])):].strip(' "')
|
||||
break
|
||||
|
||||
if data == {}:
|
||||
msg = _("No value matched with keywords. Raw Data: %(raw)s; "
|
||||
"Keywords: %(kws)s") % {'raw': rawdata, 'kws': str(dirt)}
|
||||
raise ZVMException(msg)
|
||||
|
||||
return data
|
||||
|
||||
|
||||
@ -375,7 +370,8 @@ def image_performance_query(zhcp_node, inst_list):
|
||||
rpi_list = raw_data.split("".join((zhcp_node, ": \n")))
|
||||
for rpi in rpi_list:
|
||||
pi = translate_xcat_resp(rpi, ipq_kws)
|
||||
pi_dict[pi['userid']] = pi
|
||||
if pi.get('userid') is not None:
|
||||
pi_dict[pi['userid']] = pi
|
||||
|
||||
return pi_dict
|
||||
|
||||
@ -384,6 +380,10 @@ def get_inst_name(instance):
|
||||
return getattr(instance, 'OS-EXT-SRV-ATTR:instance_name', None)
|
||||
|
||||
|
||||
def get_inst_power_state(instance):
|
||||
return getattr(instance, 'OS-EXT-STS:power_state', None)
|
||||
|
||||
|
||||
def virutal_network_vswitch_query_iuo_stats(zhcp_node):
|
||||
cmd = ('smcli Virtual_Network_Vswitch_Query_IUO_Stats -T "%s" '
|
||||
'-k "switch_name=*"' % zhcp_node)
|
||||
|
@ -131,6 +131,19 @@ class TestZVMInspector(base.BaseTestCase):
|
||||
check_update.assert_called_once_with('cpumem')
|
||||
update.assert_called_once_with('cpumem', {'inst1': 'INST1'})
|
||||
|
||||
@mock.patch.object(zvmutils, 'get_inst_power_state')
|
||||
@mock.patch.object(zvmutils, 'get_inst_name')
|
||||
def test_get_inst_stat_shutoff(self, get_name, get_power_stat):
|
||||
get_name.return_value = 'inst1'
|
||||
get_power_stat.return_value = 0x04
|
||||
self.inspector.instances = {'inst1': 'INST1'}
|
||||
|
||||
self.assertRaises(virt_inspertor.InstanceShutOffException,
|
||||
self.inspector._get_inst_stat, 'cpumem',
|
||||
{'inst1': 'INST1'})
|
||||
get_name.assert_called_once_with({'inst1': 'INST1'})
|
||||
get_power_stat.assert_called_once_with({'inst1': 'INST1'})
|
||||
|
||||
@mock.patch("ceilometer_zvm.compute.virt.zvm.inspector.ZVMInspector."
|
||||
"_update_cache")
|
||||
@mock.patch.object(zvmutils, 'get_userid')
|
||||
|
@ -189,13 +189,6 @@ class TestZVMUtils(base.BaseTestCase):
|
||||
self.assertEqual(exp_data,
|
||||
zvmutils.image_performance_query('zhcp', inst_list))
|
||||
|
||||
@mock.patch.object(zvmutils, 'xdsh')
|
||||
def test_image_performance_query_invalid_xdsh_resp(self, dsh):
|
||||
dsh.return_value = {'data': 'invalid data'}
|
||||
inst_list = {'inst1': 'INST1', 'inst2': 'INST2'}
|
||||
self.assertRaises(zvmutils.ZVMException,
|
||||
zvmutils.image_performance_query, 'zhcp', inst_list)
|
||||
|
||||
@mock.patch.object(zvmutils, 'xdsh')
|
||||
def test_virutal_network_vswitch_query_iuo_stats(self, dsh):
|
||||
vsw_data = ['zhcp11: vswitch count: 2\n'
|
||||
|
Loading…
x
Reference in New Issue
Block a user