Skip to content

Commit

Permalink
Merge pull request #2797 from hashicorp/f-2785-docker-bridge-ip
Browse files Browse the repository at this point in the history
Add driver.docker.bridge_ip node attribute
  • Loading branch information
schmichael committed Jul 7, 2017
2 parents 0ba7948 + 024d5a8 commit 5ab252f
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ IMPROVEMENTS:
* driver/docker: Allow setting seccomp profiles [GH-2658]
* driver/docker: Support Docker credential helpers [GH-2651]
* driver/docker: Auth failures can optionally be ignored [GH-2786]
* driver/docker: Add `driver.docker.bridge_ip` node attribute [GH-2797]
* driver/docker: Allow setting container IP with user defined networks
[GH-2535]
* driver/rkt: Support `no_overlay` [GH-2702]
Expand Down
18 changes: 18 additions & 0 deletions client/driver/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,24 @@ func (d *DockerDriver) Fingerprint(cfg *config.Config, node *structs.Node) (bool
node.Attributes["driver."+dockerVolumesConfigOption] = "1"
}

// Detect bridge IP address - #2785
if nets, err := client.ListNetworks(); err != nil {
d.logger.Printf("[WARN] driver.docker: error discovering bridge IP: %v", err)
} else {
for _, n := range nets {
if n.Name != "bridge" {
continue
}

if len(n.IPAM.Config) == 0 {
d.logger.Printf("[WARN] driver.docker: no IPAM config for bridge network")
break
}

node.Attributes["driver.docker.bridge_ip"] = n.IPAM.Config[0].Gateway
}
}

d.fingerprintSuccess = helper.BoolToPtr(true)
return true, nil
}
Expand Down
35 changes: 35 additions & 0 deletions client/driver/docker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"time"

docker "github.com/fsouza/go-dockerclient"
sockaddr "github.com/hashicorp/go-sockaddr"
"github.com/hashicorp/nomad/client/allocdir"
"github.com/hashicorp/nomad/client/config"
"github.com/hashicorp/nomad/client/driver/env"
Expand Down Expand Up @@ -177,6 +178,40 @@ func TestDockerDriver_Fingerprint(t *testing.T) {
t.Logf("Found docker version %s", node.Attributes["driver.docker.version"])
}

// TestDockerDriver_Fingerprint_Bridge asserts that if Docker is running we set
// the bridge network's IP as a node attribute. See #2785
func TestDockerDriver_Fingerprint_Bridge(t *testing.T) {
if !testutil.DockerIsConnected(t) {
t.Skip("requires Docker")
}

// This seems fragile, so we might need to reconsider this test if it
// proves flaky
expectedAddr, err := sockaddr.GetInterfaceIP("docker0")
if err != nil {
t.Fatalf("unable to get ip for docker0: %v", err)
}
if expectedAddr == "" {
t.Fatalf("unable to get ip for docker bridge")
}

conf := testConfig()
conf.Node = mock.Node()
dd := NewDockerDriver(NewDriverContext("", "", conf, conf.Node, testLogger(), nil))
ok, err := dd.Fingerprint(conf, conf.Node)
if err != nil {
t.Fatalf("error fingerprinting docker: %v", err)
}
if !ok {
t.Fatalf("expected Docker to be enabled but false was returned")
}

if found := conf.Node.Attributes["driver.docker.bridge_ip"]; found != expectedAddr {
t.Fatalf("expected bridge ip %q but found: %q", expectedAddr, found)
}
t.Logf("docker bridge ip: %q", conf.Node.Attributes["driver.docker.bridge_ip"])
}

func TestDockerDriver_StartOpen_Wait(t *testing.T) {
if !testutil.DockerIsConnected(t) {
t.SkipNow()
Expand Down
2 changes: 2 additions & 0 deletions website/source/docs/drivers/docker.html.md
Original file line number Diff line number Diff line change
Expand Up @@ -529,6 +529,8 @@ The `docker` driver will set the following client attributes:

* `driver.docker` - This will be set to "1", indicating the driver is
available.
* `driver.docker.bridge_ip` - The IP of the Docker bridge network if one
exists.
* `driver.docker.version` - This will be set to version of the docker server.

Here is an example of using these properties in a job file:
Expand Down

0 comments on commit 5ab252f

Please sign in to comment.