Files
docu/pve2/06_Ansible-Automatisierung.md
root e98e3a2b84 Ansible ins Repo migrieren und zentrale SSH-Keys in shared/ssh.
Playbooks liegen unter pve1/ansible und pve2/ansible; authorized_keys
als Fragmente mit Deploy-Skript und Ziel-Matrix für Proxmox, VM 101 und CTs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-28 11:24:31 +02:00

4.0 KiB
Raw Permalink 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   ← Symlink nach /root/docu/pve2/ansible
        ↓
ansible-playbook playbooks/disk-maintenance.yml
        ↓ SSH
   docker (101) · media (109) · AIDEV (110)

Verzeichnisstruktur (Git)

Quelle im Repo docu, auf pve2 deployen:

cd /root/docu && git pull
ln -sfn /root/docu/pve2/ansible /root/ansible
/root/docu/pve2/ansible/          # (= /root/ansible nach Symlink)
├── README.md
├── 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

SSH-Keys für Ansible → ../shared/ssh/README.md

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 — Public Key root@pve2 muss in den CTs stehen (shared/ssh).

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/docu/pve2/ansible/inventory/group_vars/all.yml (oder /root/ansible/… via Symlink)

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