diff --git a/site/ipam.md b/site/ipam.md index d51a5158..da54df9f 100644 --- a/site/ipam.md +++ b/site/ipam.md @@ -33,7 +33,7 @@ Weave detects when a container has exited and releases its automatically allocated addresses so they can be re-used. Automatic IP address assignment is available for the `run`, `start`, -`attach`, `detach`, `expose` and `hide` commands. +`attach`, `detach`, `expose`, `hide` and `launch-dns` commands. ## Initialisation diff --git a/test/210_dns_multicast_test.sh b/test/210_dns_multicast_test.sh index f16d2eeb..bbb323fb 100755 --- a/test/210_dns_multicast_test.sh +++ b/test/210_dns_multicast_test.sh @@ -3,35 +3,59 @@ . ./config.sh C1=10.2.3.78 -C2_1=10.2.3.34 -C2_2=10.2.3.35 -C2_3=10.2.3.36 +C2=10.2.3.34 +C2a=10.2.3.35 +C2b=10.2.3.36 UNIVERSE=10.2.4.0/24 NAME2=seetwo.weave.local NAME4=seefour.weave.local -start_suite "Resolve names across hosts (with and without IPAM)" +start() { + weave_on $HOST1 launch-dns $1 >/dev/null + weave_on $HOST2 launch-dns $2 >/dev/null +} + +stop() { + weave_on $HOST1 stop-dns + weave_on $HOST2 stop-dns +} + +check() { + start $1 $2 + assert_dns_record $HOST1 c1 $NAME2 $C2 + assert_raises "exec_on $HOST1 c1 getent hosts 8.8.8.8 | grep google" + stop +} + +start_suite "Resolve names across hosts (with and without IPAM), and repopulate on restart" weave_on $HOST1 launch -iprange $UNIVERSE weave_on $HOST2 launch -iprange $UNIVERSE $HOST1 -weave_on $HOST1 launch-dns 10.2.254.1/24 -weave_on $HOST2 launch-dns 10.2.254.2/24 - -start_container $HOST2 $C2_1/24 --name=c2 -h $NAME2 -start_container $HOST2 --name=c4 -h $NAME4 - -weave_on $HOST2 dns-add $C2_2 c2 -h $NAME2 -weave_on $HOST2 dns-add $C2_3 c2 -h $NAME2 - +start_container $HOST2 $C2/24 --name=c2 -h $NAME2 start_container_with_dns $HOST1 $C1/24 --name=c1 -start_container_with_dns $HOST1 --name=c3 + +# resolution when DNS is launched with various ways of obtaining an IP +# NB: this also tests re-population on DNS restart +check ip:10.2.254.1/24 ip:10.2.254.2/24 +check net:10.2.4.128/25 net:10.2.4.128/25 +check net:default net:default +check + +start 10.2.254.1/24 10.2.254.2/24 + +# resolution for names mapped to multiple addresses +weave_on $HOST2 dns-add $C2a c2 -h $NAME2 +weave_on $HOST2 dns-add $C2b c2 -h $NAME2 +assert_dns_record $HOST1 c1 $NAME2 $C2 $C2a $C2b + +# resolution when containers addresses come from IPAM +start_container $HOST2 --name=c4 -h $NAME4 +start_container_with_dns $HOST1 --name=c3 C4=$(container_ip $HOST2 c4) - -assert_dns_record $HOST1 c1 $NAME2 $C2_1 $C2_2 $C2_3 assert_dns_record $HOST1 c3 $NAME4 $C4 - -assert_raises "exec_on $HOST1 c1 getent hosts 8.8.8.8 | grep google" assert_raises "exec_on $HOST1 c3 getent hosts 8.8.8.8 | grep google" +stop + end_suite diff --git a/test/250_dns_restart_test.sh b/test/250_dns_restart_test.sh deleted file mode 100755 index 24df8e78..00000000 --- a/test/250_dns_restart_test.sh +++ /dev/null @@ -1,18 +0,0 @@ -#! /bin/bash - -. ./config.sh - -C1=10.2.0.78 -C2=10.2.0.34 -NAME=seetwo.weave.local - -start_suite "Repopulation on weaveDNS restart" - -start_container $HOST1 $C2/24 --name=c2 -h $NAME -start_container_with_dns $HOST1 $C1/24 --name=c1 - -weave_on $HOST1 launch-dns 10.2.254.1/24 - -assert_dns_record $HOST1 c1 $NAME $C2 - -end_suite diff --git a/weave b/weave index 3e0b691a..c0d16176 100755 --- a/weave +++ b/weave @@ -28,7 +28,7 @@ usage() { echo "weave setup" echo "weave launch [-password ] [-nickname ] [-nodiscovery]" echo " [-iprange [-ipsubnet ]] ..." - echo "weave launch-dns " + echo "weave launch-dns []" echo "weave launch-proxy [-D ] [-H ] [--with-dns] [--with-ipam]" echo "weave connect [--replace] [ ...]" echo "weave forget ..." @@ -1009,10 +1009,9 @@ case "$COMMAND" in echo $CONTAINER ;; launch-dns) - [ $# -gt 0 ] || usage - CIDR=$1 - validate_cidr $CIDR - shift 1 + collect_cidr_args "$@" + [ $CIDR_ARG_COUNT -lt 2 ] || usage + shift $CIDR_ARG_COUNT check_not_running $DNS_CONTAINER_NAME $BASE_DNS_IMAGE create_bridge docker_bridge_ip @@ -1023,7 +1022,8 @@ case "$COMMAND" in -p $DOCKER_BRIDGE_IP:53:53/udp \ -v /var/run/docker.sock:/var/run/docker.sock \ $WEAVEDNS_DOCKER_ARGS $DNS_IMAGE -iface $CONTAINER_IFNAME "$@") - with_container_netns_or_die $DNS_CONTAINER attach $CIDR + ipam_cidrs $DNS_CONTAINER $CIDR_ARGS + with_container_netns_or_die $DNS_CONTAINER attach $ALL_CIDRS populate_dns echo $DNS_CONTAINER ;;