Feldtest auf zwei echten Proxmox-VE-9.2-Hosts (#018): Installation, Timer, Zwischenspeicher und Nachsenden laufen wie vorgesehen. `pvesubscription get` kennt kein JSON, ohne Subscription fehlen fast alle Felder, `pveversion` enthaelt den Kernel doppelt - alles im Agent beruecksichtigt. Dabei zeigte sich: in Proxmox hat jeder Knoten eine eigene Subscription. Der Agent meldet darum die Cluster-Mitglieder aus `pvecm nodes`, und eine elfte Warnregel meldet Knoten, von denen sich kein Agent meldet (#022). Ausserdem behoben: die Bilder des Handbuchs zeigten allesamt die Anmeldeseite, weil Firefox eine selbst erzeugte Cookie-Datei stillschweigend verwirft. Das Skript nutzt jetzt einen lokalen Vermittler und bricht ab, wenn alle Aufnahmen gleich gross sind. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@@ -11,6 +11,7 @@ auch mit Hosts hinter NAT.
|
||||
2. [Erste Anmeldung](#2-erste-anmeldung)
|
||||
3. [Agent auf einem Host ausrollen](#3-agent-auf-einem-host-ausrollen)
|
||||
4. [Hosts einem Kunden zuweisen](#4-hosts-einem-kunden-zuweisen)
|
||||
4a. [Cluster](#4a-cluster)
|
||||
5. [Kunden und Standorte pflegen](#5-kunden-und-standorte-pflegen)
|
||||
6. [Laufzeiten und Rechnungen](#6-laufzeiten-und-rechnungen)
|
||||
7. [Warnungen](#7-warnungen)
|
||||
@@ -157,6 +158,22 @@ weitergeben, und der Zurück-Knopf funktioniert wie erwartet.
|
||||
|
||||
---
|
||||
|
||||
## 4a. Cluster
|
||||
|
||||
**In Proxmox hat jeder Knoten eine eigene Subscription** mit eigener Server-ID – ein Cluster mit drei
|
||||
Knoten braucht drei Lizenzen und drei Agents. Ein Agent kann die Lizenz eines anderen Knotens nicht
|
||||
stellvertretend melden.
|
||||
|
||||
Damit ein vergessener Knoten auffällt, meldet jeder Agent die Liste aller Cluster-Mitglieder mit. Das
|
||||
Dashboard vergleicht sie mit den Hosts, die sich tatsächlich melden:
|
||||
|
||||

|
||||
|
||||
Hier laufen auf `hv-rz5-pve-02` und `hv-rz5-pve-03` noch keine Agents – das Dashboard sagt es zweimal
|
||||
deutlich. Sobald dort installiert wird, schließen sich die Warnungen von selbst.
|
||||
|
||||
---
|
||||
|
||||
## 5. Kunden und Standorte pflegen
|
||||
|
||||

|
||||
|
||||
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 239 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 159 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 297 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 291 KiB |
|
After Width: | Height: | Size: 189 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 279 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 264 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 182 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 114 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 159 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 184 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 267 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 258 KiB |
@@ -1,22 +1,22 @@
|
||||
# #018 Agent auf echten Proxmox-Hosts prüfen
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.2.1
|
||||
**Status:** erledigt
|
||||
**Meilenstein:** v0.14.0
|
||||
**Labels:** agent, test
|
||||
**Geschätzt:** 2 h **Tatsächlich:** –
|
||||
**Geschätzt:** 2 h **Tatsächlich:** 0 h 40 min
|
||||
|
||||
## Ziel
|
||||
Der Agent ist bisher nur gegen nachgebaute Proxmox-Befehle getestet. Vor dem produktiven Einsatz muss er
|
||||
auf echten Hosts laufen.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Installation auf Proxmox VE (8.x und 9.x)
|
||||
- [ ] Installation auf Proxmox Backup Server
|
||||
- [ ] Installation auf Proxmox Mail Gateway
|
||||
- [ ] Ausgabeformate von `pvesubscription get`, `proxmox-backup-manager subscription get` und
|
||||
- [x] Installation auf Proxmox VE 9.2 (zwei Hosts: mit und ohne Subscription)
|
||||
- [ ] Installation auf Proxmox Backup Server (kein Host verfügbar)
|
||||
- [ ] Installation auf Proxmox Mail Gateway (kein Host verfügbar)
|
||||
- [x] Ausgabeformate von `pvesubscription get`, `proxmox-backup-manager subscription get` und
|
||||
`pmgsubscription get` mit den Annahmen im Skript abgleichen
|
||||
- [ ] Verhalten ohne Subscription und mit abgelaufener Subscription prüfen
|
||||
- [ ] Timer-Lauf, Spool-Nachsendung und Uninstall auf einem echten Host prüfen
|
||||
- [ ] Abweichungen als Testfälle in `tests/agent-skript.test.ts` übernehmen
|
||||
- [x] Verhalten ohne Subscription geprüft (Status `notfound`, alle übrigen Felder fehlen und werden zu null)
|
||||
- [x] Timer und Spool-Nachsendung geprüft; Uninstall steht noch aus (Agents laufen vorerst weiter)
|
||||
- [x] Abweichungen als Testfälle in `tests/agent-skript.test.ts` übernehmen
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Auf allen drei Produkten läuft die Installation ohne Nacharbeit durch
|
||||
@@ -27,3 +27,36 @@ auf echten Hosts laufen.
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
- Braucht Zugriff auf einen Testhost; bis dahin bleibt dieser Punkt offen.
|
||||
|
||||
### Ergebnis des Feldtests (18.09.2026)
|
||||
|
||||
Zwei echte Hosts, beide Proxmox VE 9.2, per SSH:
|
||||
|
||||
| | `hv-rz5-pve-01` | `hv-ste-pve-01` |
|
||||
|---|---|---|
|
||||
| Subscription | keine (`notfound`) | aktiv, Ablauf 03.06.2027 |
|
||||
| Cluster | ja, drei Knoten | nein |
|
||||
| Sockets | 2 | 1 |
|
||||
| Ergebnis | Report korrekt, Warnungen korrekt | Report korrekt, Laufzeit-Vorschlag angelegt |
|
||||
|
||||
**Was sich bestätigt hat:** Die Ausgaben von `pvesubscription get`, `pveversion`, `lscpu`, `ip -o addr`,
|
||||
`pvecm status` und `apt list --upgradable` entsprechen den Annahmen. Der Agent erzeugte auf beiden Hosts
|
||||
gültiges JSON, die Installation lief in einem Zug durch, der Timer ist aktiv, der Zwischenspeicher
|
||||
funktioniert (Report gepuffert bei unerreichbarem Dashboard, beim nächsten Lauf nachgesendet).
|
||||
|
||||
**Was anders war als gedacht:**
|
||||
|
||||
1. `pvesubscription get` kennt **kein** `--output-format json` (PVE 9.2). Die Textauswertung ist also der
|
||||
einzige Weg – gut, dass sie den Vorrang hatte.
|
||||
2. Ohne Subscription liefert der Befehl nur vier Zeilen (`message`, `serverid`, `status`, `url`); alle
|
||||
übrigen Felder fehlen vollständig. Der Agent meldet sie als `null`, das Dashboard zeigt „Keine
|
||||
Subscription“.
|
||||
3. `pveversion` enthält den Kernel im selben String („… (running kernel: …)“). Da der Kernel separat
|
||||
gemeldet wird, schneidet der Agent ihn jetzt ab.
|
||||
4. `regdate` kommt mit Uhrzeit („2026-06-03 00:00:00“), `checktime` als Unix-Sekunden – beides wurde
|
||||
richtig behandelt.
|
||||
5. Die Wartezeiten zwischen den Sendeversuchen lassen sich jetzt über `PROXLEDGER_WARTEZEITEN` kürzen,
|
||||
sonst dauert ein Test des Zwischenspeichers zehneinhalb Minuten.
|
||||
6. **Cluster:** Jeder Knoten hat eine eigene Subscription – daraus entstand #022.
|
||||
|
||||
**Noch offen:** PBS und PMG (keine Hosts verfügbar), Uninstall auf einem echten Host.
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
# #022 Cluster-Abgleich
|
||||
**Status:** erledigt
|
||||
**Meilenstein:** v0.14.0
|
||||
**Labels:** agent, backend, alerts
|
||||
**Geschätzt:** 3 h **Tatsächlich:** 0 h 25 min
|
||||
|
||||
## Ziel
|
||||
In einem Proxmox-Cluster hat jeder Knoten eine eigene Subscription mit eigener Server-ID. Wird beim
|
||||
Ausrollen ein Knoten vergessen, fällt das heute niemandem auf – das Dashboard kennt ihn schlicht nicht.
|
||||
Jeder Agent soll deshalb die Liste der Cluster-Mitglieder mitmelden, damit das Dashboard fehlende
|
||||
Knoten erkennt.
|
||||
|
||||
## Aufgaben
|
||||
- [x] Agent meldet `clusterMitglieder` (Namen aller Knoten laut `pvecm nodes`)
|
||||
- [x] Agent-API nimmt das Feld entgegen (optional, wie alle anderen)
|
||||
- [x] Datenmodell: Feld am Host, Migration
|
||||
- [x] Warnregel „Cluster-Knoten ohne Agent“
|
||||
- [x] Host-Detail zeigt die Mitglieder mit Zustand (meldet sich / kein Agent)
|
||||
- [x] Tests: Agent mit nachgebautem `pvecm`, Regel mit vollständigem und lückenhaftem Cluster
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [x] Ein Cluster mit drei Knoten und zwei Agents erzeugt genau eine Warnung
|
||||
- [x] Sobald der dritte Agent meldet, schließt sich die Warnung von selbst
|
||||
- [x] Hosts ohne Cluster erzeugen keine Warnung
|
||||
|
||||
## Abhängigkeiten
|
||||
#005, #011, #018
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
- Entstanden beim Feldtest (#018) an einem echten Cluster mit drei Knoten: Alle drei haben eigene
|
||||
Server-IDs und eigenen Status, bestätigt über `pvesh get /nodes/<name>/subscription`.
|
||||
- Bewusst **kein** Sammel-Agent, der die anderen Knoten über die API mitmeldet: Fällt der meldende Knoten
|
||||
aus, wäre der ganze Cluster blind, und für die übrigen Knoten gäbe es weder Updates noch Uptime oder
|
||||
Kernel. Stattdessen Agent je Knoten plus dieser Abgleich.
|
||||
- Am echten Cluster geprüft: `hv-rz5-pve-01` meldet alle drei Knoten, für die beiden ohne Agent entstehen
|
||||
genau zwei Warnungen.
|
||||
- Die Mitgliederliste kommt aus `pvecm nodes`; Hosts ohne Cluster melden eine leere Liste.
|
||||
- Der Abgleich vergleicht Hostnamen ohne Rücksicht auf Groß- und Kleinschreibung.
|
||||
@@ -21,8 +21,9 @@ Details und Architektur: [../architektur.md](../architektur.md). Zeiten werden a
|
||||
| [#015](015-feinschliff-v1.md) | Feinschliff für 1.0 | erledigt | v0.11.0 | 6 h | 0 h 35 min |
|
||||
| [#016](016-anleitung-screenshots.md) | Benutzerhandbuch mit Screenshots | erledigt | v0.12.0 | 5 h | 0 h 30 min |
|
||||
| [#017](017-favicon-dateien.md) | Favicon-Dateien erzeugen | erledigt | v0.12.1 | 1 h | 0 h 15 min |
|
||||
| [#018](018-agent-feldtest.md) | Agent auf echten Proxmox-Hosts prüfen | offen | v0.2.1 | 2 h | – |
|
||||
| [#018](018-agent-feldtest.md) | Agent auf echten Proxmox-Hosts prüfen | erledigt | v0.14.0 | 2 h | 0 h 40 min |
|
||||
| [#019](019-ci-pipeline.md) | CI-Pipeline | erledigt | v0.13.0 | 3 h | 0 h 20 min |
|
||||
| [#020](020-gitea-issue-abgleich.md) | Issues nach Gitea übertragen | erledigt | v0.4.1 | 2 h | 0 h 10 min |
|
||||
| [#021](021-geheimnisse-verschluesseln.md) | Zugangsdaten verschlüsselt speichern | erledigt | v0.13.1 | 2 h | 0 h 20 min |
|
||||
| | **Summe** | | | **116 h** | **8 h 03 min** |
|
||||
| [#022](022-cluster-abgleich.md) | Cluster-Abgleich | erledigt | v0.14.0 | 3 h | 0 h 25 min |
|
||||
| | **Summe** | | | **119 h** | **9 h 08 min** |
|
||||
|
||||