Files
ansible-playbooks/execute.sh
T
2026-10-17 17:16:53 +02:00

69 lines
2.4 KiB
Bash
Executable File

#!/bin/bash
defaultimage="ansible:deb13"
ssh_key_dir="${SSH_KEY_DIR:-$HOME/.ssh}"
if [ ! -d "$ssh_key_dir" ] || [ ! -r "$ssh_key_dir" ]; then
echo "Lokales SSH-Verzeichnis '$ssh_key_dir' fehlt oder ist nicht lesbar." >&2
echo "Setze SSH_KEY_DIR auf das Verzeichnis mit deinem SSH-Key." >&2
exit 1
fi
case "$ssh_key_dir" in
/*) ;;
*) ssh_key_dir="$(pwd)/$ssh_key_dir" ;;
esac
export ANSIBLE_HOST_KEY_CHECKING=False
export ANSIBLE_CONFIG=./ansible.cfg
# Ermittle den nächsten freien Container-Namen
base_name="ansible"
network_name="ansible-dualstack"
counter=1
while docker ps -a --format '{{.Names}}' | grep -q "^${base_name}-${counter}$"; do
counter=$((counter + 1))
done
container_name="${base_name}-${counter}"
if docker network inspect "$network_name" >/dev/null 2>&1; then
network_ipv6_enabled=$(docker network inspect -f '{{.EnableIPv6}}' "$network_name" 2>/dev/null)
if [ "$network_ipv6_enabled" != "true" ]; then
echo "Docker-Netzwerk '$network_name' existiert bereits ohne IPv6-Unterstuetzung." >&2
echo "Bitte Netzwerk entfernen oder einen anderen Netzwerknamen verwenden." >&2
exit 1
fi
else
if ! docker network create --driver bridge --ipv6 "$network_name" >/dev/null; then
echo "Docker-Netzwerk '$network_name' mit IPv6 konnte nicht erstellt werden." >&2
echo "Pruefe, ob Docker IPv6 fuer benutzerdefinierte Bridge-Netze unterstuetzt." >&2
exit 1
fi
fi
docker run --rm -dit \
--name "$container_name" \
--hostname "$container_name" \
--network "$network_name" \
-e ANSIBLE_HOST_KEY_CHECKING=False \
-e ANSIBLE_CONFIG=./ansible.cfg \
-v "$(pwd):/ansible" \
-v "$ssh_key_dir:/root/.ssh:ro" \
-w /ansible \
"$defaultimage" \
"/bin/bash" || exit "$?"
container_ipv4=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{if .IPAddress}}{{.IPAddress}}{{end}}{{end}}' "$container_name" 2>/dev/null)
container_ipv6=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{if .GlobalIPv6Address}}{{.GlobalIPv6Address}}{{end}}{{end}}' "$container_name" 2>/dev/null)
container_os=$(docker exec "$container_name" sh -c 'grep PRETTY_NAME /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d "\"" 2>/dev/null')
echo "-----------------------------------"
echo "Container Name : $container_name"
echo "Container IPv4 : ${container_ipv4:-n/a}"
echo "Container IPv6 : ${container_ipv6:-n/a}"
echo "Container OS : ${container_os:-n/a}"
echo "-----------------------------------"
docker attach "$container_name"