diff --git a/agent_based/inv_huawei_hw_components.py b/agent_based/inv_huawei_hw_components.py new file mode 100644 index 0000000000000000000000000000000000000000..2c395dc90401d11bcba682b9d2dd68deee9c5c04 --- /dev/null +++ b/agent_based/inv_huawei_hw_components.py @@ -0,0 +1,114 @@ +#!/usr/bin/python +# -*- encoding: utf-8; py-indent-offset: 4 -*- +# +# License: GNU General Public License v2 +# +# Author: thl-cmk[at]outlook[dot]com +# URL : https://thl-cmk.hopto.org +# Date : 2020-07-14 +# +# extended inventory of Huawei hardware components +# +# 2023-06-02: rewritten for cmk 2.1 + +from typing import Dict, List + +from cmk.base.plugins.agent_based.agent_based_api.v1 import ( + register, + SNMPTree, + startswith, + TableRow, + OIDEnd, +) +from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( + InventoryResult, + StringTable, +) + + +def _get_snmp_date(manufactured_date): + year = (ord(manufactured_date[0]) << 8) + ord(manufactured_date[1]) + month = ord(manufactured_date[2]) + day = ord(manufactured_date[3]) + return f'{year}-{month:02d}-{day:02d}' + + +def parse_inv_huawei_hw_components(string_table: List[StringTable]) -> Dict: + phys_entities, huawei_entities = string_table + section = {} + phys_dict = {} + + for entry in phys_entities: + oid_end, description, name, hardware_rev, firmware_rev, software_rev, serial_num, mfg_name = entry + phys_dict[oid_end] = {} + phys_dict[oid_end]['description'] = description + phys_dict[oid_end]['name'] = name + phys_dict[oid_end]['hardware_revision'] = hardware_rev + phys_dict[oid_end]['firmware_revision'] = firmware_rev + phys_dict[oid_end]['software_revision'] = software_rev + phys_dict[oid_end]['vendor'] = mfg_name + phys_dict[oid_end]['serial_number'] = serial_num + + for entry in huawei_entities: + oid_end, bom_id, bom_en_desc, manufactured_date, board_type, optical_vendor_sn = entry + if bom_en_desc != '': + section[oid_end] = {} + section[oid_end]['bom_id'] = bom_id + section[oid_end]['bom_description'] = bom_en_desc + section[oid_end]['manufactured_date'] = _get_snmp_date(manufactured_date) + section[oid_end]['board_type'] = board_type + section[oid_end].update(phys_dict[oid_end]) + section[oid_end]['serial_number'] = optical_vendor_sn + + return section + + +def inventory_huawei_hw_components(section: Dict) -> InventoryResult: + path = ['hardware', 'components', 'huawei'] + + for key, value in section.items(): + yield TableRow( + path=path, + key_columns={ + 'index': key + }, + inventory_columns=value + ) + + +register.snmp_section( + name='inv_huawei_hw_components', + parse_function=parse_inv_huawei_hw_components, + fetch=[ + SNMPTree( + base='.1.3.6.1.2.1.47.1.1.1.1', + oids=[ + OIDEnd(), + '2', # entPhysicalDescr + '7', # entPhysicalName + '8', # entPhysicalHardwareRev + '9', # entPhysicalFirmwareRev + '10', # entPhysicalSoftwareRev + '11', # entPhysicalSerialNum + '12', # entPhysicalMfgName + ] + ), + SNMPTree( + base='.1.3.6.1.4.1.2011.5.25.31.1.1', + oids=[ + OIDEnd(), + '2.1.1', # hwEntityBomId + '2.1.2', # hwEntityBomEnDesc + '2.1.4', # hwEntityManufacturedDate + '2.1.11', # hwEntityBoardType + '3.1.4' # hwEntityOpticalVendorSn + ] + ) + ], + detect=startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.2011') +) + +register.inventory_plugin( + name='inv_huawei_hw_components', + inventory_function=inventory_huawei_hw_components, +) diff --git a/gui/views/inv_huawei_hw_components.py b/gui/views/inv_huawei_hw_components.py new file mode 100644 index 0000000000000000000000000000000000000000..aa33b5b68014e5717e75defcadb89c1cb44fbfd8 --- /dev/null +++ b/gui/views/inv_huawei_hw_components.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*-; py-indent-offset: 4 -*- + +from cmk.gui.plugins.views.utils import ( + inventory_displayhints, +) +from cmk.gui.plugins.views.inventory import ( + declare_invtable_view, + ) +from cmk.gui.i18n import _ + + +inventory_displayhints.update({ + '.hardware.components.huawei:': {'title': _('Huawei'), + 'keyorder': ['index', 'name', 'description', 'board_type', 'serial_number', + 'manufactured_date', 'vendor', + ], + 'view': 'invhuaweicomponents_of_host', + }, + '.hardware.components.huawei:*.index': {'title': _('Index'), }, + '.hardware.components.huawei:*.name': {'title': _('Name')}, + '.hardware.components.huawei:*.description': {'title': _('Description'), }, + '.hardware.components.huawei:*.bom_id': {'title': _('BOM ID'), }, + '.hardware.components.huawei:*.bom_description': {'title': _('BOM Description')}, + '.hardware.components.huawei:*.manufactured_date': {'title': _('Manufactured Date')}, + '.hardware.components.huawei:*.board_type': {'title': _('Board Type'), }, + '.hardware.components.huawei:*.software_revision': {'title': _('Software Revision'), }, + '.hardware.components.huawei:*.firmware_revision': {'title': _('Firmware Revision'), }, + '.hardware.components.huawei:*.hardware_revision': {'title': _('Hardware Revision'), }, + '.hardware.components.huawei:*.serial_number': {'title': _('Serial Number'), }, + '.hardware.components.huawei:*.vendor': {'title': _('Vendor'), }, + +}) + +declare_invtable_view('invhuaweicomponents', '.hardware.components.huawei:', _('Huawei hardware components'), + _('Huawei hardware components')) diff --git a/inv_huawei_hw_components-0.2.0-20230602.mkp b/inv_huawei_hw_components-0.2.0-20230602.mkp new file mode 100644 index 0000000000000000000000000000000000000000..aa676f3dc822dfbfacb4a2f2508a03f7f70839bd Binary files /dev/null and b/inv_huawei_hw_components-0.2.0-20230602.mkp differ diff --git a/inv_huawei_hw_components.mkp b/inv_huawei_hw_components.mkp index 084edc35b50cb44e40f93d34bbbe1d7102e05a33..aa676f3dc822dfbfacb4a2f2508a03f7f70839bd 100644 Binary files a/inv_huawei_hw_components.mkp and b/inv_huawei_hw_components.mkp differ diff --git a/packages/inv_huawei_hw_components b/packages/inv_huawei_hw_components index cce8645e50154e40fac34326034ae6f67250241c..acd8777cca6395703892380bfe1fe9b95cfcc09d 100644 --- a/packages/inv_huawei_hw_components +++ b/packages/inv_huawei_hw_components @@ -1,11 +1,11 @@ -{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)', - 'description': u'SNMP inventory for Huawei hardware components.', +{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)', + 'description': 'SNMP inventory for Huawei hardware components.\n', 'download_url': 'https://thl-cmk.hopto.org', - 'files': {'inventory': ['huawei_hw_components'], - 'web': ['plugins/views/inv_huawei_hw_components.py']}, + 'files': {'agent_based': ['inv_huawei_hw_components.py'], + 'gui': ['views/inv_huawei_hw_components.py']}, 'name': 'inv_huawei_hw_components', - 'num_files': 2, - 'title': u'Inventory for Huawei hardware components', - 'version': '20200714.v0.1c', - 'version.min_required': '1.2.8b8', - 'version.packaged': '1.4.0p38'} \ No newline at end of file + 'title': 'Inventory for Huawei hardware components', + 'version': '0.2.0-20230602', + 'version.min_required': '2.1.0b1', + 'version.packaged': '2.1.0p21', + 'version.usable_until': '2.2.0b1'} \ No newline at end of file