Files
docu/pve2/06_Ansible-Automatisierung.md
T
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

140 lines
4.0 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 ← 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:
```bash
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](../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](../shared/ssh/README.md)).
## 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/docu/pve2/ansible/inventory/group_vars/all.yml` (oder `/root/ansible/…` via Symlink)
```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
```