diff --git a/CHANGELOG.md b/CHANGELOG.md index d211a5fa2..c1822b266 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ BUG FIXES: * api: Fix TLS in logs and fs commands/APIs [GH-2290] * cli/plan: Fix diff alignment and remove no change DC output [GH-2465] * client: Fix panic when restarting non-running tasks [GH-2480] + * client: Fix env vars when multiple tasks and ports present [GH-2491] * client: Fix `user` attribute disregarding membership of non-main group [GH-2461] * client/vault: Stop Vault token renewal on task exit [GH-2495] diff --git a/client/driver/env/env.go b/client/driver/env/env.go index c96a724f4..845453b00 100644 --- a/client/driver/env/env.go +++ b/client/driver/env/env.go @@ -203,12 +203,12 @@ func (t *TaskEnvironment) Build() *TaskEnvironment { continue } for _, nw := range resources.Networks { - ports := make([]*structs.Port, 0, len(nw.ReservedPorts)+len(nw.DynamicPorts)) + ports := make([]structs.Port, 0, len(nw.ReservedPorts)+len(nw.DynamicPorts)) for _, port := range nw.ReservedPorts { - ports = append(ports, &port) + ports = append(ports, port) } for _, port := range nw.DynamicPorts { - ports = append(ports, &port) + ports = append(ports, port) } for _, p := range ports { key := fmt.Sprintf("%s%s_%s", AddrPrefix, taskName, p.Label) diff --git a/client/driver/env/env_test.go b/client/driver/env/env_test.go index dd8eddfb1..c520b0b9d 100644 --- a/client/driver/env/env_test.go +++ b/client/driver/env/env_test.go @@ -138,7 +138,24 @@ func TestEnvironment_ReplaceEnv_Mixed(t *testing.T) { func TestEnvironment_AsList(t *testing.T) { n := mock.Node() a := mock.Alloc() + a.Resources.Networks[0].ReservedPorts = append(a.Resources.Networks[0].ReservedPorts, + structs.Port{Label: "ssh", Value: 22}, + structs.Port{Label: "other", Value: 1234}, + ) a.TaskResources["web"].Networks[0].DynamicPorts[0].Value = 2000 + a.TaskResources["ssh"] = &structs.Resources{ + Networks: []*structs.NetworkResource{ + { + Device: "eth0", + IP: "192.168.0.100", + MBits: 50, + ReservedPorts: []structs.Port{ + {Label: "ssh", Value: 22}, + {Label: "other", Value: 1234}, + }, + }, + }, + } env := NewTaskEnvironment(n). SetNetworks(networks). SetPortMap(portMap). @@ -165,13 +182,23 @@ func TestEnvironment_AsList(t *testing.T) { "NOMAD_IP_web_main=192.168.0.100", "NOMAD_IP_web_http=192.168.0.100", "NOMAD_TASK_NAME=taskA", + "NOMAD_ADDR_ssh_other=192.168.0.100:1234", + "NOMAD_ADDR_ssh_ssh=192.168.0.100:22", + "NOMAD_IP_ssh_other=192.168.0.100", + "NOMAD_IP_ssh_ssh=192.168.0.100", + "NOMAD_PORT_ssh_other=1234", + "NOMAD_PORT_ssh_ssh=22", + fmt.Sprintf("NOMAD_ALLOC_ID=%s", a.ID), } - allocID := fmt.Sprintf("NOMAD_ALLOC_ID=%s", a.ID) - exp = append(exp, allocID) sort.Strings(act) sort.Strings(exp) - if !reflect.DeepEqual(act, exp) { - t.Fatalf("env.List() returned %v;\n want:\n%v", strings.Join(act, "\n"), strings.Join(exp, "\n")) + if len(act) != len(exp) { + t.Fatalf("wat: %d != %d", len(act), len(exp)) + } + for i := range act { + if act[i] != exp[i] { + t.Errorf("%d %q != %q", i, act[i], exp[i]) + } } }