#!/bin/bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" cd "$SCRIPT_DIR" # Farben R='\033[0;31m' G='\033[0;32m' Y='\033[1;33m' C='\033[0;36m' B='\033[1m' N='\033[0m' usage() { echo -e "${B}🥞 Pfannkuchen – Ansible Wrapper${N}\n" echo -e "${B}Usage:${N} $0 [host/gruppe]\n" echo -e "${B}Commands:${N}" echo -e " ${C}setup${N} Neue VM einrichten (base + docker + borg + hawser + sysctl)" echo -e " ${C}base${N} Nur Basis + Docker" echo -e " ${C}gpu${N} NVIDIA Treiber + Docker GPU Runtime" echo -e " ${C}backup${N} [host] Borg Backup einrichten (default: alle backup-Hosts)" echo -e " ${C}hawser${N} Hawser installieren" echo -e " ${C}pve${N} [host] Proxmox Post-Install (Repos, Nag, HA)" echo -e " ${C}passthrough${N} [host] GPU PCI Passthrough vorbereiten" echo -e " ${C}telegraf${N} [host] Telegraf Monitoring deployen" echo -e " ${C}wstunnel${N} [host] wstunnel + WireGuard deployen" echo -e " ${C}sshfs${N} [host] SSHFS Mounts einrichten" echo -e " ${C}tune${N} Sysctl Netzwerk-Tuning" echo -e " ${C}pvetune${N} [host] Proxmox Host Tuning (sysctl, resolv, hosts)" echo -e " ${C}pveexporter${N} [host] PVE Exporter (Prometheus Metriken)" echo -e " ${C}update${N} [host] Dist-Upgrade (default: alle Hosts)" echo -e " ${C}list${N} Inventory anzeigen" echo -e " ${C}ping${N} [host] Erreichbarkeit testen" echo -e " ${C}reboot${N} Reboot durchfuehren" echo -e " ${C}shell${N} Ad-hoc Shell-Befehl ausfuehren" echo -e "" echo -e "${B}Beispiele:${N}" echo -e " $0 setup emby_sascha" echo -e " $0 backup proxmox" echo -e " $0 update" echo -e " $0 gpu tdarr" echo -e " $0 reboot nvidia" echo -e " $0 shell media 'uptime'" exit 1 } run() { local playbook="$1"; shift echo -e "${G}▶${N} ansible-playbook ${playbook} $*" ansible-playbook "$playbook" "$@" } [ $# -lt 1 ] && usage CMD="$1" HOST="${2:-}" case "$CMD" in setup) [ -z "$HOST" ] && echo -e "${R}Fehler: Host angeben${N}" && exit 1 run site.yml -l "$HOST" ;; base) [ -z "$HOST" ] && echo -e "${R}Fehler: Host angeben${N}" && exit 1 run base-debian.yml -l "$HOST" ;; gpu) [ -z "$HOST" ] && echo -e "${R}Fehler: Host angeben${N}" && exit 1 run nvidia-docker.yml -l "$HOST" ;; backup) if [ -n "$HOST" ]; then run borg-backup.yml -l "$HOST" else run borg-backup.yml fi ;; hawser) [ -z "$HOST" ] && echo -e "${R}Fehler: Host angeben${N}" && exit 1 run hawser.yml -l "$HOST" ;; sshfs) if [ -n "$HOST" ]; then run sshfs.yml -l "$HOST" else run sshfs.yml fi ;; tune) [ -z "$HOST" ] && echo -e "${R}Fehler: Host angeben${N}" && exit 1 run sysctl.yaml -l "$HOST" ;; pvetune) if [ -n "$HOST" ]; then run sysctl-proxmox.yaml -l "$HOST" else run sysctl-proxmox.yaml fi ;; pveexporter) if [ -n "$HOST" ]; then run pve-exporter.yml -l "$HOST" else run pve-exporter.yml fi ;; pve) if [ -n "$HOST" ]; then run pve-postinstall.yml -l "$HOST" else run pve-postinstall.yml fi ;; passthrough) if [ -n "$HOST" ]; then run pve-gpu-passthrough.yml -l "$HOST" else run pve-gpu-passthrough.yml fi ;; telegraf) if [ -n "$HOST" ]; then run telegraf.yml -l "$HOST" else run telegraf.yml fi ;; wstunnel) if [ -n "$HOST" ]; then run wstunnel.yml -l "$HOST" else run wstunnel.yml fi ;; update) if [ -n "$HOST" ]; then run update.yml -l "$HOST" else run update.yml fi ;; list) ansible-inventory --list --yaml 2>/dev/null || ansible-inventory --graph ;; ping) if [ -n "$HOST" ]; then ansible "$HOST" -m ping else ansible all -m ping fi ;; reboot) [ -z "$HOST" ] && echo -e "${R}Fehler: Host oder Gruppe angeben${N}" && exit 1 echo -e "${Y}⚠ Reboot von: $HOST${N}" ansible "$HOST" -m reboot -b -a "msg='Reboot via Pfannkuchen'" ;; shell) [ -z "$HOST" ] && echo -e "${R}Fehler: Host und Befehl angeben${N}" && exit 1 SHCMD="${*:3}" [ -z "$SHCMD" ] && echo -e "${R}Fehler: Befehl angeben${N}" && exit 1 echo -e "${G}▶${N} ansible $HOST -m shell -a '$SHCMD'" ansible "$HOST" -m shell -b -a "$SHCMD" ;; *) echo -e "${R}Unbekannter Befehl: $CMD${N}" usage ;; esac