From bde9d35b74c44c0bc2b972e77e7d539f79923603 Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Tue, 28 Jun 2022 19:32:38 +0200
Subject: [PATCH] update project

---
 agent_based/inv_opengear_base.py | 119 +++++++++++++++++++++++++++++++
 inv_opengear_base.mkp            | Bin 0 -> 1713 bytes
 packages/inv_opengear_base       |  20 ++++++
 3 files changed, 139 insertions(+)
 create mode 100644 agent_based/inv_opengear_base.py
 create mode 100644 inv_opengear_base.mkp
 create mode 100644 packages/inv_opengear_base

diff --git a/agent_based/inv_opengear_base.py b/agent_based/inv_opengear_base.py
new file mode 100644
index 0000000..ade8a82
--- /dev/null
+++ b/agent_based/inv_opengear_base.py
@@ -0,0 +1,119 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# License: GNU General Public License v2
+#
+# Author: thl-cmk[at]outlook[dot]com
+# URL   : https://thl-cmk.hopto.org
+# Date  : 2021-12-25
+#
+# opengear base inventory
+#
+# sample string_table
+# [
+#  [
+#   ['4.1.1u2 594cb83d ()', 'N/A']
+#  ],
+#  [
+#   ['1'], ['1'], ['1'], ['1'], ['1'], ['1'], ['1'], ['1'], ['1'], ['1'], ['2'], ['2'], ['2'], ['2'], ['2'], ['2']
+#  ],
+#  [
+#   ['.1.3.6.1.4.1.25049.1.60']
+#  ]
+# ]
+#
+
+from typing import List, Optional
+
+from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
+    StringTable,
+    InventoryResult,
+)
+from cmk.base.plugins.agent_based.agent_based_api.v1 import (
+    Attributes,
+    register,
+    SNMPTree,
+    startswith,
+)
+
+_opengear_models = {
+    ('.1.3.6.1.4.1.25049.1.11', 18): 'CM7116',  # 16 serial + 2 usb lines
+    ('.1.3.6.1.4.1.25049.1.11', 34): 'CM7132',  # 32 serial + 2 usb lines
+    ('.1.3.6.1.4.1.25049.1.11', 48): 'CM7148',  # 48 serial + 2 usb lines
+    ('.1.3.6.1.4.1.25049.1.60', 16): 'IM4216',  # 16 serial lines
+}
+
+
+def parse_inv_opengear_base(string_table: List[StringTable]) -> Optional[List]:
+    inv_data, ogSerialPortCTS, sysObjectID = string_table
+
+    firmware_version, serial_number = inv_data[0]
+
+    if serial_number == 'N/A':
+        serial_number = ''
+    number_of_lines = len(ogSerialPortCTS)
+    sysObjectID = sysObjectID[0][0]
+    model_name = _opengear_models.get((sysObjectID, number_of_lines), '')
+
+    section = []
+
+    invPath = ['hardware', 'system']
+
+    for key, value in [
+        ('serial', serial_number),
+        ('manufacturer', 'opengear'),
+        ('model', model_name),
+    ]:
+        if not value == '':
+            section.append((invPath, key, value))
+
+    invPath = ['software', 'firmware']
+
+    for key, value in [
+        ('vendor', 'opengear'),
+        ('version', firmware_version),
+    ]:
+        if not value == '':
+            section.append((invPath, key, value))
+
+    return section
+
+
+def inventory_opengear_base(section: List) -> InventoryResult:
+    for invPath, key, value in section:
+        yield Attributes(
+            path=invPath,
+            inventory_attributes={key: value})
+
+
+register.snmp_section(
+    name='inv_opengear_base',
+    parse_function=parse_inv_opengear_base,
+    fetch=[
+        SNMPTree(
+            base='.1.3.6.1.4.1.25049.17.1',  # OG-STATUSv2-MIB
+            oids=[
+                '1',  # ogFirmwareVersion
+                '2',  # ogSerialNumber
+            ]
+        ),
+        SNMPTree(
+            base='.1.3.6.1.4.1.25049.17.2.1',  # OG-STATUSv2-MIB
+            oids=[
+                '19',  # ogSerialPortCTS. ogSerialPortIndex don't exist so we use CTS to get the number of lines
+            ]
+        ),
+        SNMPTree(
+            base='.1.3.6.1.2.1.1',  # SNMPv2-MIB
+            oids=[
+                '2',  # sysObjectID
+            ]
+        ),
+    ],
+    detect=startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.25049'),  # sysObjectID == opengear
+)
+
+register.inventory_plugin(
+    name='inv_opengear_base',
+    inventory_function=inventory_opengear_base,
+)
diff --git a/inv_opengear_base.mkp b/inv_opengear_base.mkp
new file mode 100644
index 0000000000000000000000000000000000000000..a8bf886af88a5a756d1d7ac4e6e3b538c9c73a6a
GIT binary patch
literal 1713
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
H08jt`#*sM3

literal 0
HcmV?d00001

diff --git a/packages/inv_opengear_base b/packages/inv_opengear_base
new file mode 100644
index 0000000..ea3488e
--- /dev/null
+++ b/packages/inv_opengear_base
@@ -0,0 +1,20 @@
+{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
+ 'description': 'base inventory for opengear console servers.\n'
+                '\n'
+                'Adds the serial number, model, manufacturer and firmware '
+                'version to the inventory.\n'
+                '\n'
+                'Supported models:\n'
+                '- IM4216\n'
+                '- CM7116\n'
+                '- CM7132\n'
+                '- CM7148\n',
+ 'download_url': 'https://thl-cmk.hopto.org',
+ 'files': {'agent_based': ['inv_opengear_base.py']},
+ 'name': 'inv_opengear_base',
+ 'num_files': 1,
+ 'title': 'opengear base inventory',
+ 'version': '20220628.v.0.01',
+ 'version.min_required': '2.0.0',
+ 'version.packaged': '2021.09.20',
+ 'version.usable_until': None}
\ No newline at end of file
-- 
GitLab