From 6483c89a2b392d2bab709c0d162a6fef4b23a0cc Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Fri, 12 Sep 2014 17:51:30 +0100 Subject: [PATCH 01/10] Factor out commands implemented via the REST interface --- weaver/weave | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/weaver/weave b/weaver/weave index 5dab5d9b..ec57494c 100755 --- a/weaver/weave +++ b/weaver/weave @@ -68,6 +68,26 @@ setup_masquerading() { add_nat_rule "POSTROUTING -s $IPADDR ! -o $BRIDGE -j MASQUERADE" } +rest_command() { + RESTCOMMAND=$1 + if ! DOCKERIP=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' weave 2>/dev/null) ; then + echo "Weave is not running." >&2 + exit 1 + fi + if [ -z "$DOCKERIP" ] ; then + echo "Weave is not running." >&2 + exit 1 + fi + if command_exists wget ; then + wget -O - -q $DOCKERIP:6784/$RESTCOMMAND + elif command_exists curl ; then + curl $DOCKERIP:6784/$RESTCOMMAND + else + echo "Cannot find wget or curl. Install one of them for 'weave $RESTCOMMAND' to function." >&2 + exit 1 + fi +} + case "$COMMAND" in launch) [ $# -gt 0 ] || usage @@ -104,22 +124,7 @@ case "$COMMAND" in IFACE=eth0 ;; status) - if ! DOCKERIP=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' weave 2>/dev/null) ; then - echo "Weave is not running." >&2 - exit 1 - fi - if [ -z "$DOCKERIP" ] ; then - echo "Weave is not running." >&2 - exit 1 - fi - if command_exists wget ; then - wget -O - -q $DOCKERIP:6784/status - elif command_exists curl ; then - curl $DOCKERIP:6784/status - else - echo "Cannot find wget or curl. Install one of them for 'weave status' to function." >&2 - exit 1 - fi + rest_command status exit 0 ;; run) From 21bec9fc783b105e4834061d11b46cda23fd64b5 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Fri, 12 Sep 2014 17:53:06 +0100 Subject: [PATCH 02/10] Add a -version command to weave and weaver, implemented by embedding the build date by the makefile --- weaver/Makefile | 2 +- weaver/main.go | 15 +++++++++++++++ weaver/weave | 4 ++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/weaver/Makefile b/weaver/Makefile index 7c0ea882..e9ed6733 100644 --- a/weaver/Makefile +++ b/weaver/Makefile @@ -3,7 +3,7 @@ all: docker-image weaver: ../*.go main.go - go build -ldflags '-extldflags "-static"' + go build -ldflags="-X main.builddate \"`date -u -Iseconds`\" -extldflags '-static'" .PHONY: docker-image diff --git a/weaver/main.go b/weaver/main.go index e11f1c49..bb1d2097 100644 --- a/weaver/main.go +++ b/weaver/main.go @@ -18,6 +18,12 @@ import ( "time" ) +var builddate string // set by the Makefile + +func versionString() string { + return "Weave of " + builddate +} + func ensureInterface(ifaceName string, wait bool) (iface *net.Interface, err error) { iface, err = findInterface(ifaceName) if err == nil || !wait { @@ -62,6 +68,7 @@ func main() { password string wait bool debug bool + version bool prof string peers []string connLimit int @@ -73,16 +80,21 @@ func main() { flag.StringVar(&password, "password", "", "network password") flag.BoolVar(&wait, "wait", false, "wait for interface to be created and come up") flag.BoolVar(&debug, "debug", false, "enable debug logging") + flag.BoolVar(&version, "version", false, "display version information") flag.StringVar(&prof, "profile", "", "enable profiling and write profiles to given path") flag.IntVar(&connLimit, "connlimit", 10, "connection limit (defaults to 10, set to 0 for unlimited)") flag.IntVar(&bufSz, "bufsz", 8, "capture buffer size in MB (defaults to 8MB)") flag.Parse() peers = flag.Args() + if version { + fmt.Println(versionString()) + } if ifaceName == "" { fmt.Println("Missing required parameter 'iface'") os.Exit(1) } + log.Println(versionString(), os.Args) iface, err := ensureInterface(ifaceName, wait) if err != nil { log.Fatal(err) @@ -139,6 +151,9 @@ func handleHttp(router *weave.Router) { http.HandleFunc("/status", func(w http.ResponseWriter, r *http.Request) { io.WriteString(w, router.Status()) }) + http.HandleFunc("/version", func(w http.ResponseWriter, r *http.Request) { + io.WriteString(w, versionString() + "\n") + }) address := fmt.Sprintf(":%d", weave.StatusPort) err := http.ListenAndServe(address, nil) if err != nil { diff --git a/weaver/weave b/weaver/weave index ec57494c..0a7e3fb6 100755 --- a/weaver/weave +++ b/weaver/weave @@ -127,6 +127,10 @@ case "$COMMAND" in rest_command status exit 0 ;; + version) + rest_command version + exit 0 + ;; run) [ $# -gt 0 ] || usage IPADDR=$1 From 9be3a11e10218fe916dc84aabff371a4958595d3 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Fri, 12 Sep 2014 18:04:18 +0100 Subject: [PATCH 03/10] cosmetic --- weaver/main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/weaver/main.go b/weaver/main.go index bb1d2097..941b49fd 100644 --- a/weaver/main.go +++ b/weaver/main.go @@ -18,7 +18,7 @@ import ( "time" ) -var builddate string // set by the Makefile +var builddate string // set by the Makefile func versionString() string { return "Weave of " + builddate @@ -152,7 +152,7 @@ func handleHttp(router *weave.Router) { io.WriteString(w, router.Status()) }) http.HandleFunc("/version", func(w http.ResponseWriter, r *http.Request) { - io.WriteString(w, versionString() + "\n") + io.WriteString(w, versionString()+"\n") }) address := fmt.Sprintf(":%d", weave.StatusPort) err := http.ListenAndServe(address, nil) From 39003233ead2df57d21282e3b016e437e3686907 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Mon, 15 Sep 2014 14:05:15 +0100 Subject: [PATCH 04/10] Remove version/build-date info from weaver binary --- weaver/Makefile | 2 +- weaver/main.go | 16 +--------------- weaver/weave | 41 ++++++++++++++++------------------------- 3 files changed, 18 insertions(+), 41 deletions(-) diff --git a/weaver/Makefile b/weaver/Makefile index e9ed6733..7c0ea882 100644 --- a/weaver/Makefile +++ b/weaver/Makefile @@ -3,7 +3,7 @@ all: docker-image weaver: ../*.go main.go - go build -ldflags="-X main.builddate \"`date -u -Iseconds`\" -extldflags '-static'" + go build -ldflags '-extldflags "-static"' .PHONY: docker-image diff --git a/weaver/main.go b/weaver/main.go index 941b49fd..4269752d 100644 --- a/weaver/main.go +++ b/weaver/main.go @@ -18,12 +18,6 @@ import ( "time" ) -var builddate string // set by the Makefile - -func versionString() string { - return "Weave of " + builddate -} - func ensureInterface(ifaceName string, wait bool) (iface *net.Interface, err error) { iface, err = findInterface(ifaceName) if err == nil || !wait { @@ -68,7 +62,6 @@ func main() { password string wait bool debug bool - version bool prof string peers []string connLimit int @@ -80,21 +73,17 @@ func main() { flag.StringVar(&password, "password", "", "network password") flag.BoolVar(&wait, "wait", false, "wait for interface to be created and come up") flag.BoolVar(&debug, "debug", false, "enable debug logging") - flag.BoolVar(&version, "version", false, "display version information") flag.StringVar(&prof, "profile", "", "enable profiling and write profiles to given path") flag.IntVar(&connLimit, "connlimit", 10, "connection limit (defaults to 10, set to 0 for unlimited)") flag.IntVar(&bufSz, "bufsz", 8, "capture buffer size in MB (defaults to 8MB)") flag.Parse() peers = flag.Args() - if version { - fmt.Println(versionString()) - } if ifaceName == "" { fmt.Println("Missing required parameter 'iface'") os.Exit(1) } - log.Println(versionString(), os.Args) + log.Println("Weave: ", os.Args) iface, err := ensureInterface(ifaceName, wait) if err != nil { log.Fatal(err) @@ -151,9 +140,6 @@ func handleHttp(router *weave.Router) { http.HandleFunc("/status", func(w http.ResponseWriter, r *http.Request) { io.WriteString(w, router.Status()) }) - http.HandleFunc("/version", func(w http.ResponseWriter, r *http.Request) { - io.WriteString(w, versionString()+"\n") - }) address := fmt.Sprintf(":%d", weave.StatusPort) err := http.ListenAndServe(address, nil) if err != nil { diff --git a/weaver/weave b/weaver/weave index 0a7e3fb6..5dab5d9b 100755 --- a/weaver/weave +++ b/weaver/weave @@ -68,26 +68,6 @@ setup_masquerading() { add_nat_rule "POSTROUTING -s $IPADDR ! -o $BRIDGE -j MASQUERADE" } -rest_command() { - RESTCOMMAND=$1 - if ! DOCKERIP=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' weave 2>/dev/null) ; then - echo "Weave is not running." >&2 - exit 1 - fi - if [ -z "$DOCKERIP" ] ; then - echo "Weave is not running." >&2 - exit 1 - fi - if command_exists wget ; then - wget -O - -q $DOCKERIP:6784/$RESTCOMMAND - elif command_exists curl ; then - curl $DOCKERIP:6784/$RESTCOMMAND - else - echo "Cannot find wget or curl. Install one of them for 'weave $RESTCOMMAND' to function." >&2 - exit 1 - fi -} - case "$COMMAND" in launch) [ $# -gt 0 ] || usage @@ -124,11 +104,22 @@ case "$COMMAND" in IFACE=eth0 ;; status) - rest_command status - exit 0 - ;; - version) - rest_command version + if ! DOCKERIP=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' weave 2>/dev/null) ; then + echo "Weave is not running." >&2 + exit 1 + fi + if [ -z "$DOCKERIP" ] ; then + echo "Weave is not running." >&2 + exit 1 + fi + if command_exists wget ; then + wget -O - -q $DOCKERIP:6784/status + elif command_exists curl ; then + curl $DOCKERIP:6784/status + else + echo "Cannot find wget or curl. Install one of them for 'weave status' to function." >&2 + exit 1 + fi exit 0 ;; run) From 244188776f0eced3c76578cae6b9b1fdbce66dc1 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Mon, 15 Sep 2014 14:26:13 +0100 Subject: [PATCH 05/10] Add tag to build command, so you can do "make tag=x.xx" to add a version number to the image --- weaver/Makefile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/weaver/Makefile b/weaver/Makefile index 7c0ea882..95ef6641 100644 --- a/weaver/Makefile +++ b/weaver/Makefile @@ -9,8 +9,13 @@ weaver: ../*.go main.go docker-image: /tmp/weave.tar +# override this on the command-line when you are doing a release +# e.g. make tag=0.99 +tag=dev + /tmp/weave.tar: Dockerfile weaver - sudo docker build -t zettio/weave . + sudo docker build -t zettio/weave:latest . + sudo docker tag zettio/weave:latest zettio/weave:$(tag) sudo docker save zettio/weave > /tmp/weave.tar clean: From 18f65dc34430bfade4a9f82d25e81629dace23ed Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Mon, 15 Sep 2014 14:40:57 +0100 Subject: [PATCH 06/10] Add 'publish' target to tag and push release --- weaver/Makefile | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/weaver/Makefile b/weaver/Makefile index 95ef6641..0c88d052 100644 --- a/weaver/Makefile +++ b/weaver/Makefile @@ -9,15 +9,19 @@ weaver: ../*.go main.go docker-image: /tmp/weave.tar -# override this on the command-line when you are doing a release -# e.g. make tag=0.99 -tag=dev - /tmp/weave.tar: Dockerfile weaver sudo docker build -t zettio/weave:latest . - sudo docker tag zettio/weave:latest zettio/weave:$(tag) sudo docker save zettio/weave > /tmp/weave.tar +# override this on the command-line when you are doing a release +# e.g. make publish tag=0.99 +tag=latest + +publish: docker-image + git tag -a $(tag) -m "Release $(tag)" + sudo docker tag zettio/weave:latest zettio/weave:$(tag) + sudo docker push zettio/weave + clean: -sudo docker rmi zettio/weave rm -f weaver pipework /tmp/weave.tar From 500bda596c8ac5d8259987a898a6b96790569869 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Mon, 15 Sep 2014 14:42:39 +0100 Subject: [PATCH 07/10] Don't do the print args thing in this branch --- weaver/main.go | 1 - 1 file changed, 1 deletion(-) diff --git a/weaver/main.go b/weaver/main.go index 4269752d..e11f1c49 100644 --- a/weaver/main.go +++ b/weaver/main.go @@ -83,7 +83,6 @@ func main() { fmt.Println("Missing required parameter 'iface'") os.Exit(1) } - log.Println("Weave: ", os.Args) iface, err := ensureInterface(ifaceName, wait) if err != nil { log.Fatal(err) From 7e8ac8c4d09145e9688f95d9508c0e3520dc55ab Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Mon, 15 Sep 2014 15:04:22 +0100 Subject: [PATCH 08/10] don't need ':latest' on the build line --- weaver/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weaver/Makefile b/weaver/Makefile index 0c88d052..ab6157ce 100644 --- a/weaver/Makefile +++ b/weaver/Makefile @@ -10,7 +10,7 @@ weaver: ../*.go main.go docker-image: /tmp/weave.tar /tmp/weave.tar: Dockerfile weaver - sudo docker build -t zettio/weave:latest . + sudo docker build -t zettio/weave . sudo docker save zettio/weave > /tmp/weave.tar # override this on the command-line when you are doing a release From f57058f627f6c02f755f0bc78fd43fef4c134560 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Mon, 15 Sep 2014 15:33:09 +0100 Subject: [PATCH 09/10] Use git commit hash instead of requiring user to enter a version tag on 'make publish' --- weaver/Makefile | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/weaver/Makefile b/weaver/Makefile index ab6157ce..2ce5d842 100644 --- a/weaver/Makefile +++ b/weaver/Makefile @@ -13,13 +13,8 @@ docker-image: /tmp/weave.tar sudo docker build -t zettio/weave . sudo docker save zettio/weave > /tmp/weave.tar -# override this on the command-line when you are doing a release -# e.g. make publish tag=0.99 -tag=latest - publish: docker-image - git tag -a $(tag) -m "Release $(tag)" - sudo docker tag zettio/weave:latest zettio/weave:$(tag) + sudo docker tag zettio/weave:latest zettio/weave:git-`git rev-parse --short=12 HEAD` sudo docker push zettio/weave clean: From 25c4adf68e47acf38bdcacda4cac9c74a76304f9 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Mon, 15 Sep 2014 16:00:08 +0100 Subject: [PATCH 10/10] Don't need :latest on tag command --- weaver/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weaver/Makefile b/weaver/Makefile index 2ce5d842..fbe59253 100644 --- a/weaver/Makefile +++ b/weaver/Makefile @@ -14,7 +14,7 @@ docker-image: /tmp/weave.tar sudo docker save zettio/weave > /tmp/weave.tar publish: docker-image - sudo docker tag zettio/weave:latest zettio/weave:git-`git rev-parse --short=12 HEAD` + sudo docker tag zettio/weave zettio/weave:git-`git rev-parse --short=12 HEAD` sudo docker push zettio/weave clean: