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>
This commit is contained in:
82
update-ips.sh
Executable file
82
update-ips.sh
Executable file
@@ -0,0 +1,82 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user