From cda2db23814741feb8032a5108bdd45e5c965c52 Mon Sep 17 00:00:00 2001 From: Michael Schurter Date: Tue, 20 Jun 2017 12:26:52 -0700 Subject: [PATCH] Skip DRIVER env vars for labels without a port mapping --- client/driver/env/env.go | 4 ++-- client/driver/env/env_test.go | 17 ++++++++++++++--- nomad/structs/diff_test.go | 16 ++++++++++++++-- nomad/structs/structs.go | 2 +- 4 files changed, 31 insertions(+), 8 deletions(-) diff --git a/client/driver/env/env.go b/client/driver/env/env.go index 96dccd879..40091e8e9 100644 --- a/client/driver/env/env.go +++ b/client/driver/env/env.go @@ -514,9 +514,9 @@ func buildPortEnv(envMap map[string]string, p structs.Port, ip string, driverNet envMap[HostAddrPrefix+p.Label] = net.JoinHostPort(ip, portStr) // Driver IP, PORT, and ADDR if available - if driverNet != nil { - driverPortStr := strconv.Itoa(driverNet.PortMap[p.Label]) + if driverNet != nil && driverNet.PortMap[p.Label] != 0 { envMap[DriverIpPrefix+p.Label] = driverNet.IP + driverPortStr := strconv.Itoa(driverNet.PortMap[p.Label]) envMap[DriverPortPrefix+p.Label] = driverPortStr envMap[DriverAddrPrefix+p.Label] = net.JoinHostPort(driverNet.IP, driverPortStr) } diff --git a/client/driver/env/env_test.go b/client/driver/env/env_test.go index b65a67ec2..576877dd7 100644 --- a/client/driver/env/env_test.go +++ b/client/driver/env/env_test.go @@ -8,6 +8,7 @@ import ( "strings" "testing" + cstructs "github.com/hashicorp/nomad/client/structs" "github.com/hashicorp/nomad/nomad/mock" "github.com/hashicorp/nomad/nomad/structs" ) @@ -164,7 +165,9 @@ func TestEnvironment_AsList(t *testing.T) { DynamicPorts: []structs.Port{{Label: "https", Value: 8080}}, }, } - env := NewBuilder(n, a, task, "global").SetPortMap(map[string]int{"https": 443}) + env := NewBuilder(n, a, task, "global").SetDriverNetwork( + &cstructs.DriverNetwork{PortMap: map[string]int{"https": 443}}, + ) act := env.Build().List() exp := []string{ @@ -184,6 +187,13 @@ func TestEnvironment_AsList(t *testing.T) { "NOMAD_IP_ssh_ssh=192.168.0.100", "NOMAD_PORT_ssh_other=1234", "NOMAD_PORT_ssh_ssh=22", + "NOMAD_DRIVER_ADDR_https=:443", + "NOMAD_DRIVER_IP_https=", + "NOMAD_DRIVER_PORT_https=443", + "NOMAD_HOST_ADDR_http=127.0.0.1:80", + "NOMAD_HOST_ADDR_https=127.0.0.1:8080", + "NOMAD_HOST_IP_http=127.0.0.1", + "NOMAD_HOST_IP_https=127.0.0.1", "NOMAD_CPU_LIMIT=500", "NOMAD_DC=dc1", "NOMAD_REGION=global", @@ -204,7 +214,7 @@ func TestEnvironment_AsList(t *testing.T) { sort.Strings(act) sort.Strings(exp) if len(act) != len(exp) { - t.Fatalf("expected %d vars != %d actual, actual: %s\n\nexpected: %s\n", + t.Fatalf("expected %d vars != %d actual, actual:\n%s\n\nexpected:\n%s\n", len(act), len(exp), strings.Join(act, "\n"), strings.Join(exp, "\n")) } for i := range act { @@ -249,7 +259,8 @@ func TestEnvironment_Envvars(t *testing.T) { a := mock.Alloc() task := a.Job.TaskGroups[0].Tasks[0] task.Env = envMap - act := NewBuilder(n, a, task, "global").SetPortMap(portMap).Build().All() + net := &cstructs.DriverNetwork{PortMap: portMap} + act := NewBuilder(n, a, task, "global").SetDriverNetwork(net).Build().All() for k, v := range envMap { actV, ok := act[k] if !ok { diff --git a/nomad/structs/diff_test.go b/nomad/structs/diff_test.go index c7c8d86d9..4ba261de3 100644 --- a/nomad/structs/diff_test.go +++ b/nomad/structs/diff_test.go @@ -3119,8 +3119,9 @@ func TestTaskDiff(t *testing.T) { New: &Task{ Services: []*Service{ { - Name: "foo", - PortLabel: "bar", + Name: "foo", + PortLabel: "bar", + AddressMode: "driver", }, }, }, @@ -3131,6 +3132,11 @@ func TestTaskDiff(t *testing.T) { Type: DiffTypeEdited, Name: "Service", Fields: []*FieldDiff{ + { + Type: DiffTypeAdded, + Name: "AddressMode", + New: "driver", + }, { Type: DiffTypeNone, Name: "Name", @@ -3410,6 +3416,12 @@ func TestTaskDiff(t *testing.T) { Type: DiffTypeEdited, Name: "Service", Fields: []*FieldDiff{ + { + Type: DiffTypeNone, + Name: "AddressMode", + Old: "", + New: "", + }, { Type: DiffTypeNone, Name: "Name", diff --git a/nomad/structs/structs.go b/nomad/structs/structs.go index 51cca9efa..dd99c83a7 100644 --- a/nomad/structs/structs.go +++ b/nomad/structs/structs.go @@ -2540,7 +2540,7 @@ func (s *Service) Validate() error { } switch s.AddressMode { - case AddressModeAuto, AddressModeHost, AddressModeDriver: + case "", AddressModeAuto, AddressModeHost, AddressModeDriver: // OK default: mErr.Errors = append(mErr.Errors, fmt.Errorf("service address_mode must be %q, %q, or %q; not %q", AddressModeAuto, AddressModeHost, AddressModeDriver, s.AddressMode))