e98e3a2b84
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>
4.0 KiB
4.0 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 ← 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