From 3e49d45bcc2a3fac4324544ddc522d338477e565 Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Fri, 8 Mar 2024 16:40:47 +0100
Subject: [PATCH] update project

---
 README.md                                     |   1 +
 ..._cisco_wlc_ap_cdp_cache-0.4.1-20240308.mkp | Bin 0 -> 3526 bytes
 .../agent_based/inv_cisco_wlc_ap_cdp_cache.py | 185 ++++++++++++++++++
 .../inv_cisco_wlc_ap_cdp_cache.py             |  76 +++++++
 source/packages/inv_cisco_wlc_ap_cdp_cache    |  21 ++
 .../views/inv_cisco_wlc_ap_cdp_cache.py       |  34 ++++
 6 files changed, 317 insertions(+)
 create mode 100644 mkp/inv_cisco_wlc_ap_cdp_cache-0.4.1-20240308.mkp
 create mode 100644 source/agent_based/inv_cisco_wlc_ap_cdp_cache.py
 create mode 100644 source/gui/wato/check_parameters/inv_cisco_wlc_ap_cdp_cache.py
 create mode 100644 source/packages/inv_cisco_wlc_ap_cdp_cache
 create mode 100644 source/web/plugins/views/inv_cisco_wlc_ap_cdp_cache.py

diff --git a/README.md b/README.md
index 31a7384..2a289b7 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
+[PACKAGE]: ../../raw/master/mkp/inv_cisco_wlc_ap_cdp_cache-0.4.1-20240308.mkp "inv_cisco_wlc_ap_cdp_cache-0.4.1-20240308.mkp"
 # Cisco WLC AP CDP cache inventory plugin 
 
 Adds APs CDP information to the inventory
