It first posts to /nodes/{node}/execute, which runs a batch of API calls, not a shell; the call fails and every command pays a wasted round trip before SSH (per the PVE API docs, not run live).
It returns out or err, so stderr reads as output, and on any exception logs at debug and returns "". No SSH credential, an auth error or a refused command all read as "nothing there". On API-token-only nodes lldpd_not_installed is raised on every poll because command -v lldpd returns "", and get_snmp_config returns None.
paramiko.RSAKey.from_private_key only: ed25519 and ECDSA keys fail (and are swallowed). With an API password set, ssh_pass = self._ssh_password or self.password is non-empty and the key is never used.
The connect code exists twice (driver.py ~320, vm_provision_mixin.py ~146-167); AutoAddPolicy accepts any host key.
Fix: one transport that raises on failure, any key type; it becomes napalm-unix's run_command (NAPALM/napalm-device-types#35).
Prio P3: wrong facts and false warnings on token-only nodes.
`_exec_ssh_command` (`driver.py` ~290-342):
- It first posts to `/nodes/{node}/execute`, which runs a batch of API calls, not a shell; the call fails and every command pays a wasted round trip before SSH (per the PVE API docs, not run live).
- It returns `out or err`, so stderr reads as output, and on any exception logs at debug and returns `""`. No SSH credential, an auth error or a refused command all read as "nothing there". On API-token-only nodes `lldpd_not_installed` is raised on every poll because `command -v lldpd` returns `""`, and `get_snmp_config` returns None.
- `paramiko.RSAKey.from_private_key` only: ed25519 and ECDSA keys fail (and are swallowed). With an API password set, `ssh_pass = self._ssh_password or self.password` is non-empty and the key is never used.
- The connect code exists twice (`driver.py` ~320, `vm_provision_mixin.py` ~146-167); `AutoAddPolicy` accepts any host key.
Fix: one transport that raises on failure, any key type; it becomes napalm-unix's `run_command` (NAPALM/napalm-device-types#35).
Prio P3: wrong facts and false warnings on token-only nodes.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
_exec_ssh_command(driver.py~290-342):/nodes/{node}/execute, which runs a batch of API calls, not a shell; the call fails and every command pays a wasted round trip before SSH (per the PVE API docs, not run live).out or err, so stderr reads as output, and on any exception logs at debug and returns"". No SSH credential, an auth error or a refused command all read as "nothing there". On API-token-only nodeslldpd_not_installedis raised on every poll becausecommand -v lldpdreturns"", andget_snmp_configreturns None.paramiko.RSAKey.from_private_keyonly: ed25519 and ECDSA keys fail (and are swallowed). With an API password set,ssh_pass = self._ssh_password or self.passwordis non-empty and the key is never used.driver.py~320,vm_provision_mixin.py~146-167);AutoAddPolicyaccepts any host key.Fix: one transport that raises on failure, any key type; it becomes napalm-unix's
run_command(NAPALM/napalm-device-types#35).Prio P3: wrong facts and false warnings on token-only nodes.