Source code for pyhpecw7.features.facts

"""Gather device facts on HPCOM7 devices.
"""
import collections
from pyhpecw7.utils.xml.lib import *


[docs]class Facts(object): """Gather device facts from a HP Comware 7 device. Args: device (HPCOM7): connected instance of a ``pyhpecw7.comware.HPCOM7`` object. Attributes: device (HPCOM7): connected instance of a ``pyhpecw7.comware.HPCOM7`` object. facts (dict): this is a read-only attribute. Details can be seen in ``get_facts``. """ def __init__(self, device): self.device = device self.em = data_element_maker() @property def facts(self): return self.get_facts()
[docs] def get_facts(self): """Gather facts from the HP Comware 7 device Returns: This returns a dictionary with several key/value pairs describing the device. See example below. Example:: { 'hostname': 'HP5930_1', 'interface_list': ["FortyGigE1/0/1", "FortyGigE1/0/2", "FortyGigE1/0/3", "FortyGigE1/0/4"], 'localtime': '2016-01-30T01:47:07', 'model': 'HP FF 5930-32QSFP+ Switch', 'os': '7.1.045 Release 2418P01', 'serial_number': 'CN43G9800T', 'uptime': '6d 23hr 25min 18sec', 'vendor': 'hp', 'hardware': 'Ver.A' } """ facts = collections.OrderedDict() facts.update(self._get_inventory()) facts.update(self._get_base()) facts.update(self._get_interface_list()) return facts
def _get_interface_list(self): """Get interface list that will be added to facts. """ E = self.em top = E.top( E.Ifmgr( E.Interfaces( E.Interface( E.Name() ) ) ) ) nc_get_reply = self.device.get(('subtree', top)) intfs_xml = findall_in_data('Name', nc_get_reply.data_ele) interfaces = [intf.text for intf in intfs_xml] intfs = dict(interface_list=interfaces) return intfs def _get_uptime(self, seconds): """Convert seconds to d, hr, min, sec format. """ m, s = divmod(int(seconds), 60) h, m = divmod(m, 60) d = 0 if h > 23: d, h = divmod(h, 24) uptime = '{0}d {1}hr {2}min {3}sec'.format(d, h, m, s) return uptime def _get_inventory(self): """Get os, serial number, and model that will be added to facts. """ key_map = { 'os': 'SoftwareRev', 'serial_number': 'SerialNum', 'model': 'ModelName', 'hardware': 'HardwareRev' } E = self.em top = E.top( E.LLDP( E.Inventory( E.SoftwareRev(), E.SerialNum(), E.ModelName(), E.HardwareRev(), ) ) ) nc_get_reply = self.device.get(('subtree', top)) inventory = data_elem_to_dict(nc_get_reply.data_ele, key_map) inventory['vendor'] = 'hp' return inventory def _get_base(self): """Get hostname, localtime, and uptime that will be added to facts. """ key_map = { 'hostname': 'HostName', 'localtime': 'LocalTime', 'uptime': 'Uptime' } E = self.em top = E.top( E.Device( E.Base( E.HostName(), E.LocalTime(), E.Uptime(), ) ) ) nc_get_reply = self.device.get(('subtree', top)) basefacts = data_elem_to_dict(nc_get_reply.data_ele, key_map) basefacts['uptime'] = self._get_uptime(basefacts.get('uptime', 0)) return basefacts