diff --git a/mkp/inv_cisco_wlc_ap_cdp_cache-0.4.1-20240308.mkp b/mkp/inv_cisco_wlc_ap_cdp_cache-0.4.1-20240308.mkp
new file mode 100644
index 0000000000000000000000000000000000000000..f1ee1d7d9944f04d602f8ed2914c9608b3ba91c8
GIT binary patch
literal 3526
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
U{eLLo_EMq*dJ;(Tg@ojP0Cn;Ey#N3J

literal 0
HcmV?d00001

diff --git a/source/agent_based/inv_cisco_wlc_ap_cdp_cache.py b/source/agent_based/inv_cisco_wlc_ap_cdp_cache.py
new file mode 100644
index 0000000..b983c81
--- /dev/null
+++ b/source/agent_based/inv_cisco_wlc_ap_cdp_cache.py
@@ -0,0 +1,185 @@
+#!/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  : 2016-04-08
+#
+# inventory of cisco wlc ap cdp cache
+#
+# 2016-08-22: removed index column
+# 2018-08-03: code cleanup
+# 2018-09-04: changes for CMK 1.5.x (inv_tree --> inv_tree_list)
+# 2020-03-15: added support for CMK1.6x
+# 2021-07-10: rewritten vor CMK 2.0
+# 2021-07-15 : added support for Catalyst 9800 Controllers
+# 2023-06-07: moved gui files to ~/local/lib/chek_mk/gui/plugins/...
+#
+
+from cmk.base.plugins.agent_based.agent_based_api.v1 import (
+    register,
+    SNMPTree,
+    TableRow,
+    contains,
+    any_of,
+)
+from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
+    StringTable,
+    InventoryResult,
+)
+
+
+def _render_ip_address(bytestring):
+    if len(bytestring) == 4:
+        return '.'.join(['%s' % ord(m) for m in bytestring])
+    else:
+        bytestring_clean = bytestring.replace('"', '').replace('|4|', '').replace('.', ' ').strip().split(' ')
+        try:
+            return '.'.join(['%s' % int(m, 16) for m in bytestring_clean])
+        except ValueError:
+            return bytestring
+
+
+_cdp_duplex = {
+    '0': 'N/A',
+    '1': 'unknown',
+    '2': 'full duplex',
+    '3': 'half duplex',
+}
+
+_cdp_speed = {
+    '0': 'N/A',
+    '1': 'none',
+    '2': '10Mbps',
+    '3': '100Mbps',
+    '4': '1000Mbps',
+    '5': 'auto',
+}
+
+_interface_displayhints = {
+    'ethernet': 'eth',
+    'fastethernet': 'Fa',
+    'gigabitethernet': 'Gi',
+    'tengigabitethernet': 'Te',
+    'fortygigabitethernet': 'Fo',
+    'hundredgigabitethernet': 'Hu',
+    'port-channel': 'Po',
+    'tunnel': 'Tu',
+    'loopback': 'Lo',
+    'cellular': 'Cel',
+    'vlan': 'Vlan',
+    'management': 'Ma',
+}
+
+
+def _get_short_if_name(ifname: str) -> str:
+    """
+    returns short interface name from long interface name
+    ifname: is the long interface name
+    :type ifname: str
+    """
+
+    for ifname_prefix in _interface_displayhints.keys():
+        if ifname.lower().startswith(ifname_prefix.lower()):
+            ifname_short = _interface_displayhints[ifname_prefix]
+            return ifname.lower().replace(ifname_prefix.lower(), ifname_short, 1)
+    return ifname
+
+
+def parse_cisco_wlc_ap_cdp_cache(string_table: StringTable):
+    neighbours = []
+    for deviceindex, apname, apaddresstype, apaddress, neighname, neighaddresstype, neighaddress, neighinterface, \
+        platform, duplex, speed in string_table:
+
+        if int(apaddresstype) == 1:
+            apaddress = _render_ip_address(apaddress)
+
+        if int(neighaddresstype) == 1:
+            neighaddress = _render_ip_address(neighaddress)
+
+        neighbours.append({
+            'ap_name': apname,
+            'ap_address': apaddress,
+            'neighbour_name': neighname,
+            'neighbour_address': neighaddress,
+            'neighbour_interface': neighinterface,
+            'neighbour_platform': platform,
+            'duplex': _cdp_duplex.get(duplex),
+            'speed': _cdp_speed.get(speed),
+        })
+
+    return neighbours
+
+
+def inventory_cisco_wlc_ap_cdp_cache(params, section) -> InventoryResult:
+    removecolumns = []
+    remove_domain = False
+    domain_name = ''
+    use_short_if_name = False
+
+    if params:
+        removecolumns = params.get('removecolumns', removecolumns)
+        remove_domain = params.get('remove_domain', remove_domain)
+        domain_name = params.get('domain_name', domain_name)
+        use_short_if_name = params.get('use_short_if_name', use_short_if_name)
+
+    path = ['networking', 'wlan', 'controller', 'ap_cdp_cache']
+
+    for neighbour in section:
+        if remove_domain:
+            if not domain_name == '':
+                neighbour['neighbour_name'] = neighbour['neighbour_name'].replace(domain_name, '')
+            else:
+                neighbour['neighbour_name'] = neighbour['neighbour_name'].split('.')[0]
+
+        if use_short_if_name:
+            neighbour['neighbour_interface'] = _get_short_if_name(neighbour['neighbour_interface'])
+
+        key_columns = {'ap_name': neighbour['ap_name']}
+
+        for key in key_columns.keys():
+            neighbour.pop(key)
+
+        for entry in removecolumns:
+            neighbour.pop(entry)
+
+        yield TableRow(
+            path=path,
+            key_columns=key_columns,
+            inventory_columns=neighbour
+        )
+
+
+register.snmp_section(
+    name='inv_cisco_wlc_ap_cdp_cache',
+    parse_function=parse_cisco_wlc_ap_cdp_cache,
+    fetch=SNMPTree(
+        base='.1.3.6.1.4.1.9.9.623.1.3.1.1',  # CISCO-LWAPP-CDP-MIB::clcCdpApCacheEntry
+        oids=[
+            '1',  # clcCdpApCacheDeviceIndex
+            '2',  # clcCdpApCacheApName
+            '3',  # clcCdpApCacheApAddressType
+            '4',  # clcCdpApCacheApAddress
+            '6',  # clcCdpApCacheNeighName
+            '7',  # clcCdpApCacheNeighAddressType
+            '8',  # clcCdpApCacheNeighAddress
+            '9',  # clcCdpApCacheNeighInterface
+            '12',  # clcCdpApCachePlatform
+            '15',  # clcCdpApCacheDuplex
+            '16',  # clcCdpApCacheInterfaceSpeed
+        ]
+    ),
+    detect=any_of(
+        contains('.1.3.6.1.2.1.1.1.0', 'Cisco Controller'),  # sysDescr
+        contains('.1.3.6.1.2.1.1.1.0', 'C9800 Software'),  # sysDescr
+    )
+)
+
+register.inventory_plugin(
+    name='inv_cisco_wlc_ap_cdp_cache',
+    inventory_function=inventory_cisco_wlc_ap_cdp_cache,
+    inventory_default_parameters={},
+    inventory_ruleset_name='inv_cisco_wlc_ap_cdp_cache',
+)
diff --git a/source/gui/wato/check_parameters/inv_cisco_wlc_ap_cdp_cache.py b/source/gui/wato/check_parameters/inv_cisco_wlc_ap_cdp_cache.py
new file mode 100644
index 0000000..d24febe
--- /dev/null
+++ b/source/gui/wato/check_parameters/inv_cisco_wlc_ap_cdp_cache.py
@@ -0,0 +1,76 @@
+#!/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  : 2016-04-08
+#
+#
+# 2023-06-14: moved wato file to check_parameters sub directory
+
+from cmk.gui.i18n import _
+from cmk.gui.plugins.wato.utils import (
+    HostRulespec,
+    rulespec_registry,
+)
+from cmk.gui.valuespec import (
+    Dictionary,
+    FixedValue,
+    TextAscii,
+    ListChoice,
+)
+
+from cmk.gui.plugins.wato.inventory import (
+    RulespecGroupInventory,
+)
+
+_removecolumns_cisco_wlc_ap_cdp_cache = [
+    ('duplex', 'Duplex'),
+    ('speed', 'Speed'),
+]
+
+
+def _valuespec_inv_cisco_wlc_ap_cdp_cache():
+    return Dictionary(
+        title=_('Cisco WLC AP CDP cache'),
+        elements=[
+            ('remove_domain',
+             FixedValue(
+                 True,
+                 title=_('Remove domain name from neighbour device name'),
+                 totext=_('Remove the domain name enabled'),
+                 default_value=False,
+             )),
+            ('domain_name',
+             TextAscii(
+                 title=_('Specific domain name to remove from neighbour device name'),
+                 allow_empty=False,
+                 default_value='',
+             )),
+            ('removecolumns',
+             ListChoice(
+                 title=_('List of columns to remove'),
+                 help=_('information to remove from inventory'),
+                 choices=_removecolumns_cisco_wlc_ap_cdp_cache,
+                 default_value=[],
+             )),
+            ('use_short_if_name',
+             FixedValue(
+                 True,
+                 title=_('use short interface names (i.e. Gi0/0 for GigabitEthernet0/0)'),
+                 totext=_('use short interface names enabled'),
+                 default_value=False,
+             )),
+        ],
+    )
+
+
+rulespec_registry.register(
+    HostRulespec(
+        group=RulespecGroupInventory,
+        match_type='dict',
+        name='inv_parameters:inv_cisco_wlc_ap_cdp_cache',
+        valuespec=_valuespec_inv_cisco_wlc_ap_cdp_cache,
+    ))
diff --git a/source/packages/inv_cisco_wlc_ap_cdp_cache b/source/packages/inv_cisco_wlc_ap_cdp_cache
new file mode 100644
index 0000000..ad53498
--- /dev/null
+++ b/source/packages/inv_cisco_wlc_ap_cdp_cache
@@ -0,0 +1,21 @@
+{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
+ 'description': 'SNMP inventory for Cisco WLC AP CDP cache '
+                '(CISCO-LWAPP-CDP-MIB).\n'
+                '\n'
+                'via WATO you can:\n'
+                ' - you can add/remove some fields\n'
+                ' - remove domain from neighbor name\n'
+                ' - use short interface names\n'
+                '\n'
+                '2020-03.15: added support for CMK1.6x\n'
+                '2021-07-10: rewritten for CMK 2.0\n',
+ 'download_url': 'https://thl-cmk.hopto.org',
+ 'files': {'agent_based': ['inv_cisco_wlc_ap_cdp_cache.py'],
+           'gui': ['wato/check_parameters/inv_cisco_wlc_ap_cdp_cache.py'],
+           'web': ['plugins/views/inv_cisco_wlc_ap_cdp_cache.py']},
+ 'name': 'inv_cisco_wlc_ap_cdp_cache',
+ 'title': 'inventory for Cisco WLC AP CDP cache (CISCO-LWAPP-CDP-MIB)',
+ 'version': '0.4.1-20240308',
+ 'version.min_required': '2.2.0b1',
+ 'version.packaged': '2.2.0p17',
+ 'version.usable_until': None}
diff --git a/source/web/plugins/views/inv_cisco_wlc_ap_cdp_cache.py b/source/web/plugins/views/inv_cisco_wlc_ap_cdp_cache.py
new file mode 100644
index 0000000..93d1b3a
--- /dev/null
+++ b/source/web/plugins/views/inv_cisco_wlc_ap_cdp_cache.py
@@ -0,0 +1,34 @@
+#!/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  : 2016-04-08
+#
+#
+# 2023-06-14: removed declare_invtable_view from view definition on cmk 2.2 (see werk 15493)
+#             changed inventory_displayhints import (see werk 15493)
+# 2024-03-08: moved view back to ~/local/share/check_mk/web/plugins/views
+
+
+from cmk.gui.i18n import _
+from cmk.gui.views.inventory.registry import inventory_displayhints
+
+inventory_displayhints.update({
+    '.networking.wlan.controller.ap_cdp_cache:': {'title': _('Access Points CDP Cache'),
+                                                  'keyorder': ['ap_name', 'ap_address', 'neighbour_name',
+                                                               'neighbour_address', 'neighbour_interface',
+                                                               'neighbour_platform', ],
+                                                  'view': 'invwlcapcdpcache_of_host',
+                                                  },
+    '.networking.wlan.controller.ap_cdp_cache:*.ap_name': {'title': _('AP name'), },
+    '.networking.wlan.controller.ap_cdp_cache:*.ap_address': {'title': _('AP address'), },
+    '.networking.wlan.controller.ap_cdp_cache:*.neighbour_name': {'title': _('Neighbour name'), },
+    '.networking.wlan.controller.ap_cdp_cache:*.neighbour_address': {'title': _('Neighbour address'), },
+    '.networking.wlan.controller.ap_cdp_cache:*.neighbour_interface': {'title': _('Neighbour interface'), },
+    '.networking.wlan.controller.ap_cdp_cache:*.neighbour_platform': {'title': _('Neighbour platform'), },
+    '.networking.wlan.controller.ap_cdp_cache:*.duplex': {'title': _('Duplex'), },
+    '.networking.wlan.controller.ap_cdp_cache:*.speed': {'title': _('Speed'), },
+})
-- 
GitLab