diff --git a/README.md b/README.md index 9c1a93f3466bc7ef660d3f1ee1c4aaacca554e18..424b923622e7a903c0b4e2704d606e956ce69b5a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[PACKAGE]: ../../raw/master/mkp/bgp_peer-2.2.7-20241220.mkp "bgp_peer-2.2.7-20241220.mkp" +[PACKAGE]: ../../raw/master/mkp/bgp_peer-2.2.8-20250117.mkp "bgp_peer-2.2.8-20250117.mkp" # BGP Peer Check plugin to monitor the status of BGP peers and inventory plugin for static BGP peer data. diff --git a/mkp/bgp_peer-2.2.8-20250117.mkp b/mkp/bgp_peer-2.2.8-20250117.mkp new file mode 100644 index 0000000000000000000000000000000000000000..c6d3e575b231a56c9472b9ab0e521802813ab8c6 Binary files /dev/null and b/mkp/bgp_peer-2.2.8-20250117.mkp differ diff --git a/source/agent_based/inv_bgp_peer.py b/source/agent_based/inv_bgp_peer.py index 9ed2db7da05fdaf040c99f03bebe5f6aaaae2102..869b3375b22d292caa3bd1e0cb1d7ab0280c3088 100644 --- a/source/agent_based/inv_bgp_peer.py +++ b/source/agent_based/inv_bgp_peer.py @@ -11,28 +11,30 @@ # # 2022-04-30: code cleanup/streamlining # 2023-01-17: always remove fsm_established_time -# +# 2025-01-17: fixed non working whois retrieval (param check was incorrect, no default rir is also not True) +# fixed crash on missing remote_as +# fixed missing "/" in whois query (ThX to nick[at]fisk[dot]me[dot]uk) import time from typing import List from cmk.base.plugins.agent_based.agent_based_api.v1 import ( - register, + OIDBytes, SNMPTree, TableRow, exists, - OIDBytes + register, ) from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( - StringByteTable, InventoryResult, + StringByteTable, ) from cmk.base.plugins.agent_based.utils.bgp_peer import ( - bgp_error_code_as_hex, - bgp_error_as_string, + BgpWhois, InvBgpPeer, + bgp_error_as_string, + bgp_error_code_as_hex, get_bgp_type, - BgpWhois, ) @@ -76,10 +78,10 @@ def parse_inv_bgp_peer(string_table: List[StringByteTable]): def inventory_bgp_peers(params, section) -> InventoryResult: path = ['networking', 'bgp_peers'] - whois = None - if params.get('whois_enable'): + + if (whois := params.get('whois_enable')) is not None: whois = BgpWhois( - default_rir=params['whois_enable'].get('whois_rir', 'https://rdap.db.ripe.net'), + default_rir=params['whois_enable'].get('whois_rir', 'https://rdap.db.ripe.net/'), timeout=params['whois_enable'].get('whois_timeout', 5) ) @@ -92,7 +94,7 @@ def inventory_bgp_peers(params, section) -> InventoryResult: status_columns = bgp_peer['status_columns'] bgp_peer.pop('status_columns') - if whois: + if whois and bgp_peer.get('remote_as', '').isdigit(): as_info = whois.get_whois_data_by_asn(int(bgp_peer.get('remote_as'))) bgp_peer.update(as_info) diff --git a/source/agent_based/utils/bgp_peer.py b/source/agent_based/utils/bgp_peer.py index f8018022d7bbdd335fcd290b858834810287249b..0f1fa7a4aee3422e96e172ae22c36b0ba9382500 100644 --- a/source/agent_based/utils/bgp_peer.py +++ b/source/agent_based/utils/bgp_peer.py @@ -18,6 +18,7 @@ # 2022-05-12: merged bgp_get_ip_address_from_oid with bgp_render_ip_address # changed IPv6 address format to lower case as required by rfc5952 section-4.3 (this affects IPv6 items) # 2023-01-20: add description to BgpPeerItem (for Arista) +# 2025-01-25: fixed missing "/" in rir URL (ThX to nick[at]fisk[dot]me[dot]uk) # # https://ftp.ripe.net/ripe/asnames/asn.txt AS Name List @@ -492,11 +493,11 @@ class BgpWhois: 'version': '1.0' } __rirs = { - 'ripe': 'https://rdap.db.ripe.net', - 'arin': 'https://rdap.arin.net/registry', - 'afrinic': 'https://rdap.afrinic.net/rdap', - 'lacnic': 'https://rdap.lacnic.net/rdap', - 'apnic': 'https://rdap.apnic.net', + 'ripe': 'https://rdap.db.ripe.net/', + 'arin': 'https://rdap.arin.net/registry/', + 'afrinic': 'https://rdap.afrinic.net/rdap/', + 'lacnic': 'https://rdap.lacnic.net/rdap/', + 'apnic': 'https://rdap.apnic.net/', } def __find_rir_by_asn(self, asn: int) -> str: @@ -512,7 +513,7 @@ class BgpWhois: def __init__(self, default_rir: str, timeout: int): self.__timeout = timeout - self.__rir = self.__rirs.get(default_rir, 'https://rdap.db.ripe.net') + self.__rir = self.__rirs.get(default_rir, 'https://rdap.db.ripe.net/') self.__known_asns = {} def get_whois_data_by_asn(self, asn: int) -> Dict[str, str]: @@ -521,7 +522,9 @@ class BgpWhois: if asn < 64512 or (65536 < asn < 4200000000): rir = self.__find_rir_by_asn(asn) query = 'autnum' - data = _fetch_data(f'{rir}{query}/{asn}', self.__timeout) + url = f'{rir}{query}/{asn}' + data = _fetch_data(url, self.__timeout) + if data: asn_info['as_name'] = data.get('name') vcard_array = data.get('entities')[0].get('vcardArray') diff --git a/source/packages/bgp_peer b/source/packages/bgp_peer index 9a52f1b874136d0b448f8b73dec41c442b2fd45f..0bc57580780d775fbcbabcaa0150927d0a8405cc 100644 --- a/source/packages/bgp_peer +++ b/source/packages/bgp_peer @@ -37,7 +37,7 @@ 'web': ['plugins/views/inv_bgp_peer.py']}, 'name': 'bgp_peer', 'title': 'BGP Peer', - 'version': '2.2.7-20241220', + 'version': '2.2.8-20250117', 'version.min_required': '2.3.0b1', 'version.packaged': 'cmk-mkp-tool 0.2.0', 'version.usable_until': '2.4.0b1'}