148 lines
4.1 KiB
Bash
Executable file
148 lines
4.1 KiB
Bash
Executable file
#!/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
|