62 lines
3.7 KiB
Markdown
62 lines
3.7 KiB
Markdown
# Auto Outline Doku Proxmox Inventory
|
||
|
||
Automatischer Abgleich zwischen Proxmox-Inventar und der Homelab-Dokumentation in Outline.
|
||
|
||
## Inhalt
|
||
|
||
- `scripts/proxmox-inventory.sh` – Text-Ausgabe des Proxmox-Inventars (VMID, Status, Ressourcen, Netzwerk inkl. Subnetzmaske/Gateway), zum manuellen Ausführen und Copy-Paste.
|
||
- `scripts/proxmox-inventory-json.sh` – Baut dieselben Daten als JSON und sendet sie per `curl` an einen n8n-Webhook. Unterstützt `--dry-run`, `--print-only` und `--vmids=101,102,...` zum gezielten Testen einzelner Container/VMs.
|
||
- `n8n-workflows/auto-outline-doku-proxmox-inventory.json` – Exportierter n8n-Workflow, der die vom Script gesendeten Daten mit Outline abgleicht: Fakten (RAM, CPU, Swap, Disk, IP, Gateway, Subnetz, MAC) patchen, neue VMIDs automatisch als Outline-Seite anlegen, und eine ntfy-Benachrichtigung mit Zusammenfassung senden.
|
||
|
||
## Setup
|
||
|
||
1. **Script konfigurieren:** In `scripts/proxmox-inventory-json.sh` die Variable `N8N_WEBHOOK_URL` auf die echte n8n-Webhook-URL setzen (aktuell ein Platzhalter, da diese pro Installation individuell ist). Wichtig: **Produktions-Pfad** (`/webhook/...`) verwenden, nicht `/webhook-test/...` – der Test-Pfad funktioniert nur, während der Workflow im n8n-Editor auf "Listen for test event" steht.
|
||
2. **n8n-Workflow importieren:** JSON-Datei in n8n importieren und **aktivieren/publishen** (der Webhook reagiert sonst nicht auf den Produktions-Pfad). Folgende Credentials werden benötigt (nicht im Export enthalten, aus Sicherheitsgründen):
|
||
- **Outline Bearer Auth** (Header Auth, `Authorization: Bearer <Outline-API-Token>`) – für alle `outline.vogt.de.com/api/...`-Requests
|
||
- **NTFY Bearer Auth** (Header Auth) – für die ntfy-Benachrichtigung am Ende
|
||
3. **Webhook-Pfad in n8n** mit der URL im Script abgleichen.
|
||
4. Erst mit `--vmids=<einzelne-VMID> --dry-run` testen, bevor der volle Sync scharf geschaltet wird.
|
||
|
||
## Automatischer Betrieb per Cron
|
||
|
||
Auf dem Proxmox-Host `crontab -e` und folgende Zeile eintragen, um das Script stündlich zwischen 07:00 und 20:00 Uhr laufen zu lassen:
|
||
|
||
```cron
|
||
0 7-20 * * * /root/proxmox-inventory-json.sh >> /var/log/proxmox-inventory-sync.log 2>&1
|
||
```
|
||
|
||
- `7-20` = jede volle Stunde von 7 bis 20 Uhr (14 Läufe/Tag)
|
||
- Ausgabe (inkl. Fehler) landet in `/var/log/proxmox-inventory-sync.log`
|
||
|
||
Optionale Logrotate-Regel, damit das Log nicht unbegrenzt wächst:
|
||
|
||
```bash
|
||
cat > /etc/logrotate.d/proxmox-inventory-sync << 'EOF'
|
||
/var/log/proxmox-inventory-sync.log {
|
||
weekly
|
||
rotate 4
|
||
compress
|
||
missingok
|
||
notifempty
|
||
}
|
||
EOF
|
||
```
|
||
|
||
**Vor dem Scharfschalten prüfen:**
|
||
- Läuft das Script lokal auf dem Host mit der echten (nicht der Platzhalter-)Webhook-URL?
|
||
- Ist der n8n-Workflow aktiviert (`active: true`)?
|
||
- Ein manueller Testlauf (`./proxmox-inventory-json.sh --dry-run`) zeigt das gebaute JSON ohne etwas zu senden – guter erster Check nach jeder Änderung.
|
||
|
||
## Funktionsweise (Kurzfassung)
|
||
|
||
- Script sammelt Proxmox-Daten (LXC + VM) → sendet JSON an n8n
|
||
- n8n sucht pro VMID die passende Outline-Seite (`documents.search`), lädt den aktuellen Inhalt separat nach (`documents.info`, um Suchindex-Verzögerungen zu vermeiden)
|
||
- Bei Abweichungen: gezielter Patch nur der betroffenen Felder (`documents.update`, editMode `patch`)
|
||
- Bei keinem Treffer: neue Seite wird automatisch aus den bekannten Fakten angelegt (`documents.create`), unbekannte Felder wie Zweck/Ports bleiben als Platzhalter
|
||
- Am Ende: Zusammenfassung aller Änderungen/Auffälligkeiten per ntfy
|
||
|
||
## Bewusst nicht automatisiert
|
||
|
||
- Kategorisierung, Zweck-Beschreibung, Ports/URLs in der zentralen Übersichtstabelle (nicht aus Proxmox ableitbar)
|
||
- Umbenennen/Archivieren bei VMID-Wiederverwendung (z. B. wenn eine VMID gelöscht und für einen neuen Container wiederverwendet wird) – das bleibt manuelle Review-Arbeit
|