"""OpenBSD: hw.* sysctls for the hardware, uname for release and kernel.""" from __future__ import annotations from napalm_device_types import FingerprintRule from napalm_bsd.base import BsdDriver class OpenBSDDriver(BsdDriver): """NAPALM driver for OpenBSD hosts, over SSH.""" TYPE_LABEL = "OpenBSD" VENDOR = "OpenBSD" DRIVER_NAME = "openbsd" # OpenBSD's SSH banner names no OS; its sysDescr does ("OpenBSD host 7.9 GENERIC.MP#449"). SNMP_FINGERPRINT = [FingerprintRule("openbsd", weight=5.0)] OS_VERSION_COMMAND = "uname -sr" # The kernel's build, e.g. GENERIC.MP#449; the release is in uname -r. KERNEL_COMMAND = "uname -v" # A sysctl node the machine lacks fails on its own and prints nothing. PLATFORM_COMMAND = ( "for k in vendor product serialno; do " 'printf "%s=%s\\n" "$k" "$(sysctl -n hw.$k 2>/dev/null)"; done' ) def _hardware(self) -> tuple[str, str, str]: hw = self._platform() return hw.get("vendor", ""), hw.get("product", ""), hw.get("serialno", "")