From f66525d589445510ac69c5ea2d138279ff7dcb49 Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Fri, 12 Jul 2024 19:04:03 +0200 Subject: [PATCH] update project --- README.md | 2 +- mkp/vsphere_topo-0.0.4-20240712.mkp | Bin 0 -> 7262 bytes .../vsphere_topo/agent_based/packages.py | 147 +++++++++--------- .../vsphere_topo/lib/utils.py | 4 +- .../vsphere_topo/rulesets/packages.py | 7 +- source/packages/vsphere_topo | 2 +- 6 files changed, 80 insertions(+), 82 deletions(-) create mode 100644 mkp/vsphere_topo-0.0.4-20240712.mkp diff --git a/README.md b/README.md index 53f352c..6a57f29 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[PACKAGE]: ../../raw/master/mkp/vsphere_topo-0.0.3-20240711.mkp "vsphere_topo-0.0.3-20240711.mkp" +[PACKAGE]: ../../raw/master/mkp/vsphere_topo-0.0.4-20240712.mkp "vsphere_topo-0.0.4-20240712.mkp" # vSphere Topology Visualization This plugin uses the data from the _VMware ESX via vSphere_ spezial agent to create a topolofy of the vSphere environment. diff --git a/mkp/vsphere_topo-0.0.4-20240712.mkp b/mkp/vsphere_topo-0.0.4-20240712.mkp new file mode 100644 index 0000000000000000000000000000000000000000..8dbbc8f77a28d3d96f7fc565767ea841b18b7207 GIT binary patch literal 7262 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 R=#%n7yJ~PkhBShN^gmXi1x^3} 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/packages.py index 8c70ca9..63fc3de 100644 --- a/source/cmk_addons_plugins/vsphere_topo/agent_based/packages.py +++ b/source/cmk_addons_plugins/vsphere_topo/agent_based/packages.py @@ -14,6 +14,7 @@ # -> obsoletes 'Add dummy topologies' # added vCenter twice (once as vCenter once as vM) with different object IDs # -> obsoletes 'Don\'t add vCenter as VM' +# 2024-07-12: added support for Queried host is a host system from collections.abc import Mapping, Sequence from pathlib import Path @@ -124,86 +125,86 @@ def check_vsphere_topo( objects = {} connections = [] - raw_vsphere_host: str = host_name().strip() - add_host( - host=raw_vsphere_host, - obj_id_prefix='vc', - # icon='icon_topic_hosts', - icon=get_emblem(ICON_VCENTER, params.get(PARAM_VCENTER)), - ) - vsphere_host = f'vc{raw_vsphere_host}' - - __clusters = { - 'HA': { - 'datacenter': 'datacenter-21', - 'hostsystems': 'esxi01, esxi02', - 'vms': 'vmname01, vmname02, vmname03' + if section_esx_vsphere_clusters is not None: + __clusters = { + 'HA': { + 'datacenter': 'datacenter-21', + 'hostsystems': 'esxi01, esxi02', + 'vms': 'vmname01, vmname02, vmname03' + } } - } - if section_esx_vsphere_clusters is None: - yield Result( - state=State.UNKNOWN, - summary='Found no vSphere data centers/clusters. This service needs the "VMware ESX via vSphere" ' - 'option "Type of query" set to "Queried host is vCenter"' + raw_vsphere_host: str = host_name().strip() + add_host( + host=raw_vsphere_host, + obj_id_prefix='vc', + icon=get_emblem(ICON_VCENTER, params.get(PARAM_VCENTER)), ) - return - - for cluster in section_esx_vsphere_clusters: - data_center: str = section_esx_vsphere_clusters[cluster]['datacenter'].strip() - if objects.get(data_center) is None: + vsphere_host = f'vc{raw_vsphere_host}' + + for cluster in section_esx_vsphere_clusters: + data_center: str = section_esx_vsphere_clusters[cluster]['datacenter'].strip() + if objects.get(data_center) is None: + add_host( + host=data_center, + emblem=get_emblem(EMBLEM_DATA_CENTER, params.get(PARAM_DATA_CENTER)), + link2core=False, + ) + add_connection(data_center, vsphere_host) add_host( - host=data_center, - emblem=get_emblem(EMBLEM_DATA_CENTER, params.get(PARAM_DATA_CENTER)), - link2core=False, + host=cluster, + emblem=get_emblem(EMBLEM_CLUSTER, params.get(PARAM_CLUSTER)), + link2core=False ) - add_connection(data_center, vsphere_host) - add_host( - host=cluster, - emblem=get_emblem(EMBLEM_CLUSTER, params.get(PARAM_CLUSTER)), - link2core=False + add_connection(cluster, data_center) + + host_systems: Sequence[str] = section_esx_vsphere_clusters[cluster].get('hostsystems', '').split(',') + for host_system in host_systems: + esx_name: str = adjust_name(host_system, params.get(PARAM_HOST_SYSTEMS, {})) + add_host(host=esx_name) + add_connection(cluster, esx_name) + yield Result( + state=State.OK, + notice='VMware ESX via vSphere agent type of query: Queried host is the vCenter' + ) + else: # assuming the query type is ESXi host + raw_vsphere_host: str = host_name().strip() + add_host(host=raw_vsphere_host) + vsphere_host = raw_vsphere_host + yield Result( + state=State.OK, + notice='VMware ESX via vSphere agent type of query: Queried host is a host system' ) - add_connection(cluster, data_center) - - host_systems: Sequence[str] = section_esx_vsphere_clusters[cluster].get('hostsystems', '').split(',') - for host_system in host_systems: - esx_name: str = adjust_name(host_system, params.get(PARAM_HOST_SYSTEMS, {})) - add_host(host=esx_name) - add_connection(cluster, esx_name) - - __VMs = [ - { - 'vm_name': 'vmname01', - 'hostsystem': 'esxi01', - 'powerstate': 'poweredOff', - 'guest_os': 'Microsoft Windows Server 2008 R2 (64-bit)', - 'compatibility': 'vmx-10', - 'uuid': '420354bd-bee0-88d5-053c-d4f424106b0f' - }, - { - 'vm_name': 'vmname02', - 'hostsystem': 'esxi02', - 'powerstate': 'poweredOn', - 'guest_os': 'Microsoft Windows Server 2019 (64-bit)', - 'compatibility': 'vmx-19', - 'uuid': '422eba9f-0327-2da0-b546-f5a5e5dfdb68' - }, - { - 'vm_name': 'vmname03', - 'hostsystem': 'esxi01', - 'powerstate': 'poweredOn', - 'guest_os': 'Other 3.x or later Linux (64-bit)', - 'compatibility': 'vmx-11', - 'uuid': '422e3863-b7de-dc55-74f8-6dc9c159b36d' - } - ] if section_esx_vsphere_virtual_machines is not None: + __VMs = [ + { + 'vm_name': 'vmname01', + 'hostsystem': 'esxi01', + 'powerstate': 'poweredOff', + 'guest_os': 'Microsoft Windows Server 2008 R2 (64-bit)', + 'compatibility': 'vmx-10', + 'uuid': '420354bd-bee0-88d5-053c-d4f424106b0f' + }, + { + 'vm_name': 'vmname02', + 'hostsystem': 'esxi02', + 'powerstate': 'poweredOn', + 'guest_os': 'Microsoft Windows Server 2019 (64-bit)', + 'compatibility': 'vmx-19', + 'uuid': '422eba9f-0327-2da0-b546-f5a5e5dfdb68' + }, + { + 'vm_name': 'vmname03', + 'hostsystem': 'esxi01', + 'powerstate': 'poweredOn', + 'guest_os': 'Other 3.x or later Linux (64-bit)', + 'compatibility': 'vmx-11', + 'uuid': '422e3863-b7de-dc55-74f8-6dc9c159b36d' + } + ] for vm in section_esx_vsphere_virtual_machines: vm_name: str = adjust_name(vm['vm_name'], params.get(PARAM_VM_NAMES, {})) - - # if params.get(PARAM_DONT_ADD_VC_AS_VM) is True and vm_name.lower() == vsphere_host.lower(): - # continue host_system: str = adjust_name(vm['hostsystem'], params.get(PARAM_HOST_SYSTEMS, {})) add_host(host=vm_name) add_connection(vm_name, host_system) @@ -256,8 +257,6 @@ def check_vsphere_topo( if (vm_to_data_stores := ls_connection.query(query=query)) is not None: for vm, data_stores in vm_to_data_stores: vm_name: str = adjust_name(vm, params.get(PARAM_VM_NAMES, {})) - # if params.get(PARAM_DONT_ADD_VC_AS_VM) is True and vm_name.lower() == vsphere_host.lower(): - # continue if vm_name in objects: data_stores = data_stores.split(',') for data_store in data_stores: @@ -274,7 +273,6 @@ def check_vsphere_topo( 'version': 1, 'name': 'vSphere', 'objects': dict(sorted(objects.items())), - # 'objects': objects, 'connections': connections, } @@ -282,7 +280,7 @@ def check_vsphere_topo( # workaround for backend is only picking up topologies from default folder path: str = f'{OMD_ROOT}/var/check_mk/topology/data/default' - if Path(path).exists(): + if Path(path).exists() and not Path(f'{path}/data_vsphere.json').exists(): # don't overwrite existing topology dummy_topology = {'version': 1, 'name': 'vSphere', 'objects': {}, 'connections': []} save_data_to_file( data=dummy_topology, @@ -294,6 +292,7 @@ def check_vsphere_topo( for topology in get_topologies(): data_sets.append({'version': 1, 'name': topology, 'objects': {}, 'connections': []}) # end workaround + data_sets.append(data_set_vsphere) path: str = f'{OMD_ROOT}/var/check_mk/topology/data/{raw_vsphere_host}' diff --git a/source/cmk_addons_plugins/vsphere_topo/lib/utils.py b/source/cmk_addons_plugins/vsphere_topo/lib/utils.py index 2e8ca1d..c377dca 100644 --- a/source/cmk_addons_plugins/vsphere_topo/lib/utils.py +++ b/source/cmk_addons_plugins/vsphere_topo/lib/utils.py @@ -39,8 +39,8 @@ PARAM_NO_CHANGE: Final[str] = 'no_change' PARAM_NO_EMBLEM: Final[str] = 'no_emblem' PARAM_PREFIX: Final[str] = 'prefix' PARAM_UPPER: Final[str] = 'upper' -PARAM_VM_NAMES: Final[str] = 'vm_names' PARAM_VCENTER: Final[str] = 'vcenter_icon' +PARAM_VM_NAMES: Final[str] = 'vm_names' PICTURE_TYPE_EMBLEM: Final[str] = 'emblem' PICTURE_TYPE_ICON: Final[str] = 'icon' @@ -127,10 +127,10 @@ def get_topologies() -> Sequence[str | None]: json_loads(Path(file).read_text()).get('name') is not None ] + # # live status # - class LiveStatusConnection(object): def __init__(self): self.sites: SiteConfigurations = SiteConfigurations({}) diff --git a/source/cmk_addons_plugins/vsphere_topo/rulesets/packages.py b/source/cmk_addons_plugins/vsphere_topo/rulesets/packages.py index bcbb4e5..974e6e0 100644 --- a/source/cmk_addons_plugins/vsphere_topo/rulesets/packages.py +++ b/source/cmk_addons_plugins/vsphere_topo/rulesets/packages.py @@ -22,13 +22,13 @@ from cmk.rulesets.v1.form_specs import ( SingleChoiceElement, String, ) - 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.lib.utils import ( EMBLEM_CLUSTER, EMBLEM_DATA_CENTER, EMBLEM_DATA_STORE, + ICON_VCENTER, PARAM_ADD_DUMMY_TOPOLOGIES, PARAM_CHANGE_CASE, PARAM_CLUSTER, @@ -46,12 +46,11 @@ from cmk_addons.plugins.vsphere_topo.lib.utils import ( PARAM_NO_EMBLEM, PARAM_PREFIX, PARAM_UPPER, - PARAM_VM_NAMES, - RULE_SET_NAME_VSPHERE_TOPO, PARAM_VCENTER, - ICON_VCENTER, + PARAM_VM_NAMES, PICTURE_TYPE_EMBLEM, PICTURE_TYPE_ICON, + RULE_SET_NAME_VSPHERE_TOPO, ) adjust_names_elements: Mapping[str, DictElement] = { diff --git a/source/packages/vsphere_topo b/source/packages/vsphere_topo index d748247..b417aa7 100644 --- a/source/packages/vsphere_topo +++ b/source/packages/vsphere_topo @@ -12,7 +12,7 @@ 'vsphere_topo/graphing/packages.py']}, 'name': 'vsphere_topo', 'title': 'vSphere Topologie', - 'version': '0.0.3-20240711', + 'version': '0.0.4-20240712', 'version.min_required': '2.3.0b1', 'version.packaged': 'cmk-mkp-tool 0.2.0', 'version.usable_until': '2.4.0b1'} -- GitLab