#!/bin/sh
# Arranca los servidores de la red, ya desplegada. Se corre desde el contenedor del curso.
#   sh red/start.sh            todos los servidores
#   sh red/start.sh lab <dir>  además, el TLD y killa con las zonas de <dir>, relativo a /w12
set -eu
p=clab-w12-red-
run() { docker exec -d "$p$1" sh -c "cd /w12 && exec python3 -u $2 >/tmp/$1.log 2>&1"; }

tld_zone=red/zones/test.zone
if [ "${1:-}" = lab ]; then
    tld_zone="$2/test.zone"
    run killa "dns_auth.py 10.212.8.10 $2/killa.zone"
fi
run raiz "dns_auth.py 10.212.3.10 red/zones/root.zone"
run tld "dns_auth.py 10.212.4.10 $tld_zone"
run auth "dns_auth.py 10.212.5.10 red/zones/wayra.zone"
run resolver "dns_resolver.py 10.212.2.10 10.212.3.10"
run web "mini_web.py 10.212.6.10 80"
run cache "mini_cache.py 10.212.7.10 3128"
# Cliente y proxy le preguntan a nuestro resolver: es lo que haría DHCP en una red real.
for node in cliente cache; do
    docker exec "$p$node" sh -c 'echo "nameserver 10.212.2.10" > /etc/resolv.conf'
done
# Python tarda unos segundos en cargar los módulos: no devolvemos el control hasta que todos escuchen.
for node in raiz tld auth resolver web cache; do
    tries=0
    until docker exec "$p$node" grep -q " en 10.212" "/tmp/$node.log" 2>/dev/null; do
        tries=$((tries + 1))
        if [ "$tries" -gt 100 ]; then
            echo "$node no arrancó" >&2
            docker exec "$p$node" cat "/tmp/$node.log" >&2
            exit 1
        fi
        sleep 0.2
    done
done
