From 1dff7d77e92b041f5e9a70a75c876c2735b368b8 Mon Sep 17 00:00:00 2001
From: "Th.L" <thl-cmk@outlook.com>
Date: Sat, 10 Jul 2021 16:17:34 +0200
Subject: [PATCH] update project

---
 agent_based/inv_cisco_wlc_ap_cdp_cache.py |  76 +++++++++-------------
 inv_cisco_wlc_ap_cdp_cache.mkp            | Bin 3453 -> 3357 bytes
 2 files changed, 31 insertions(+), 45 deletions(-)

diff --git a/agent_based/inv_cisco_wlc_ap_cdp_cache.py b/agent_based/inv_cisco_wlc_ap_cdp_cache.py
index 5f58c84..dd2c095 100644
--- a/agent_based/inv_cisco_wlc_ap_cdp_cache.py
+++ b/agent_based/inv_cisco_wlc_ap_cdp_cache.py
@@ -1,5 +1,5 @@
 #!/usr/bin/python
-#!/usr/bin/env python3
+# !/usr/bin/env python3
 # -*- coding: utf-8 -*-
 #
 # License: GNU General Public License v2
@@ -37,17 +37,6 @@ from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
 )
 
 
-class Neighbour(NamedTuple):
-    ap_name: str
-    ap_address: str
-    neighbour_name: str
-    neighbour_address: str
-    neighbour_interface: str
-    neighbour_platform: str
-    duplex: str
-    speed: str
-
-
 def _render_ip_address(bytestring):
     bytestring_clean = bytestring.replace('"', '').replace('|4|', '').replace('.', ' ').strip().split(' ')
     try:
@@ -63,7 +52,6 @@ _cdp_duplex = {
     3: 'half duplex',
 }
 
-
 _cdp_speed = {
     0: 'N/A',
     1: 'none',
@@ -73,7 +61,6 @@ _cdp_speed = {
     5: 'auto',
 }
 
-
 _interface_displayhints = {
     'ethernet': 'eth',
     'fastethernet': 'Fa',
@@ -104,9 +91,10 @@ def _get_short_if_name(ifname: str) -> str:
     return ifname
 
 
-def parse_cisco_wlc_ap_cdp_cache(string_table: StringTable): # -> List[Neighbour]:
-    neighbours=[]
-    for deviceindex, apname, apaddresstype, apaddress, neighname, neighaddresstype, neighaddress, neighinterface, platform, duplex, speed in string_table:
+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)
 
@@ -128,16 +116,10 @@ def parse_cisco_wlc_ap_cdp_cache(string_table: StringTable): # -> List[Neighbour
 
 
 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)
+    removecolumns = params['removecolumns']
+    remove_domain = params['remove_domain']
+    domain_name = params['domain_name']
+    use_short_if_name = params['use_short_if_name']
 
     path = ['networking', 'wlan', 'controller', 'ap_cdp_cache']
 
@@ -170,29 +152,33 @@ 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',  # ISCO-LWAPP-CDP-MIB::clcCdpApCacheEntry
-            oids=[
-                '1',  # clcCdpApCacheDeviceIndex (1)
-                '2',  # clcCdpApCacheApName (2)
-                '3',  # clcCdpApCacheApAddressType (3)
-                '4',  # clcCdpApCacheApAddress (4)
-                '6',  # clcCdpApCacheNeighName (6)
-                '7',  # clcCdpApCacheNeighAddressType (7)
-                '8',  # clcCdpApCacheNeighAddress (8)
-                '9',  # clcCdpApCacheNeighInterface (9)
-                '12',  # clcCdpApCachePlatform (12)
-                '15',  # clcCdpApCacheDuplex (15)
-                '16',  # clcCdpApCacheInterfaceSpeed (16)
-            ]
-        ),
+    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=contains('.1.3.6.1.2.1.1.1.0', 'Cisco Controller'),  # sysDescr
 )
 
 register.inventory_plugin(
     name='inv_cisco_wlc_ap_cdp_cache',
     inventory_function=inventory_cisco_wlc_ap_cdp_cache,
-    inventory_default_parameters={},
+    inventory_default_parameters={
+        'removecolumns': [],
+        'remove_domain': False,
+        'domain_name': '',
+        'use_short_if_name': False,
+    },
     inventory_ruleset_name='inv_cisco_wlc_ap_cdp_cache',
 )
-
diff --git a/inv_cisco_wlc_ap_cdp_cache.mkp b/inv_cisco_wlc_ap_cdp_cache.mkp
index 6df513ff5db0e7cf10938e6140980f43e12c3733..716d934748dcd524b8bd41d071daba1edddb5b7a 100644
GIT binary patch
delta 3338
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
Unlx$Br0Ln{KQ^-0*Z_C{0E>B!cK`qY

delta 3435
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
L!ygpSDJcE}O|rA9

-- 
GitLab