"""The hosts a driver sees, as facts (``HypervisorDriver.get_hypervisor_hosts``). Whether a host in maintenance mode or one managed by a vCenter is a problem is decided by the caller, never here. """ from __future__ import annotations from typing import Any from napalm_device_types.models import HypervisorHostDict _CONNECTED = "connected" # Addresses vSphere reports for "no managing vCenter"; data, not a bind. _UNMANAGED = {None, "", "0.0.0.0"} # nosec B104 def _host(host: dict[str, Any], standalone: bool) -> HypervisorHostDict: manager = host.get("summary.managementServerIp") return { "name": host.get("name", host.get("_moref", "")), # A disconnected host could not have answered the ESXi driver. "connected": None if standalone else host.get("runtime.connectionState", _CONNECTED) == _CONNECTED, "maintenance": bool(host.get("runtime.inMaintenanceMode")), "config_issues": [ i["fullFormattedMessage"] for i in host.get("configIssue") or [] if i.get("fullFormattedMessage") ], # Under a vCenter every host names that vCenter; only a host the ESXi # driver reached directly can be managed by someone else. "managed_by": manager if standalone and manager not in _UNMANAGED else None, } def hypervisor_hosts(hosts: list[dict[str, Any]], *, standalone: bool) -> list[HypervisorHostDict]: """``standalone`` is True for the ESXi driver, False for vCenter.""" return [_host(host, standalone) for host in hosts]