Source code for taf.testlib.linux.ipmitool
# Copyright (c) 2015 - 2017, Intel Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""``ipmitool.py``
`Class to abstract ipmitool operations`
"""
import re
import pytest
[docs]class IpmiTool(object):
SERVICE = 'ipmitool'
[docs] def __init__(self, run_command):
"""Initialize IpmiTool class.
"""
super(IpmiTool, self).__init__()
self.run_command = run_command
[docs] def get_sdr_list(self):
"""Get all available Sensor Data Repository entries.
Returns:
list: Returns list of sdr
"""
sdr = self.run_command('"{}" sdr list'.format(self.SERVICE)).stdout
return re.findall(r'^(.*?)\s+\|', sdr, re.MULTILINE)
[docs] def get_sensors_states(self, sensor, expected_rcs=frozenset({0, 1})):
"""Get all available sensor states for sensor.
Args:
sensor(str): name of sensor
expected_rcs(set): if sensor is not available in HW rc=1, but events for sensor could be generated
Returns:
list: Returns list of sensor states
"""
sensor_states_list = self.run_command("{0} event '{1}'".format(self.SERVICE, sensor),
expected_rcs=expected_rcs).stdout
return re.findall(r'\s{3}(.+)', sensor_states_list, re.MULTILINE)
[docs] def generate_event(self, sensor, sensor_state):
"""Method for generating event for sensor with sensor state.
Args:
sensor(str): name of sensor
sensor_state(str): name of sensor state
"""
self.run_command('"{0}" event "{1}" "{2}"'.format(self.SERVICE, sensor, sensor_state.strip()))
[docs] def clear_sel(self):
"""Method for clear System Event Log.
"""
self.run_command('"{0}" sel clear'.format(self.SERVICE))
[docs] def is_ipmi_supported_by_system(self):
"""Method for check if ipmi is supported by device.
"""
if 'IPMI' not in self.run_command('dmidecode -t38').stdout:
pytest.skip('ipmi does not supported on current machine')