fix(agent): Cluster-Knoten mit QDevice richtig lesen (#042)

Der Agent nahm aus `pvecm nodes` blind die dritte Spalte als Knotennamen.
Mit einem QDevice steht dort dessen Zustand (A,V,NMW oder NR), und der Name
rutscht eine Spalte weiter - gemeldet wurden damit die Zustandskuerzel und
das QDevice als zusaetzlicher vierter Knoten.

Die Namensspalte wird jetzt aus der Kopfzeile bestimmt, die Zeile des QDevice
(Nodeid 0) uebersprungen. Beide Ausgabeformen sind als Testfall hinterlegt.

Agent-Version 0.2.2.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-10-03 18:11:38 +02:00
co-authored by Claude Opus 5
parent 02845ed717
commit 8e5bf74a30
8 changed files with 92 additions and 7 deletions
+19
View File
@@ -241,6 +241,25 @@ productname: Proxmox "VE" \\ Subscription mit Tab`,
expect(report.host.clusterMitglieder).toEqual(["hv-rz5-pve-01", "hv-rz5-pve-02", "hv-rz5-pve-03"]);
});
it("liest die Knoten auch mit QDevice-Spalte richtig", () => {
// Mit einem QDevice steht zwischen Votes und Name dessen Zustand. Vorher landeten
// „A,V,NMW“ und „NR“ als Knotennamen im Report (#042).
befehlErsetzen("pvesubscription", PVE_SUBSCRIPTION);
befehlErsetzen(
"pvecm",
`Membership information
----------------------
Nodeid Votes Qdevice Name
1 1 A,V,NMW hv-pve-01
2 1 A,V,NMW hv-pve-02 (local)
3 1 NR hv-pve-05
0 1 Qdevice (votes 1)`,
);
const report = reportErzeugen() as { host: { clusterMitglieder: string[] } };
expect(report.host.clusterMitglieder).toEqual(["hv-pve-01", "hv-pve-02", "hv-pve-05"]);
});
it("meldet eine leere Liste, wenn der Host in keinem Cluster ist", () => {
befehlErsetzen("pvesubscription", PVE_SUBSCRIPTION);