driver / standard (pull_request) Successful in 13s
driver / lint (pull_request) Successful in 11s
driver / types (pull_request) Successful in 43s
driver / test (3.10) (pull_request) Successful in 45s
driver / test (3.11) (pull_request) Successful in 45s
driver / test (3.12) (pull_request) Successful in 42s
driver / test (3.13) (pull_request) Successful in 39s
driver / lowest (pull_request) Successful in 21s
driver / security (pull_request) Successful in 54s
driver / build (pull_request) Successful in 27s
CI / driver (pull_request) Successful in 5m40s
driver / publish (pull_request) Skipped
90 lines
4.5 KiB
Markdown
90 lines
4.5 KiB
Markdown
# Changelog
|
||
|
||
All notable changes to this project will be documented in this file.
|
||
|
||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||
|
||
## [Unreleased]
|
||
|
||
## [0.5.0] - 2026-10-23
|
||
|
||
The first release on PyPI.
|
||
|
||
### Changed
|
||
- The drivers follow the NAPALM driver standard
|
||
(https://git.netork.io/NAPALM/driver-standard): CI on Gitea runs ruff, mypy, the
|
||
tests on Python 3.10–3.13 and at the lowest declared versions, bandit, pip-audit and
|
||
a build check, and a release tag publishes to PyPI. The package now ships `py.typed`.
|
||
Python 3.10 stays the floor. napalm-device-types now comes from PyPI, 4.21.1 or later.
|
||
|
||
### Security
|
||
- The SSH host key is verified (NetOrk/netork#1167). `open()` takes the key to expect from `optional_args["ssh_host_key"]` and refuses any other one before it logs in (`SshHostKeyMismatch`); without one it accepts the first key. Every key it sees goes to `optional_args["ssh_host_key_observer"]`. Replaces paramiko's `AutoAddPolicy`. Requires napalm-device-types 4.19.0; version 0.4.0.
|
||
|
||
## [0.3.0] - 2026-10-17
|
||
|
||
### Changed
|
||
- **Breaking:** `run_device_action("fix_snmp")` is gone. The drivers implement
|
||
napalm-device-types 4.13's `configure_snmp_agent(settings)` template instead, and
|
||
the caller supplies every value: one `rocommunity` line per allowed source, contact
|
||
and location as given. No community, contact or location of an application is built
|
||
in any more. pf and ipfw rules are left to the operator. Requires
|
||
napalm-device-types 4.13.0 or later.
|
||
- `get_snmp_config` no longer assumes the community `public` when the file names none.
|
||
|
||
### Added
|
||
- `get_management_peer()`: the address the host sees the SSH connection come from.
|
||
- `ensure_package(name)` from the base package.
|
||
|
||
## [0.2.1] - 2026-10-16
|
||
|
||
### Fixed
|
||
- A sudo password no longer ends up in `snmpd.conf`. `run_command` sent the
|
||
password and the data on the same stdin, and a sudo that does not prompt
|
||
(NOPASSWD, a cached timestamp) left the password for `cat`, which wrote it
|
||
as the first line of a file then made world-readable (#8). `run_command` now
|
||
refuses stdin to a privileged command while a sudo password is set, and
|
||
`fix_snmp` stages the configuration without privilege before root installs
|
||
it, without following a symlink at the target.
|
||
|
||
## [0.2.0] - 2026-10-13
|
||
|
||
### Changed
|
||
- `get_users` is now `get_os_users`, as napalm-device-types 4.7 names it on
|
||
`OSDriver`; the return shape is unchanged. NAPALM's own `get_users` has
|
||
another shape and a stub on every driver, so a poll asking `hasattr` could
|
||
not tell the two apart. Requires napalm-device-types 4.7.1 or later.
|
||
|
||
## [0.1.0]
|
||
|
||
### Added
|
||
- `FreeBSDDriver` (`freebsd`) and `OpenBSDDriver` (`openbsd`) on a shared
|
||
`BsdDriver`: SSH over exec channels (no PTY, real exit codes), root through
|
||
`sudo -S` with the password on stdin.
|
||
- Read side (NetOrk/netork#798): facts (SMBIOS through `kenv` on FreeBSD,
|
||
`hw.*` sysctls on OpenBSD; uptime from `kern.boottime`), interfaces and
|
||
their addresses (`ifconfig -a`), routes (`netstat -rn`), ARP (`arp -an`),
|
||
users and groups, processes (`ps … lstart`), cron jobs (system crontab and
|
||
the login user's).
|
||
- `get_listening_sockets()` in the shape of `ListeningSocketsMixin`: FreeBSD
|
||
through `sockstat`, OpenBSD through `fstat` as root and `netstat -an`
|
||
without, which the reading reports as `attributed: False`.
|
||
- Packages: `get_packages`, `install_package`, `uninstall_package`. FreeBSD's
|
||
install bootstraps pkg on a classic system that never had it.
|
||
- Updates: `get_available_updates`, with VuXML's verdict as `security` on
|
||
FreeBSD and base-system patches as one `base-system` entry (OpenBSD
|
||
`syspatch`, classic FreeBSD `freebsd-update`). A reader that cannot read
|
||
raises instead of returning no updates (#4).
|
||
- Services: `get_services` and `manage_service` (start, stop, restart,
|
||
enable, disable) through `service` and `rcctl`.
|
||
- SNMP: `run_device_action("fix_snmp")` installs net-snmp, writes the same
|
||
configuration netOrk uses on Linux, starts the agent and asks it for
|
||
sysDescr; `get_snmp_config` reports a running agent's community and port.
|
||
- `get_host_status` (napalm-device-types' `HostStatusMixin`): on FreeBSD,
|
||
"reboot required" when the installed kernel differs from the running one.
|
||
- `first_boot_pending()`: whether a FreeBSD host is still in its first boot
|
||
(`/firstboot`), so netOrk can wait before setting up a new VM
|
||
(NetOrk/netork#795).
|
||
- Parsers tested on output recorded from FreeBSD 15.1 (hand-installed and
|
||
cloud image) and OpenBSD 7.9 (NetOrk/netork#793).
|