Files
schul-laptops/update-ips.sh
Herb bd4384c36f Bestand aus ~/ansible-schule uebernehmen (Push-Setup, Stand Feb 2026)
Playbooks, Inventory, update-ips.sh, first-boot-setup.sh und Doku
unveraendert aus dem alten git-losen Ordner uebernommen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 13:11:24 +02:00

83 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
#
# Aktualisiert die IP-Adressen in inventory.yml via mDNS (hostname.local)
#
# Ausfuehren aus ~/ansible-schule:
# ./update-ips.sh
#
INVENTORY="$(dirname "$0")/inventory.yml"
# Farben
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'
echo "=== IP-Adressen aktualisieren ==="
echo ""
# Alle Hostnamen aus inventory.yml extrahieren (Zeilen mit "laptop" am Anfang)
HOSTNAMES=$(grep -E '^\s+laptop[0-9]+:$' "$INVENTORY" | sed 's/://g' | tr -d ' ')
if [ -z "$HOSTNAMES" ]; then
echo -e "${RED}Keine Laptops in inventory.yml gefunden${NC}"
exit 1
fi
UPDATED=0
FAILED=0
CURRENT_HOSTNAME=$(hostname)
for HOST in $HOSTNAMES; do
printf "%-12s " "$HOST:"
IP=""
# Wenn es der lokale Rechner ist, eigene IPv4 verwenden
if [ "$HOST" = "$CURRENT_HOSTNAME" ]; then
IP=$(hostname -I | awk '{print $1}')
if [ -n "$IP" ]; then
echo -e "${GREEN}$IP${NC} (localhost)"
fi
else
# Methode 1: getent hosts (nur IPv4 filtern)
IP=$(getent hosts "${HOST}.local" 2>/dev/null | grep -E '^[0-9]+\.' | awk '{print $1}')
# Methode 2: avahi-resolve mit IPv4
if [ -z "$IP" ]; then
IP=$(avahi-resolve -4 -n "${HOST}.local" 2>/dev/null | awk '{print $2}')
fi
# Methode 3: ping (extrahiert IP aus Antwort)
if [ -z "$IP" ]; then
IP=$(ping -4 -c 1 -W 2 "${HOST}.local" 2>/dev/null | grep -oP '(\d+\.){3}\d+' | head -1)
fi
if [ -n "$IP" ]; then
echo -e "${GREEN}$IP${NC}"
fi
fi
if [ -n "$IP" ]; then
# IP in inventory.yml aktualisieren
sed -i "/${HOST}:$/,/ansible_host:/ s/ansible_host:.*/ansible_host: $IP/" "$INVENTORY"
((UPDATED++))
else
echo -e "${RED}nicht erreichbar${NC}"
((FAILED++))
fi
done
echo ""
echo "=== Fertig ==="
echo -e "Aktualisiert: ${GREEN}$UPDATED${NC}"
echo -e "Nicht erreichbar: ${RED}$FAILED${NC}"
if [ $UPDATED -gt 0 ]; then
echo ""
echo "Inventory testen:"
echo " ansible all -m ping"
fi