From 8e75d919ef055a579c5fdf539d7cbac99aa32454 Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Tue, 30 Jul 2024 06:19:31 +0200 Subject: [PATCH] update project --- README.md | 2 +- mkp/vsphere_topo-0.0.6-20240729.mkp | Bin 0 -> 8259 bytes .../{packages.py => vsphere_topo.py} | 51 +++++++++++---- .../vsphere_topo/constants.py | 6 +- .../graphing/{packages.py => vsphere_topo.py} | 0 .../rulesets/{packages.py => vsphere_topo.py} | 59 +++++++++++++----- source/packages/vsphere_topo | 12 ++-- 7 files changed, 92 insertions(+), 38 deletions(-) create mode 100644 mkp/vsphere_topo-0.0.6-20240729.mkp rename source/cmk_addons_plugins/vsphere_topo/agent_based/{packages.py => vsphere_topo.py} (82%) rename source/cmk_addons_plugins/vsphere_topo/graphing/{packages.py => vsphere_topo.py} (100%) rename source/cmk_addons_plugins/vsphere_topo/rulesets/{packages.py => vsphere_topo.py} (76%) diff --git a/README.md b/README.md index 76338db..b5a342b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[PACKAGE]: ../../raw/master/mkp/vsphere_topo-0.0.5-20240717.mkp "vsphere_topo-0.0.5-20240717.mkp" +[PACKAGE]: ../../raw/master/mkp/vsphere_topo-0.0.6-20240729.mkp "vsphere_topo-0.0.6-20240729.mkp" # vSphere Topology Visualization This plugin uses the data from the _VMware ESX via vSphere_ special agent to create a topology of the vSphere environment.\ diff --git a/mkp/vsphere_topo-0.0.6-20240729.mkp b/mkp/vsphere_topo-0.0.6-20240729.mkp new file mode 100644 index 0000000000000000000000000000000000000000..04691eaa5f72279a5fdc38e49ce65eaecc02a435 GIT binary patch literal 8259 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 literal 0 HcmV?d00001 diff --git a/source/cmk_addons_plugins/vsphere_topo/agent_based/packages.py b/source/cmk_addons_plugins/vsphere_topo/agent_based/vsphere_topo.py similarity index 82% rename from source/cmk_addons_plugins/vsphere_topo/agent_based/packages.py rename to source/cmk_addons_plugins/vsphere_topo/agent_based/vsphere_topo.py index f03291e..791db5f 100644 --- a/source/cmk_addons_plugins/vsphere_topo/agent_based/packages.py +++ b/source/cmk_addons_plugins/vsphere_topo/agent_based/vsphere_topo.py @@ -18,10 +18,15 @@ # 2024-07-13: refactoring save topology/make default and add dummy's logic # 2024-07-16: moved add_host/add_service/add_connection to lib/utils/TopoObjects/TopoConnections # moved ruleset name constants to utils/ruleset_names.py +# 2024-07-25: fixed crash if VM has no data store +# 2024-07-29: added option to ignore powered off VMs +# added option to ignore VMs by name (regex) from collections.abc import Mapping, Sequence +from re import compile as re_compile from time import time_ns + from cmk.agent_based.v2 import ( CheckPlugin, CheckResult, @@ -43,6 +48,8 @@ from cmk_addons.plugins.vsphere_topo.constants import ( PARAM_DATA_STORE, PARAM_DATA_STORE_AS_SERVICE, PARAM_HOST_SYSTEMS, + PARAM_IGNORE_POWERED_OFF_VMS, + PARAM_IGNORE_VM_NAME_REGEX, PARAM_MAKE_DEFAULT, PARAM_VCENTER, PARAM_VM_NAMES, @@ -79,8 +86,14 @@ def check_vsphere_topo( section_esx_vsphere_datastores: Section | None, ) -> CheckResult: start_time = time_ns() - objects = TopoObjects() - connections = TopoConnections() + objects: TopoObjects = TopoObjects() + connections: TopoConnections = TopoConnections() + ignored_powered_off_vms: int = 0 + ignored_by_name_vms: int = 0 + if ignore_by_name_str := ')|('.join(params.get(PARAM_IGNORE_VM_NAME_REGEX, [])): + re_ignore_vms = re_compile(f'({ignore_by_name_str})') + else: + re_ignore_vms = None if section_esx_vsphere_clusters is not None: __clusters = { @@ -161,10 +174,16 @@ def check_vsphere_topo( } ] for vm in section_esx_vsphere_virtual_machines: - vm_name: str = adjust_name(vm['vm_name'], params.get(PARAM_VM_NAMES, {})) - host_system: str = adjust_name(vm['hostsystem'], params.get(PARAM_HOST_SYSTEMS, {})) - objects.add_host(host=vm_name) - connections.add_connection(vm_name, host_system) + if params.get(PARAM_IGNORE_POWERED_OFF_VMS) is not True or vm.get('powerstate') != 'poweredOff': + vm_name: str = adjust_name(vm['vm_name'], params.get(PARAM_VM_NAMES, {})) + if re_ignore_vms is None or re_ignore_vms.match(vm_name) is None: + host_system: str = adjust_name(vm['hostsystem'], params.get(PARAM_HOST_SYSTEMS, {})) + objects.add_host(host=vm_name) + connections.add_connection(vm_name, host_system) + else: + ignored_by_name_vms += 1 + else: + ignored_powered_off_vms += 1 service_prefix: str = '' ds_services = None @@ -217,13 +236,17 @@ def check_vsphere_topo( if vm_name in objects.topo_objects: data_stores = data_stores.split(',') for data_store in data_stores: - ds_name = data_store.strip().split(' ')[2] - if ds_services is not None: - service_name = f'{service_prefix}{ds_name}' - service_id = f'{service_name}@{vsphere_host}' - connections.add_connection(service_id, vm_name) + try: + ds_name = data_store.strip().split(' ')[2] + except IndexError: + continue else: - connections.add_connection(ds_name, vm_name) + if ds_services is not None: + service_name = f'{service_prefix}{ds_name}' + service_id = f'{service_name}@{vsphere_host}' + connections.add_connection(service_id, vm_name) + else: + connections.add_connection(ds_name, vm_name) connections.topo_connections.sort() data_set = { @@ -241,6 +264,10 @@ def check_vsphere_topo( yield Result(state=State.OK, summary=f'Objects: {len(objects.topo_objects)}') yield Result(state=State.OK, summary=f'Connections: {len(connections.topo_connections)}') + if params.get(PARAM_IGNORE_POWERED_OFF_VMS) is True: + yield Result(state=State.OK, summary=f'Ignored powered off VMs: {ignored_powered_off_vms}') + if re_ignore_vms is not None: + yield Result(state=State.OK, summary=f'Ignored VMs by name: {ignored_by_name_vms}') yield Result( state=State.OK, notice=f'Written to: {BASE_TOPO_PATH}/{raw_vsphere_host}/data_{TOPOLOGY_NAME.lower()}.json', diff --git a/source/cmk_addons_plugins/vsphere_topo/constants.py b/source/cmk_addons_plugins/vsphere_topo/constants.py index e58585f..2036aea 100644 --- a/source/cmk_addons_plugins/vsphere_topo/constants.py +++ b/source/cmk_addons_plugins/vsphere_topo/constants.py @@ -16,7 +16,8 @@ EMBLEM_DATA_STORE: Final[str] = 'icon_services_green' ICON_VCENTER: Final[str] = 'icon_topic_hosts' -PARAM_ADD_DUMMY_TOPOLOGIES: Final[str] = 'add_dummy_topologies' +# PARAM_ADD_DUMMY_TOPOLOGIES: Final[str] = 'add_dummy_topologies' +# PARAM_DONT_ADD_VC_AS_VM: Final[str] = 'dont_add_vc_as_vm' PARAM_CHANGE_CASE: Final[str] = 'change_case' PARAM_CLUSTER: Final[str] = 'cluster' PARAM_CUSTOM_EMBLEM: Final[str] = 'custom_emblem' @@ -24,8 +25,9 @@ PARAM_DATA_CENTER: Final[str] = 'data_center' PARAM_DATA_STORE: Final[str] = 'data_store' PARAM_DATA_STORE_AS_SERVICE: Final[str] = 'data_sore_as_service' PARAM_DEFAULT_EMBLEM: Final[str] = 'default_emblem' -PARAM_DONT_ADD_VC_AS_VM: Final[str] = 'dont_add_vc_as_vm' PARAM_HOST_SYSTEMS: Final[str] = 'host_systems' +PARAM_IGNORE_POWERED_OFF_VMS: Final[str] = 'ignore_powered_off_vms' +PARAM_IGNORE_VM_NAME_REGEX: Final[str] = 'ignore_vms_by_name' PARAM_KEEP_DOMAIN: Final[str] = 'keep_domain' PARAM_LOWER: Final[str] = 'lower' PARAM_MAKE_DEFAULT: Final[str] = 'make_default' diff --git a/source/cmk_addons_plugins/vsphere_topo/graphing/packages.py b/source/cmk_addons_plugins/vsphere_topo/graphing/vsphere_topo.py similarity index 100% rename from source/cmk_addons_plugins/vsphere_topo/graphing/packages.py rename to source/cmk_addons_plugins/vsphere_topo/graphing/vsphere_topo.py diff --git a/source/cmk_addons_plugins/vsphere_topo/rulesets/packages.py b/source/cmk_addons_plugins/vsphere_topo/rulesets/vsphere_topo.py similarity index 76% rename from source/cmk_addons_plugins/vsphere_topo/rulesets/packages.py rename to source/cmk_addons_plugins/vsphere_topo/rulesets/vsphere_topo.py index e541adb..4ce3367 100644 --- a/source/cmk_addons_plugins/vsphere_topo/rulesets/packages.py +++ b/source/cmk_addons_plugins/vsphere_topo/rulesets/vsphere_topo.py @@ -8,6 +8,8 @@ # Date : 2024-07-06 # File : vsphere_topo/rulesets/packages.py +# removed PARAM_ADD_DUMMY_TOPOLOGIES and PARAM_DONT_ADD_VC_AS_VM + from collections.abc import Mapping, Sequence from cmk.rulesets.v1 import Help, Label, Title @@ -21,15 +23,17 @@ from cmk.rulesets.v1.form_specs import ( SingleChoice, SingleChoiceElement, String, + List, ) from cmk.rulesets.v1.form_specs.validators import LengthInRange from cmk.rulesets.v1.rule_specs import CheckParameters, HostCondition, Topic from cmk_addons.plugins.vsphere_topo.constants import ( + # PARAM_ADD_DUMMY_TOPOLOGIES, + # PARAM_DONT_ADD_VC_AS_VM, EMBLEM_CLUSTER, EMBLEM_DATA_CENTER, EMBLEM_DATA_STORE, ICON_VCENTER, - PARAM_ADD_DUMMY_TOPOLOGIES, PARAM_CHANGE_CASE, PARAM_CLUSTER, PARAM_CUSTOM_EMBLEM, @@ -37,8 +41,9 @@ from cmk_addons.plugins.vsphere_topo.constants import ( PARAM_DATA_STORE, PARAM_DATA_STORE_AS_SERVICE, PARAM_DEFAULT_EMBLEM, - PARAM_DONT_ADD_VC_AS_VM, PARAM_HOST_SYSTEMS, + PARAM_IGNORE_POWERED_OFF_VMS, + PARAM_IGNORE_VM_NAME_REGEX, PARAM_KEEP_DOMAIN, PARAM_LOWER, PARAM_MAKE_DEFAULT, @@ -177,28 +182,48 @@ def _parameter_form() -> Dictionary: ), value=True )), - PARAM_DONT_ADD_VC_AS_VM: DictElement( - render_only=True, + PARAM_IGNORE_POWERED_OFF_VMS: DictElement( parameter_form=FixedValue( - title=Title('Don\'t add vCenter as VM'), - label=Label('The vCenter will not be added as VM'), + title=Title('Ignore powered off VMs'), + label=Label('enabled'), help_text=Help( - 'Use this option if the vCenter is also a VM within the managed datacenter.' - 'This will create a clearer topology, but you lose the info where the vCenter is running.' + 'Powered off VMs will not be added to the topology' ), - value=True + value=True, )), - PARAM_ADD_DUMMY_TOPOLOGIES: DictElement( - render_only=True, - parameter_form=FixedValue( - title=Title('Add dummy topologies'), - label=Label('Adds empty CDP, LLDP, L3v4 and STATIC topology'), + PARAM_IGNORE_VM_NAME_REGEX: DictElement( + parameter_form=List( + title=Title('Ignore VMs by name (regex)'), + element_template=String( + title=Title('add regex string') + ), help_text=Help( - 'Use this option if you are also using the NVDCT. This is a workaround, as the backend ' - 'only picks up layers that are present in the default topology folder.' + 'The regex strings will be applied after the upper/lower case and prefix ' + 'change to the VM names. If there more than one regex string the will be "OR" connected.' ), - value=True )), + # PARAM_DONT_ADD_VC_AS_VM: DictElement( + # render_only=True, + # parameter_form=FixedValue( + # title=Title('Don\'t add vCenter as VM'), + # label=Label('The vCenter will not be added as VM'), + # help_text=Help( + # 'Use this option if the vCenter is also a VM within the managed datacenter.' + # 'This will create a clearer topology, but you lose the info where the vCenter is running.' + # ), + # value=True + # )), + # PARAM_ADD_DUMMY_TOPOLOGIES: DictElement( + # render_only=True, + # parameter_form=FixedValue( + # title=Title('Add dummy topologies'), + # label=Label('Adds empty CDP, LLDP, L3v4 and STATIC topology'), + # help_text=Help( + # 'Use this option if you are also using the NVDCT. This is a workaround, as the backend ' + # 'only picks up layers that are present in the default topology folder.' + # ), + # value=True + # )), } ) diff --git a/source/packages/vsphere_topo b/source/packages/vsphere_topo index 2215409..8ec8c4e 100644 --- a/source/packages/vsphere_topo +++ b/source/packages/vsphere_topo @@ -6,14 +6,14 @@ 'Topolgy is created by: vCenter -> data center(s) ' '->Cluster(s) -> ESX host(s) -> VM(s)\n', 'download_url': 'https://thl-cmk.hopto.org/gitlab/checkmk/various/vsphere_topo', - 'files': {'cmk_addons_plugins': ['vsphere_topo/agent_based/packages.py', - 'vsphere_topo/rulesets/packages.py', - 'vsphere_topo/lib/utils.py', - 'vsphere_topo/graphing/packages.py', - 'vsphere_topo/constants.py']}, + 'files': {'cmk_addons_plugins': ['vsphere_topo/lib/utils.py', + 'vsphere_topo/constants.py', + 'vsphere_topo/agent_based/vsphere_topo.py', + 'vsphere_topo/graphing/vsphere_topo.py', + 'vsphere_topo/rulesets/vsphere_topo.py']}, 'name': 'vsphere_topo', 'title': 'vSphere Topologie', - 'version': '0.0.5-20240717', + 'version': '0.0.6-20240729', 'version.min_required': '2.3.0b1', 'version.packaged': 'cmk-mkp-tool 0.2.0', 'version.usable_until': '2.4.0b1'} -- GitLab