From e2ec2b436d6d1cc3ff128f2f94c6839f55c53db5 Mon Sep 17 00:00:00 2001 From: Adam Harrison Date: Thu, 4 Feb 2016 11:12:48 +0000 Subject: [PATCH 1/2] Use netlink instead of shelling out to `weave docker-bridge-ip` --- prog/weaveproxy/main.go | 12 +++++++++--- proxy/common.go | 1 - proxy/proxy.go | 10 +++++++--- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/prog/weaveproxy/main.go b/prog/weaveproxy/main.go index 58dd29bc..b5bc3523 100644 --- a/prog/weaveproxy/main.go +++ b/prog/weaveproxy/main.go @@ -12,9 +12,10 @@ import ( ) var ( - version = "(unreleased version)" - defaultDockerHost = "unix:///var/run/docker.sock" - defaultProcPath = "/proc" + version = "(unreleased version)" + defaultDockerHost = "unix:///var/run/docker.sock" + defaultProcPath = "/proc" + defaultDockerBridge = "docker0" ) func main() { @@ -64,6 +65,11 @@ func main() { Log.Warning("--with-dns option has been removed; DNS is on by default") } + c.DockerBridge = defaultDockerBridge + if dockerBridge := os.Getenv("DOCKER_BRIDGE"); dockerBridge != "" { + c.DockerBridge = dockerBridge + } + c.DockerHost = defaultDockerHost if dockerHost := os.Getenv("DOCKER_HOST"); dockerHost != "" { c.DockerHost = dockerHost diff --git a/proxy/common.go b/proxy/common.go index 8903f60e..0bc2b28a 100644 --- a/proxy/common.go +++ b/proxy/common.go @@ -36,7 +36,6 @@ func callWeave(args ...string) ([]byte, []byte, error) { } } - propagateEnv("DOCKER_BRIDGE") propagateEnv("DOCKER_HOST") // Propagate WEAVE_DEBUG, to make debugging easier. diff --git a/proxy/proxy.go b/proxy/proxy.go index 460fa817..1f01e8cb 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -61,6 +61,7 @@ type Config struct { Version string WithoutDNS bool NoMulticastRoute bool + DockerBridge string DockerHost string ProcPath string } @@ -151,11 +152,14 @@ func NewProxy(c Config) (*Proxy, error) { p.client = client.Client if !p.WithoutDNS { - dockerBridgeIP, stderr, err := callWeave("docker-bridge-ip") + netDevs, err := GetBridgeNetDev(c.ProcPath, c.DockerBridge) if err != nil { - return nil, fmt.Errorf(string(stderr)) + return nil, err } - p.dockerBridgeIP = string(dockerBridgeIP) + if len(netDevs) != 1 || len(netDevs[0].CIDRs) != 1 { + return nil, fmt.Errorf("Could not obtain address of %s", c.DockerBridge) + } + p.dockerBridgeIP = netDevs[0].CIDRs[0].IP.String() } p.hostnameMatchRegexp, err = regexp.Compile(c.HostnameMatch) From 9ac62e800537c93eddf4e32740d0e23fcb211251 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Mon, 8 Feb 2016 10:46:18 +0000 Subject: [PATCH 2/2] Extract common getenv-testing code --- prog/weaveproxy/main.go | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/prog/weaveproxy/main.go b/prog/weaveproxy/main.go index b5bc3523..78be8f28 100644 --- a/prog/weaveproxy/main.go +++ b/prog/weaveproxy/main.go @@ -12,17 +12,21 @@ import ( ) var ( - version = "(unreleased version)" - defaultDockerHost = "unix:///var/run/docker.sock" - defaultProcPath = "/proc" - defaultDockerBridge = "docker0" + version = "(unreleased version)" ) +func getenv(key, defaultVal string) string { + if v := os.Getenv(key); v != "" { + return v + } + return defaultVal +} + func main() { var ( justVersion bool logLevel = "info" - c = proxy.Config{Image: "weaveworks/weaveexec"} + c proxy.Config withDNS bool ) @@ -54,10 +58,6 @@ func main() { SetLogLevel(logLevel) - if image := os.Getenv("EXEC_IMAGE"); image != "" { - c.Image = image - } - Log.Infoln("weave proxy", version) Log.Infoln("Command line arguments:", strings.Join(os.Args[1:], " ")) @@ -65,20 +65,10 @@ func main() { Log.Warning("--with-dns option has been removed; DNS is on by default") } - c.DockerBridge = defaultDockerBridge - if dockerBridge := os.Getenv("DOCKER_BRIDGE"); dockerBridge != "" { - c.DockerBridge = dockerBridge - } - - c.DockerHost = defaultDockerHost - if dockerHost := os.Getenv("DOCKER_HOST"); dockerHost != "" { - c.DockerHost = dockerHost - } - - c.ProcPath = defaultProcPath - if procPath := os.Getenv("PROCFS"); procPath != "" { - c.ProcPath = procPath - } + c.Image = getenv("EXEC_IMAGE", "weaveworks/weaveexec") + c.DockerBridge = getenv("DOCKER_BRIDGE", "docker0") + c.DockerHost = getenv("DOCKER_HOST", "unix:///var/run/docker.sock") + c.ProcPath = getenv("PROCFS", "/proc") p, err := proxy.NewProxy(c) if err != nil {