CI / test (3.10) (pull_request) Successful in 42s
CI / test (3.11) (pull_request) Successful in 33s
CI / test (3.12) (pull_request) Successful in 37s
CI / test (3.10) (push) Successful in 53s
CI / test (3.11) (push) Successful in 46s
CI / test (3.12) (push) Successful in 43s
Mixes in napalm-device-types' ServicePackagesMixin; the transport is the node's exec path, as for the kernel facts. Read-only. Requires napalm-device-types 4.20.0; version 0.6.0.
104 lines
6.0 KiB
Markdown
104 lines
6.0 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.0.0/),
|
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
## [Unreleased]
|
|
|
|
### Added
|
|
- `get_service_packages()` (napalm-device-types' `ServicePackagesMixin`, NetOrk/netork#1236): which installed packages each systemd unit of the node is made of — the one shipping its unit file and the one shipping its `ExecStart` binary. Read-only, over the exec path. Requires napalm-device-types 4.20.0; version 0.6.0.
|
|
|
|
### Security
|
|
- The node's SSH session (the fallback for node commands and the provisioning steps) verifies its host key (NetOrk/netork#1167): the key the caller expects for port 22 in `optional_args["ssh_host_keys"]`, else the first one; every key seen goes to `optional_args["ssh_host_key_observer"]`. A changed key is refused before any login: a provisioning step fails, a best-effort read returns nothing. Both paths now share one session (`_node_ssh`). Replaces paramiko's `AutoAddPolicy`. Requires napalm-device-types 4.19.0; version 0.5.0.
|
|
|
|
### Changed
|
|
- **Breaking:** `get_device_warnings` is gone; the node reports facts and the caller
|
|
names the warnings (netOrk #1111). lldpd and the pending updates were already facts
|
|
(`get_packages`, `get_available_updates`). The subscription is now
|
|
`get_licenses()` (napalm-device-types 4.14 `LicenseMixin`): one `pve-subscription`
|
|
entry with the API's status as a `LicenseStatus` (`notfound` → `none`, `new` and
|
|
`suspended` → `unknown`), its message as `detail`, product name and due date when
|
|
subscribed. The old check compared against `NotFound` while the API answers
|
|
`notfound`, so it never fired. Requires napalm-device-types 4.14.0; version 0.4.0.
|
|
- **Breaking:** `run_device_action` (`fix_snmp`, `install_lldpd`) is gone. The driver
|
|
implements napalm-device-types 4.13's fix templates: `configure_snmp_agent(settings)`
|
|
with the caller's community and allowed sources (one `rocommunity` line each, ufw only
|
|
for those sources, no fixed temp file), `get_management_peer()`, and
|
|
`install_package(name)` as the contract says, so `ensure_package` comes from the base
|
|
package. Every step reads its exit status. Requires napalm-device-types 4.13.0;
|
|
version 0.3.0.
|
|
|
|
### Added
|
|
- `get_system_identity()` (napalm-device-types 4.9 `SystemIdentityMixin`): the node's SMBIOS
|
|
system UUID, product serial and board serial over the exec path, vendor placeholders
|
|
empty. netOrk matches a server to its BMC on these. Requires napalm-device-types 4.9.0;
|
|
version 0.2.0.
|
|
- FreeBSD and OpenBSD guests: `create_vm_from_cloud_init(guest_os=...)` with
|
|
`GUEST_AGENTS` from napalm-device-types 3.0. A BSD guest gets OS type
|
|
`other` and a network-config v2 snippet of its own (`cicustom network=`),
|
|
because FreeBSD's nuageinit skips runcmd on the v1 Proxmox generates.
|
|
OpenBSD's agent runs over ISA serial behind `serial0`, as the image keeps
|
|
its console on com0. An unknown `guest_os` is refused before anything is
|
|
created.
|
|
- Packed cloud images (FreeBSD's `.qcow2.xz`) are unpacked on the node after
|
|
the packed file's checksum is verified; only the unpacked file is cached.
|
|
Proxmox's `download-url` unpacks ISOs only, so they always go over SSH.
|
|
|
|
### Fixed
|
|
- `get_vm_status` no longer reports a loopback address as the VM's IP when
|
|
the agent lists loopback under another name than `lo` (`lo0` on the BSDs,
|
|
listed first by OpenBSD).
|
|
- `destroy_vm` reads the VM's cloud-init snippets before deleting the VM, and
|
|
removes all of them; it read them afterwards, when the config was gone (#15).
|
|
- Cloud images for `create_vm_from_cloud_init` are downloaded by Proxmox itself
|
|
when the node has an active storage with content type `import` (Proxmox
|
|
8.2+): `download-url` with checksum verification, then `import-from` as the
|
|
root disk. The image no longer passes through the node's root filesystem.
|
|
Files are named `netork-<url hash>-<name>.<qcow2|raw|vmdk>` and reused;
|
|
Ubuntu's `.img` is stored as `.qcow2`. Without such a storage, or for an
|
|
image type Proxmox cannot import, the SSH download into
|
|
`/var/lib/vz/template/netork-images` is used as before.
|
|
- `HypervisorDriver` contract methods `start_vm`, `stop_vm`, `reboot_vm`,
|
|
`suspend_vm` and `get_vm_config`. They accept a VM's name or vmid, raise
|
|
`ValueError`/`RuntimeError` instead of returning a result dict, and wait
|
|
for the Proxmox task to finish. `power_vm` is unchanged.
|
|
- Snapshot methods `get_vm_snapshots`, `create_vm_snapshot`,
|
|
`delete_vm_snapshot`, `rollback_vm_snapshot` for VMs and containers
|
|
(containers never save RAM state).
|
|
- `reboot_host()` restarts the node through the API instead of SSH.
|
|
|
|
### Changed
|
|
- `get_vms()` reports `vmid` as a string (`"100"`), following
|
|
napalm-device-types 2.0. Ordering stays numeric.
|
|
|
|
## [0.1.0] - 2024-01-01
|
|
|
|
### Added
|
|
- Initial release of the Proxmox VE NAPALM driver
|
|
- Support for classic Linux networking (`/etc/network/interfaces`, Linux bridges)
|
|
- Support for Proxmox SDN (zones: VLAN, QinQ, VXLAN, EVPN; VNets and subnets)
|
|
- Support for Open vSwitch (OVS) bridges, bonds, and internal ports
|
|
- Password and API token authentication via `proxmoxer`
|
|
- Implemented NAPALM methods:
|
|
- `open`, `close`, `is_alive`
|
|
- `get_facts`
|
|
- `get_interfaces`, `get_interfaces_ip`, `get_interfaces_counters`
|
|
- `get_environment` (CPU, memory, temperature sensors)
|
|
- `get_arp_table` (via `/proc/net/arp`)
|
|
- `get_mac_address_table` (Linux bridge fdb + OVS appctl)
|
|
- `get_vlans` (SDN VNet tags + `bridge vlan show`)
|
|
- `get_network_instances` (SDN zones as NAPALM network instances)
|
|
- `get_ntp_servers`, `get_ntp_stats`
|
|
- `get_snmp_information`
|
|
- `get_users`
|
|
- `get_config`, `load_merge_candidate`, `load_replace_candidate`
|
|
- `compare_config`, `commit_config`, `discard_config`, `rollback`
|
|
- `get_lldp_neighbors`, `get_lldp_neighbors_detail`
|
|
- `get_ipv6_neighbors_table`
|
|
- `ping`, `traceroute`, `cli`
|
|
- `get_route_to`
|
|
- 149 unit tests with ~79% code coverage
|
|
- Full type annotations
|