ansible/pfannkuchen.sh
2026-03-30 15:19:20 +02:00

148 lines
4.1 KiB
Bash
Executable file
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.

#!/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