From b3d19d6e9db7d5785452fbcf9b696e483d7f9538 Mon Sep 17 00:00:00 2001 From: Michael Bridgen Date: Tue, 25 Nov 2014 12:14:40 +0000 Subject: [PATCH] Wait for weaveDNS HTTP to be running before sending it names This adds a no-op endpoint to the HTTP API at `/status`. The script simply tries this until it succeeds or gets bored. --- nameserver/http.go | 10 ++++++++++ weave | 11 +++++++++++ 2 files changed, 21 insertions(+) diff --git a/nameserver/http.go b/nameserver/http.go index b25b9204..d6895d7d 100644 --- a/nameserver/http.go +++ b/nameserver/http.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "github.com/miekg/dns" + "io" "log" "net" "net/http" @@ -26,6 +27,15 @@ func httpErrorAndLog(level *log.Logger, w http.ResponseWriter, msg string, } func ListenHttp(domain string, db Zone, port int) { + + http.HandleFunc("/status", func(w http.ResponseWriter, r *http.Request) { + if r.Method != "GET" { + http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) + } else { + io.WriteString(w, "ok") + } + }) + http.HandleFunc("/name/", func(w http.ResponseWriter, r *http.Request) { reqError := func(msg string, logmsg string, logargs ...interface{}) { diff --git a/weave b/weave index d3c00b2b..b044a7cc 100755 --- a/weave +++ b/weave @@ -317,6 +317,17 @@ tell_dns() { # Tell the newly-started weaveDNS about existing weave IPs populate_dns() { DNS_IP=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' $DNS_CONTAINER_NAME) + WAIT_TIME=1 + while ! http_call_ip $DNS_IP $DNS_HTTP_PORT GET /status >/dev/null && [ $WAIT_TIME -lt 4 ]; do + echo "Waiting for weaveDNS container to start" >&2 + sleep $WAIT_TIME + WAIT_TIME=$((WAIT_TIME+1)) + done + if [ $WAIT_TIME = 4 ]; then + echo "Timed out waiting for weaveDNS container to start." >&2 + echo "If running, it will not be pre-populated." >&2 + fi + for CONTAINER in $(docker ps -q); do MORE_ARGS=$(docker inspect --format '--data-urlencode local_ip={{ .NetworkSettings.IPAddress }} --data-urlencode fqdn={{ .Config.Hostname }}.{{ .Config.Domainname }}.' $CONTAINER 2>/dev/null) && true if CONTAINER_ADDRS=$(with_container_netns $CONTAINER container_weave_addrs 2>&1) ; then