0cab237b1d71260270641092a7f255e020b2646b
The REST API has no writable config endpoint for SNMP communities. When _action_fix_snmp() is called on a REST-connected driver, it now opens a temporary Netmiko SSH session (standard KEX, then legacy KEX fallback), runs the config-mode CLI commands, and restores the REST transport state on exit. SSH errors are surfaced verbatim instead of being silently swallowed. Also: - _save_config: guard against REST transport (was calling self._device directly → NoneType AttributeError when transport == "api") - _action_fix_snmp: extracted CLI logic into _action_fix_snmp_cli() so it is reused for both the SSH-fallback and native SSH/Telnet paths - api_client: add get_snmp_communities() + configure_snmp_community() for future use; improve GET error logging (warn vs debug on non-404) - _try_api: probe timeout capped at 15 s; SSL retry loop for self-signed certificates; improved log levels - _api_set_interface / _cli_set_interface: handle enabled/description fields that were previously ignored - probe(): broaden accepted status codes (301/302/303/403) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
napalm-hpe-aruba-procurve
NAPALM driver for HPE / Aruba ProCurve switches — from ancient 2520G-8-PoE to modern 2530/2540 series.
Transport auto-detection
The driver probes transports in order and uses the first one that succeeds:
| Priority | Transport | Notes |
|---|---|---|
| 1 | REST API (HTTPS → HTTP, v7 → v6) | Newer 2530/2540 with rest-interface enabled |
| 2 | SSH (standard) | hp_procurve netmiko driver |
| 3 | SSH (legacy KEX) | Forces older kex/cipher negotiation for 2520G-8-PoE etc. |
| 4 | Telnet | Oldest devices without SSH or with broken SSH |
Override the transport with optional_args={"transport": "ssh_legacy"} to skip
auto-detection.
Switch prerequisites
REST API (newer switches, e.g. 2530, 2540)
web-management ssl
rest-interface
rest-interface session-idle-timeout 120
SSH (all ProCurve)
crypto key generate ssh rsa
ip ssh
Telnet is enabled by default on most ProCurve switches.
Installation
pip install napalm napalm-hpe-aruba-procurve
Or from source:
git clone https://github.com/chrismanivong/napalm-hpe-aruba-procurve
pip install -e napalm-hpe-aruba-procurve/
Quick start
from napalm import get_network_driver
Driver = get_network_driver("procurve")
with Driver(
"10.0.0.1",
"manager",
"secret",
optional_args={
# "transport": "ssh", # force transport (api/ssh/ssh_legacy/telnet)
# "port": 22,
# "ssl_verify": False, # disable SSL cert check for API
# "api_version": "v7", # API version hint (v3/v6/v7)
# "secret": "enablepassword", # enable password for CLI
},
) as dev:
print(dev.get_facts())
print(dev.get_interfaces())
Supported NAPALM methods
| Method | API | SSH/Telnet |
|---|---|---|
open() |
✅ | ✅ |
close() |
✅ | ✅ |
is_alive() |
✅ | ✅ |
get_facts() |
✅ | ✅ |
get_interfaces() |
✅ | ✅ |
get_interfaces_ip() |
✅ | ✅ |
get_arp_table() |
✅ | ✅ |
get_mac_address_table() |
✅ | ✅ |
get_lldp_neighbors() |
✅ | ✅ |
get_lldp_neighbors_detail() |
✅ | ✅ |
get_config() |
✅ | ✅ |
get_ntp_servers() |
✅ | ✅ |
get_environment() |
❌ | ✅ |
get_users() |
❌ | ✅ |
get_snmp_information() |
❌ | ✅ |
ping() |
✅ | ✅ |
cli() |
✅ | ✅ |
load_merge_candidate() |
❌ | ✅ |
load_replace_candidate() |
❌ | ✅ |
compare_config() |
❌ | ✅ |
commit_config() |
❌ | ✅ |
discard_config() |
❌ | ✅ |
rollback() |
❌ | ✅ |
Tested devices
- HP ProCurve 2520G-8-PoE (J9565A) — SSH legacy / Telnet
- HP ProCurve 2920-48G — SSH
- Aruba 2530-8-PoE+ — SSH + REST API
License
Apache 2.0
Languages
Python
100%