Source code for insights.parsers.hponcfg

"""
HponConf - command ``/sbin/hponcfg -g``
=======================================

Get the iLO firmware revision from the ``hponcfg`` command.
This is a 3rd party utility from HP and isn't shipped with RHEL.  However,
it's useful for detecting possible hardware incompatibilities.

There are only five pieces of information extracted:

* **firmware_revision** - the ``Firmware Revision`` value
* **device_type** - the ``Device type`` value
* **driver_name** - the ``Driver name`` value
* **server_name** - the ``Server Name`` value
* **server_number** - the ``Server Number`` value

Values are '' if not listed in the output.

Input looks like this::

    HP Lights-Out Online Configuration utility
    Version 4.3.1 Date 05/02/2014 (c) Hewlett-Packard Company, 2014
    Firmware Revision = 1.22 Device type = iLO 4 Driver name = hpilo
    Host Information:
                            Server Name: esxi01.hp.local
                            Server Number:

Examples:

    >>> cfg = shared[HponConf]
    >>> cfg.data['firmware_revision']
    '1.22'
    >>> cfg.data['server_name']
    'esxi01.hp.local'
    >>> cfg.data['server_number']
    ''
    >>> 'Version' in cfg.data # other values in the hponcfg output not found
    False
"""

from .. import parser, get_active_lines, CommandParser
from insights.specs import Specs

DRIVER_NAME = 'driver_name'
DEVICE_TYPE = 'device_type'
FIRMWARE_REVISION = 'firmware_revision'


[docs] @parser(Specs.hponcfg_g) class HponConf(CommandParser): """ Read the output of the HP ILO configuration utility. Attributes: firmware_revision (str): The firmware revision string. device_type (str): The device type (e.g. 'iLO 4'). driver_name (str): The driver name (e.g. 'hpilo'). """
[docs] def parse_content(self, content): self.data = {} line_iter = iter(get_active_lines(content)) while True: try: line = next(line_iter) if 'Firmware Revision' in line: line = line.replace('Firmware Revision', '').replace('Device type', '').replace('Driver name', '') val = [x.strip() for x in line.split('=') if x.strip()] self.data[FIRMWARE_REVISION] = val[0] self.data[DEVICE_TYPE] = val[1] self.data[DRIVER_NAME] = val[2] if 'Host Information' in line: line = next(line_iter).strip() val = line.split('Server Name:') if len(val) > 1: self.data['server_name'] = val[1].strip() line = next(line_iter).strip() val = line.split('Server Number:') if len(val) > 1: self.data['server_number'] = val[1].strip() except StopIteration: break
def __getitem__(self, i): return self.data[i] @property def firmware_revision(self): return self.data.get(FIRMWARE_REVISION, None) @property def device_type(self): return self.data.get(DEVICE_TYPE, None) @property def driver_name(self): return self.data.get(DRIVER_NAME, None)