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

3.6 KiB
Raw Blame History

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)

# 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