QEMU Gast Agent [exec] - Broken Pipe (Proxmox 8.0.4) Array Breaking Change

linushstge

Well-Known Member
Dec 5, 2019
77
10
48
Nach dem Upgrade von Proxmox 7.4 auf 8.0.4 funktionieren alle QEMU Guest Agent Exec API Calls nicht mehr, die im Command Argumente verwenden.

Beispiel Request:
Code:
POST https://X.X.X.X:8006/api2/json/nodes/node25/qemu/15223/agent/exec
{
    "command": "ls -lah"
}
(Die Übergabe als Array "command": ["ls -lah"] ohne Splittung der Argumente führt zu identischer Response)

Response:
Code:
596 - Broken pipe

Syslog vom Hypervisor:
Code:
2023-08-22T09:50:55.742503+02:00 node25 pvedaemon[2829165]: Wide character in subroutine entry at /usr/lib/x86_64-linux-gnu/perl5/5.36/AnyEvent/Handle.pm line 1007.
2023-08-22T09:51:00.744212+02:00 node25 pvedaemon[2829165]: problem with client ::ffff:X.X.X.X; Connection timed out

/usr/lib/x86_64-linux-gnu/perl5/5.36/AnyEvent/Handle.pm line 1007
Code:
   # we downgrade here to avoid hard-to-track-down bugs,
   # and diagnose the problem earlier and better.

   if ($self->{tls}) {
      utf8::downgrade $self->{_tls_wbuf} .= $_[0];
      &_dotls ($self)    if $self->{fh};
   } else {
      utf8::downgrade $self->{wbuf}      .= $_[0];   # Zeile 1007
      $self->_drain_wbuf if $self->{fh};
   }

Code:
pveversion

pve-manager/8.0.4/d258a813cfa6b390 (running kernel: 6.2.16-8-pve)

Das Upgrade von 7 auf 8 hat mit dem offiziellen Guide einwandfrei funktioniert.
Durch die API Änderung von PVE 8 müssen die Argumente als Array übermittelt werden.

Statt:
Code:
{
    "command": "ls -lah"
}

muss folgendes übergeben werden:
Code:
{
    "command": ["ls", "-lah"]
}

In den Breakings Changes der 8.0 Roadmap heißt es:

The API can handle array-type data differently, while staying backward compatible.
Quelle: https://pve.proxmox.com/wiki/Roadmap#8.0-known-issues

Handelt es sich hierbei um einen Bug oder müssen allen Exec Commands entsprechend angepasst werden?

Falls es sich hier um ein gewolltes Verhalten handelt, wäre mein Vorschlag, dass man den exec Endpunkt um den Parameter commands erweitert und command weiterhin als String interpretiert und intern entsprechend übersetzt. Dadurch würde man die Abwärtskompatibilität nicht verlieren und gleichzeitig den neuen Plural Array-Parameter (commands) als Mehrzahl erkennbar machen.

Quelle: https://pve.proxmox.com/pve-docs/api-viewer/index.html#/nodes/{node}/qemu/{vmid}/agent/exec

Proxmox 7:
1692699427239.png
command - string

Proxmox 8:
1692699467657.png
command - array

Vorschlag für PVE 8:
- command (Singular) weiterhin als String Implementierung (ggf. interne Übersetzung in die neue Array-Struktur)
- commands (Plural) als Array Implementierung [command als deprecated für PVE 9 kennzeichnen]
 
Last edited:
Hi, hast du gesehen, dass Argumente in PVE 8 als Array übergeben werden müssen?

Poste gerne mal dein Command, welches den Fehler erzeugt.
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!