Files
docu/pve2/06_Ansible-Automatisierung.md
T
root 6f52d46267 Initiale Infrastruktur-Dokumentation pve1 und pve2.
Enthält Host-Doku, MQTT/HA, Git-Setup, Power-Monitoring und GPU-Idle (pve2).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-27 19:53:55 +02:00

130 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 06 — Ansible-Automatisierung
## Konzept
**Ansible legt keine Crons in den Containern an.**
Stattdessen:
1. Auf dem **Proxmox-Host** existiert ein **Cron-Job** (wöchentlich)
2. Der Cron startet ein **Shell-Script**
3. Das Script führt **`ansible-playbook`** aus
4. Ansible verbindet sich per **SSH** zu den CTs und führt Wartungs-Tasks aus
```
/etc/cron.weekly/pve-lxc-disk-maintenance
↓ (Symlink)
/root/ansible/run-disk-maintenance.sh
ansible-playbook playbooks/disk-maintenance.yml
↓ SSH
docker (101) · media (109) · AIDEV (110)
```
## Verzeichnisstruktur
```
/root/ansible/
├── ansible.cfg
├── run-disk-maintenance.sh → von cron.weekly aufgerufen
├── inventory/
│ ├── hosts.yml → Hosts + CT-spezifische Variablen
│ └── group_vars/all.yml → globale Schwellwerte
├── playbooks/
│ └── disk-maintenance.yml
└── roles/
└── disk_cleanup/
├── defaults/main.yml
├── tasks/main.yml
└── handlers/main.yml
```
## Verwaltete Hosts
| Ansible-Host | VMID | IP | Besonderheiten |
|--------------|------|-----|----------------|
| docker | 101 | 192.168.10.101 | Frigate-Pfade auf `/mnt/records` |
| media | 109 | 192.168.20.6 | Jellyfin-Cache-Pfad |
| aidev | 110 | 10.100.2.13 | Dev-Tooling optional |
SSH als `root` vom Proxmox-Host — Key-Auth war bereits eingerichtet.
## Was das Playbook macht
| Task | Beschreibung |
|------|--------------|
| Journal | `journalctl --vacuum-size=200M` |
| apt | `autoclean` / `autoremove` / `clean` |
| Docker-Logs | Dateien >50 MB auf 10 MB kürzen |
| Docker | Gestoppte Container (>7 T.), dangling Images, Build-Cache (>14 T.) |
| Docker-Volumes | Nur **dangling** Volumes |
| daemon.json | Log-Limits `10m` × `3` — nur wenn Datei noch nicht existiert |
| fstrim | `/` im Container (**wichtig für Thin-Pool**) |
| Frigate | Aufnahme-Ordner älter als 30 Tage löschen |
| Jellyfin | Cache-Dateien älter als 30 Tage löschen |
### Tags (optional)
```bash
# Alles (Standard)
ansible-playbook playbooks/disk-maintenance.yml
# Nur aggressive Image-Bereinigung zusätzlich
ansible-playbook playbooks/disk-maintenance.yml --tags aggressive
# Nur Frigate oder Jellyfin
ansible-playbook playbooks/disk-maintenance.yml --tags frigate
ansible-playbook playbooks/disk-maintenance.yml --tags jellyfin
```
## Cron
```bash
ls -la /etc/cron.weekly/pve-lxc-disk-maintenance
# → Symlink nach /root/ansible/run-disk-maintenance.sh
```
- **Intervall:** `cron.weekly` (typisch Sonntag morgens)
- **Log:** `/var/log/pve-lxc-disk-maintenance.log`
### Cron deaktivieren
```bash
rm /etc/cron.weekly/pve-lxc-disk-maintenance
```
### Cron auf täglich umstellen (Beispiel)
```bash
echo '0 3 * * * root /root/ansible/run-disk-maintenance.sh' > /etc/cron.d/pve-lxc-disk-maintenance
```
## Konfiguration anpassen
Globale Werte: `/root/ansible/inventory/group_vars/all.yml`
```yaml
journal_max_size: 200M
docker_prune_stopped_containers_older_than: 168h # 7 Tage
docker_prune_unused_images_older_than: 336h # 14 Tage (Tag: aggressive)
frigate_recordings_retain_days: 30
jellyfin_cache_max_age_days: 30
fstrim_enabled: true
```
Host-spezifisch in `inventory/hosts.yml` (z. B. Frigate-Pfade nur auf `docker`).
## Voraussetzungen
- **Ansible** auf dem Proxmox-Host installiert (`apt install ansible`)
- **SSH** vom Host zu den CTs als root
- CTs müssen laufen (für SSH)
## Manuell testen
```bash
/root/ansible/run-disk-maintenance.sh
# oder
cd /root/ansible && ansible-playbook playbooks/disk-maintenance.yml
```