Source code for nettoolkit.yaml_facts.juniper.parsers.interface_hardware

"""juniper show chassis hardware command output parser """

# ------------------------------------------------------------------------------
from .common import *
# ------------------------------------------------------------------------------

[docs] def get_chassis_hardware(cmd_op): """parse output of : show chassis hardware Args: command_output (list): command output Returns: dict: interface level parsed output dictionary """ op_dict = {} try: parsed_data_dict_list = parse_to_dict_using_ntc('show chassis hardware', cmd_op) parsed_data = parse_to_list_using_ntc('show chassis hardware', cmd_op) except: op_dict = get_chassis_hardware_iterative(cmd_op) return {'interfaces': {'physical_media': op_dict}} # for dic in parsed_data_dict_list: first_item_part_no = dic['PART'] break # for spl in parsed_data: part_idx = spl.index(first_item_part_no) break # for spl in parsed_data: port = "/".join(LST.remove_empty_members(spl[:part_idx])) sfp_part_id = spl[part_idx] sfp_serial = spl[part_idx+1] sfp = spl[part_idx+2] if not op_dict.get(port): op_dict[port] = {} op_dict[port]['media_type'] = sfp op_dict[port]['serial'] = sfp_serial op_dict[port]['part_id'] = sfp_part_id return {'interfaces': {'physical_media': op_dict}}
# ------------------------------------------------------------------------------
[docs] def get_chassis_hardware_iterative(cmd_op): cmd_op = verifid_output(cmd_op) toggle = False JCH = JuniperChassisHardware(cmd_op) return JCH.ports
[docs] class JuniperChassisHardware(): """read the show chassis hardware output from juniper and returns port type(sfp) Args: output (list): show chassis hardware output in list """ def __init__(self, output): """initialize and read output """ self.fpc, self.pic = '', '' self.port = '' self.ports = {} self._read(output) def _read(self, output): """read the output and adds line to port info Args: output (list): show chassis hardware command output in list """ for l in output: if not l.strip(): continue self._add(l) def _add(self, line): """adds port info from line Args: line (str): line outout """ # if line.upper().find("BUILTIN") > 0: return # Some of juniper output are incosistent so removed. spl = line.strip().split() if not spl[0].upper() in ("FPC", "PIC", "XCVR"): return if spl[0].upper() in ("FPC"): self.fpc = spl[1] self.pic = '' elif spl[0].upper() in ("PIC"): self.pic = self.fpc + "/" + spl[1] elif spl[0].upper() in ('XCVR',): self.port = self.pic + "/" + spl[1] if not self.ports.get(self.port): self.ports[self.port] = {} self.ports[self.port]['media_type'] = spl[-1] self.ports[self.port]['serial'] = spl[-2] self.ports[self.port]['part_id'] = spl[-3] self.port=''
[docs] def get_sfp(self, port): """get the SFP details for given port Args: port (str): port number only (port type to be excluded) Returns: str: SFP type """ for p, sfp in self.ports.items(): spl_port = port.split("-") if spl_port[-1] == p: return sfp return ""