FreeBSDDriver (`freebsd`) and OpenBSDDriver (`openbsd`) on a shared BsdDriver, for the BSD VMs netOrk provisions and BSD hosts added by hand (NetOrk/netork#798). - SSH over exec channels (napalm-device-types' run_on_transport): no PTY, stdout and stderr apart, real exit codes; run_command()/open_stream() are public. Root through `sudo -S` with the password on stdin, or `sudo -n` without one. - Facts: hostname, release and running kernel (freebsd-version / uname), hardware from SMBIOS (kenv) or hw.* sysctls, uptime from kern.boottime. - Interfaces and addresses (ifconfig -a: ether/lladdr, hex netmasks, scoped IPv6), routes (netstat -rn, OpenBSD's abbreviated networks written out, host/broadcast/loopback entries left out), ARP (FreeBSD's sentences, OpenBSD's table), users and groups, processes (lstart read as one five-word field), cron jobs (system crontab and the login user's). - Parsers are pure functions, tested on output recorded from FreeBSD 15.1 (hand-installed and cloud image) and OpenBSD 7.9 (NetOrk/netork#793), with internal addresses replaced by documentation ranges.
2.1 KiB
2.1 KiB
napalm-bsd
NAPALM drivers for FreeBSD (freebsd) and OpenBSD (openbsd) hosts,
over SSH, built on napalm-device-types'
OSDriver. Written for netOrk, which provisions and manages BSD VMs
(NetOrk/netork#792).
Design
- One shared
BsdDriver(napalm_bsd/base.py) holds the SSH layer and every reader whose tools agree between the BSDs.FreeBSDDriverandOpenBSDDrivername only the commands that differ (hostname, release, kernel, hardware,netstat -rnWvs-rn). - Every command runs on its own SSH exec channel (
run_on_transportfrom napalm-device-types): no PTY to parse a prompt from, stdout and stderr apart, a real exit status.run_command()/open_stream()are public (CommandChannelMixin). - Root comes from
sudo -Swith the sudo password on stdin (never on a command line), orsudo -nwithout one, as in napalm-linux. netOrk provisionssudoon BSD VMs for that reason;doascannot read a password from stdin. - Parsing is in
napalm_bsd/parse.py, pure functions tested on output recorded from real systems (tests/fixtures/, each directory'sCOMMANDS.txtlists what produced it).
Supported getters
| Getter | FreeBSD | OpenBSD | Source |
|---|---|---|---|
get_facts |
✓ | ✓ | kern.hostname/hostname, freebsd-version/uname, kenv smbios.*/hw.*, kern.boottime |
get_interfaces, get_interfaces_ip |
✓ | ✓ | ifconfig -a |
get_route_to |
✓ | ✓ | netstat -rnW / netstat -rn |
get_arp_table |
✓ | ✓ | arp -an |
get_lldp_neighbors |
{} |
{} |
no LLDP daemon in either base system |
get_users, get_processes, get_cron_jobs |
✓ | ✓ | /etc/passwd+/etc/group, ps … lstart, system crontab + crontab -l |
Packages, services, updates (#799) and SNMP (#800) follow.
Connection arguments
optional_args: port (22), key_file, sudo_password, allow_agent,
look_for_keys (both off by default).
Development
pip install "napalm-device-types @ git+https://git.netork.io/NAPALM/napalm-device-types.git"
pip install -e ".[dev]"
pytest