ansible/pfannkuchen.sh
sascha 73281a3ac6 ansible: add xray_client role + playbook + [xray] inventory group
- New role: xray_client (deploys Xray VLESS+Reality client container)
- New playbook: xray-client.yml
- New inventory group: [xray] (emby-sascha, emby-chris)
- pfannkuchen.sh: new command 'xray'
- Prepared for migration from FRP to Xray tunnel
2026-04-10 22:13:58 +02:00

192 lines
5.2 KiB
Bash
Executable file
Raw Permalink 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 (default: alle Docker-VMs)"
echo -e " ${C}patchmon${N} [host] PatchMon Agent deployen (Docker-VMs + Proxmox)"
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} <host> Sysctl Netzwerk-Tuning"
echo -e " ${C}pvetune${N} [host] Proxmox Host Tuning (sysctl, resolv, hosts)"
echo -e " ${C}tc${N} [host] tc per-flow Rate-Limit (50 Mbit/s pro Connection)"
echo -e " ${C}watchdog${N} Network Watchdog deployen (Whitelist aus Ansible)"
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} <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 hawser"
echo -e " $0 hawser pfannkuchen"
echo -e " $0 patchmon"
echo -e " $0 patchmon dockhand"
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)
if [ -n "$HOST" ]; then
run hawser.yml -l "$HOST"
else
run hawser.yml
fi
;;
patchmon)
if [ -n "$HOST" ]; then
run patchmon-agent.yml -l "$HOST"
else
run patchmon-agent.yml
fi
;;
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
;;
tc)
if [ -n "$HOST" ]; then
run tc-ratelimit.yml -l "$HOST"
else
run tc-ratelimit.yml
fi
;;
xray) PLAYBOOK="xray-client.yml" ;;
watchdog)
run net-watchdog.yml
;;
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