initial pfannkuchen

This commit is contained in:
sascha 2026-03-30 15:19:20 +02:00
parent b6dafc7a73
commit 4d305fa19f
99 changed files with 3575 additions and 321 deletions

148
pfannkuchen.sh Executable file
View file

@ -0,0 +1,148 @@
#!/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 <command> [host/gruppe]\n"
echo -e "${B}Commands:${N}"
echo -e " ${C}setup${N} <host> Neue VM einrichten (base + docker + borg + hawser + sysctl)"
echo -e " ${C}base${N} <host> Nur Basis + Docker"
echo -e " ${C}gpu${N} <host> NVIDIA Treiber + Docker GPU Runtime"
echo -e " ${C}backup${N} [host] Borg Backup einrichten (default: alle backup-Hosts)"
echo -e " ${C}hawser${N} <host> 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}tune${N} <host> Sysctl Netzwerk-Tuning"
echo -e " ${C}pvetune${N} [host] Proxmox Host Tuning (sysctl, resolv, hosts)"
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} <host> Reboot durchfuehren"
echo -e " ${C}shell${N} <host> <cmd> 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"
;;
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
;;
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