6f52d46267
Enthält Host-Doku, MQTT/HA, Git-Setup, Power-Monitoring und GPU-Idle (pve2). Co-authored-by: Cursor <cursoragent@cursor.com>
3.6 KiB
3.6 KiB
06 — Ansible-Automatisierung
Konzept
Ansible legt keine Crons in den Containern an.
Stattdessen:
- Auf dem Proxmox-Host existiert ein Cron-Job (wöchentlich)
- Der Cron startet ein Shell-Script
- Das Script führt
ansible-playbookaus - 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)
# 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
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
rm /etc/cron.weekly/pve-lxc-disk-maintenance
Cron auf täglich umstellen (Beispiel)
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
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
/root/ansible/run-disk-maintenance.sh
# oder
cd /root/ansible && ansible-playbook playbooks/disk-maintenance.yml