From f70dc6660a6079a24ce40c9432423379bca7b0eb Mon Sep 17 00:00:00 2001 From: Paul Bellamy Date: Wed, 12 Aug 2015 13:36:50 +0100 Subject: [PATCH 1/3] [proxy] lock docker api usage to 1.15 --- proxy/proxy.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/proxy/proxy.go b/proxy/proxy.go index b42a582d..5a421538 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -82,7 +82,11 @@ func NewProxy(c Config) (*Proxy, error) { Error.Fatalf("Could not configure tls for proxy: %s", err) } - p.client, err = docker.NewClient(p.DockerAddr) + // We pin the protocol version to 1.15 (which corresponds to Docker 1.3.x; + // the earliest version supported by weave) in order to insulate ourselves + // from breaking changes to the API, as happened in 1.20 (Docker 1.8.0) when + // the presentation of volumes changed in inspect. + p.client, err = docker.NewVersionedClient(p.DockerAddr, "1.15") if err != nil { return nil, err } From 4961e8368642c6ea6ac78f5cc9b7ab77ecae6da7 Mon Sep 17 00:00:00 2001 From: Paul Bellamy Date: Wed, 12 Aug 2015 14:02:36 +0100 Subject: [PATCH 2/3] [proxy] support new docker 1.8 --net="default" --- proxy/proxy.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/proxy/proxy.go b/proxy/proxy.go index 5a421538..83664800 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -25,9 +25,8 @@ var ( containerStartRegexp = regexp.MustCompile("^(/v[0-9\\.]*)?/containers/[^/]*/(re)?start$") execCreateRegexp = regexp.MustCompile("^(/v[0-9\\.]*)?/containers/[^/]*/exec$") - ErrInvalidNetworkMode = errors.New("--net option") - ErrWeaveCIDRNone = errors.New("WEAVE_CIDR=none") - ErrNoDefaultIPAM = errors.New("--no-default-ipam option") + ErrWeaveCIDRNone = errors.New("WEAVE_CIDR=none") + ErrNoDefaultIPAM = errors.New("--no-default-ipam option") ) type Proxy struct { @@ -152,8 +151,9 @@ func (proxy *Proxy) ListenAndServe() error { func (proxy *Proxy) weaveCIDRsFromConfig(config *docker.Config, hostConfig *docker.HostConfig) ([]string, error) { if hostConfig != nil && hostConfig.NetworkMode != "" && + hostConfig.NetworkMode != "default" && hostConfig.NetworkMode != "bridge" { - return nil, ErrInvalidNetworkMode + return nil, fmt.Errorf("--net option: %q", hostConfig.NetworkMode) } for _, e := range config.Env { if strings.HasPrefix(e, "WEAVE_CIDR=") { From bf2b456af179282b8a7cb81daf14c8b3443ec006 Mon Sep 17 00:00:00 2001 From: Paul Bellamy Date: Thu, 13 Aug 2015 13:36:22 +0100 Subject: [PATCH 3/3] Don't use .Volumes in tests, as it's gone in docker 1.8 --- test/610_proxy_wait_for_weave_test.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/610_proxy_wait_for_weave_test.sh b/test/610_proxy_wait_for_weave_test.sh index 8abd4440..bebce97e 100755 --- a/test/610_proxy_wait_for_weave_test.sh +++ b/test/610_proxy_wait_for_weave_test.sh @@ -29,9 +29,9 @@ assert_raises "proxy docker_on $HOST1 exec c3 true" assert_raises "proxy docker_on $HOST1 run -e 'WEAVE_CIDR=10.2.1.2/24' $BASE_IMAGE touch /w/w" 1 # Check only user-specified volumes and /w are mounted -proxy docker_on $HOST1 create --name c4 -v /tmp/1:/srv1 -v /tmp/2:/srv2 -e 'WEAVE_CIDR=10.2.1.3/24' $BASE_IMAGE $CHECK_ETHWE_UP -proxy docker_on $HOST1 start -ai c4 -assert "docker_on $HOST1 inspect --format='{{range \$k, \$v := .Volumes}}{{\$k}} {{end}}' c4" "/srv1 /srv2 /w " +dirs_sans_proxy=$(docker_on $HOST1 run --rm -it $BASE_IMAGE mount | wc -l) +dirs_with_proxy=$(proxy docker_on $HOST1 run --rm -it -v /tmp/1:/srv1 -v /tmp/2:/srv2 -e 'WEAVE_CIDR=10.2.1.3/24' $BASE_IMAGE mount | wc -l) +assert "$((dirs_with_proxy-3))" $dirs_sans_proxy # Check errors are returned (when docker returns an error code) assert_raises "docker -H tcp://$HOST1:12375 run -e 'WEAVE_CIDR=10.2.1.3/24' $SMALL_IMAGE foo 2>&1 | grep 'exec: \"foo\": executable file not found in \$PATH'"