Collection of CheckMK checks (see https://checkmk.com/). All checks and plugins are provided as is. Absolutely no warranty. Send any comments to thl-cmk[at]outlook[dot]com

Skip to content
Snippets Groups Projects
Commit 2e4542da authored by thl-cmk's avatar thl-cmk :flag_na:
Browse files

modified for cmk 2.4.x

parent eccc5a6c
No related branches found
No related tags found
No related merge requests found
[PACKAGE]: ../../raw/master/mkp/inv_win_if_ip-0.0.5-20250124.mkp "inv_win_if_ip-0.0.5-20250124.mkp"
[PACKAGE]: ../../raw/master/mkp/inv_win_if_ip-0.0.5-20250323.mkp "inv_win_if_ip-0.0.5-20250323.mkp"
# IP-Address inventory for Windows hosts
The plugin adds IP-address information to the inventory. The plugin supports IPv4 and IPv6, more than one IP-address per interface is supported.
......
File added
#!/usr/bin/env python3
# Copyright (C) 2019 Checkmk GmbH - License: GNU General Public License v2
# This file is part of Checkmk (https://checkmk.com). It is subject to the terms and
# conditions defined in the file COPYING, which is part of this source code package.
# Example output:
# <<<win_networkadapter:sep(58)>>>
# AdapterType: Ethernet 802.3
# DeviceID: 7
# MACAddress: 08:00:27:9C:F8:39
# Name: Intel(R) PRO/1000 MT-Desktopadapter
# NetworkAddresses:
# ServiceName: E1G60
# Speed: 1000000000
# Address: 192.168.178.26
# Subnet: 255.255.255.0
# DefaultGateway: 192.168.178.1
from collections.abc import Mapping, Sequence
from .agent_based_api.v1 import register, TableRow
from .agent_based_api.v1.type_defs import InventoryResult, StringTable
Section = Sequence[Mapping]
def parse_win_networkadapter( # pylint: disable=too-many-branches
string_table: StringTable,
) -> Section:
adapters: list[Mapping] = []
first_varname = None
array: dict = {}
addrtypes: dict = {}
for line in string_table:
# return 'lost' double-colons back
if len(line) < 2:
continue
stripped_line = [w.strip() for w in line]
varname = stripped_line[0]
value = ":".join(line[1:])
# empty? skip!
if not value:
continue
# Check whether we have a new instance
# if we meet varname again, then we assume that this
# is new instance
if first_varname and varname == first_varname:
adapters.append(array)
array = {}
addrtypes = {}
if not first_varname:
first_varname = varname
if varname == "Name":
array["name"] = value
elif varname == "AdapterType":
array["type"] = value
elif varname == "MACAddress":
array["macaddress"] = value
elif varname == "Speed":
array["speed"] = int(value)
elif varname == "Address":
for address in value.split(" "):
addrtype = "ipv6" if ":" in address else "ipv4"
addrtypes.setdefault(addrtype + "_address", []).append(address)
elif varname == "Subnet":
for address in value.split(" "):
addrtype = "ipv4" if "." in address else "ipv6"
addrtypes.setdefault(addrtype + "_subnet", []).append(address)
elif varname == "DefaultGateway":
array["gateway"] = value
# address string array in comma-separated string packing: ['a1','a2',...] -> 'a1,a2...'
for addrtype in addrtypes:
array[addrtype] = ", ".join(addrtypes[addrtype])
# Append last array
if array:
adapters.append(array)
return adapters
# register.agent_section(
# name="win_networkadapter",
# parse_function=parse_win_networkadapter,
# )
def inventory_win_networkadapter(section: Section) -> InventoryResult:
for adapter in sorted(section, key=lambda a: a.get("name", "")):
if "name" in adapter:
yield TableRow(
path=["hardware", "nwadapter"],
key_columns={
"name": adapter["name"],
},
inventory_columns={
"type": adapter.get("type"),
"macaddress": adapter.get("macaddress"),
"speed": adapter.get("speed"),
"gateway": adapter.get("gateway"),
"ipv4_address": adapter.get("ipv4_address"),
"ipv6_address": adapter.get("ipv6address"),
"ipv4_subnet": adapter.get("ipv4_subnet"),
"ipv6_subnet": adapter.get("ipv6subnet"),
},
status_columns={},
)
register.inventory_plugin(
name="win_networkadapter",
inventory_function=inventory_win_networkadapter,
)
## dummy file to shadow ~/lib/python3/cmk/base/plugins/agent_based/inventory_win_networkadapter.pyin CMK 2.3.0x
## this file ha ben moved to ~/lib/python3/cmk/plugins/collection/agent_based/inventory_win_networkadapter.pyin CMK 2.4.0x
......@@ -22,6 +22,7 @@
# 2014-12-12: fix crash in host label function if interface has no ip-address
# 2025-01-21: added drop broadcast IPs
# 2025-01-24: fixed crash on bad prefix-length (to long for the ip version i.e. 33 for ipv4)
# 2025-03-23: changed to work with CMK 2.4.0x
from collections.abc import Mapping, Sequence
from ipaddress import AddressValueError, IPv4Interface, IPv6Interface, NetmaskValueError, ip_interface
......@@ -37,7 +38,7 @@ from cmk.agent_based.v2 import (
InventoryResult,
TableRow,
)
from cmk.base.plugins.agent_based.inventory_win_networkadapter import parse_win_networkadapter
from cmk.plugins.collection.agent_based.inventory_win_networkadapter import parse_win_networkadapter
Section = Sequence[Mapping]
......
#!/usr/bin/env python3
# Copyright (C) 2019 Checkmk GmbH - License: GNU General Public License v2
# This file is part of Checkmk (https://checkmk.com). It is subject to the terms and
# conditions defined in the file COPYING, which is part of this source code package.
## this shadows ~/lib/python3/cmk/plugins/collection/agent_based/inventory_win_networkadapter.py in CMK 2.4.0x
## commented out agent_section_win_networkadapter = AgentSection to add host label function
# Example output:
# <<<win_networkadapter:sep(58)>>>
# AdapterType: Ethernet 802.3
# DeviceID: 7
# MACAddress: 08:00:27:9C:F8:39
# Name: Intel(R) PRO/1000 MT-Desktopadapter
# NetworkAddresses:
# ServiceName: E1G60
# Speed: 1000000000
# Address: 192.168.178.26
# Subnet: 255.255.255.0
# DefaultGateway: 192.168.178.1
from collections.abc import Mapping, Sequence
from cmk.agent_based.v2 import AgentSection, InventoryPlugin, InventoryResult, StringTable, TableRow
Section = Sequence[Mapping]
def parse_win_networkadapter(
string_table: StringTable,
) -> Section:
adapters: list[Mapping] = []
first_varname = None
array: dict = {}
addrtypes: dict = {}
for line in string_table:
# return 'lost' double-colons back
if len(line) < 2:
continue
stripped_line = [w.strip() for w in line]
varname = stripped_line[0]
value = ":".join(line[1:])
# empty? skip!
if not value:
continue
# Check whether we have a new instance
# if we meet varname again, then we assume that this
# is new instance
if first_varname and varname == first_varname:
adapters.append(array)
array = {}
addrtypes = {}
if not first_varname:
first_varname = varname
if varname == "Name":
array["name"] = value
elif varname == "AdapterType":
array["type"] = value
elif varname == "MACAddress":
array["macaddress"] = value
elif varname == "Speed":
array["speed"] = int(value)
elif varname == "Address":
for address in value.split(" "):
addrtype = "ipv6" if ":" in address else "ipv4"
addrtypes.setdefault(addrtype + "_address", []).append(address)
elif varname == "Subnet":
for address in value.split(" "):
addrtype = "ipv4" if "." in address else "ipv6"
addrtypes.setdefault(addrtype + "_subnet", []).append(address)
elif varname == "DefaultGateway":
array["gateway"] = value
# address string array in comma-separated string packing: ['a1','a2',...] -> 'a1,a2...'
for addrtype in addrtypes:
array[addrtype] = ", ".join(addrtypes[addrtype])
# Append last array
if array:
adapters.append(array)
return adapters
# agent_section_win_networkadapter = AgentSection(
# name="win_networkadapter",
# parse_function=parse_win_networkadapter,
# )
def inventory_win_networkadapter(section: Section) -> InventoryResult:
for adapter in sorted(section, key=lambda a: a.get("name", "")):
if "name" in adapter:
yield TableRow(
path=["hardware", "nwadapter"],
key_columns={
"name": adapter["name"],
},
inventory_columns={
"type": adapter.get("type"),
"macaddress": adapter.get("macaddress"),
"speed": adapter.get("speed"),
"gateway": adapter.get("gateway"),
"ipv4_address": adapter.get("ipv4_address"),
"ipv6_address": adapter.get("ipv6address"),
"ipv4_subnet": adapter.get("ipv4_subnet"),
"ipv6_subnet": adapter.get("ipv6subnet"),
},
status_columns={},
)
inventory_plugin_win_networkadapter = InventoryPlugin(
name="win_networkadapter",
inventory_function=inventory_win_networkadapter,
)
\ No newline at end of file
......@@ -14,10 +14,11 @@
'than one IPv4 address\n',
'download_url': 'https://thl-cmk.hopto.org',
'files': {'agent_based': ['inventory_win_networkadapter.py'],
'cmk_addons_plugins': ['inv_ip_address/agent_based/inv_win_ip_address.py']},
'cmk_addons_plugins': ['inventory/agent_based/inv_win_ip_address.py'],
'cmk_plugins': ['collection/agent_based/inventory_win_networkadapter.py']},
'name': 'inv_win_if_ip',
'title': 'Inventory for IP-addresses of Windows hosts',
'version': '0.0.5-20250124',
'version': '0.0.5-20250323',
'version.min_required': '2.3.0b1',
'version.packaged': 'cmk-mkp-tool 0.2.0',
'version.usable_until': '2.4.0b1'}
'version.usable_until': '2.5.0b1'}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment