From 30c840e88e31f62b173a07208e107ecc0bc74094 Mon Sep 17 00:00:00 2001 From: Andre Ilhicas Date: Fri, 26 Feb 2021 11:47:00 +0000 Subject: [PATCH] consul/connect: enable setting local_bind_address in upstream --- CHANGELOG.md | 2 + client/taskenv/services.go | 1 + client/taskenv/services_test.go | 85 +++++++++++++++++---------------- 3 files changed, 47 insertions(+), 41 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a2eeb989..8d3d153eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ BUG FIXES: * cli: Fixed a bug where non-int proxy port would panic CLI [[GH-10072](https://github.com/hashicorp/nomad/issues/10072)] * cli: Fixed a bug where `nomad operator debug` incorrectly parsed https Consul API URLs. [[GH-10082](https://github.com/hashicorp/nomad/pull/10082)] +IMPROVEMENTS: + * consul/connect: Enable setting `local_bind_address` field on connect upstreams [[GH-6248](https://github.com/hashicorp/nomad/issues/6248)] ## 1.0.4 (February 24, 2021) FEATURES: diff --git a/client/taskenv/services.go b/client/taskenv/services.go index e3de96a1d..f809a8775 100644 --- a/client/taskenv/services.go +++ b/client/taskenv/services.go @@ -147,6 +147,7 @@ func interpolateConnectSidecarService(taskEnv *TaskEnv, sidecar *structs.ConsulS for i := 0; i < len(sidecar.Proxy.Upstreams); i++ { sidecar.Proxy.Upstreams[i].Datacenter = taskEnv.ReplaceEnv(sidecar.Proxy.Upstreams[i].Datacenter) sidecar.Proxy.Upstreams[i].DestinationName = taskEnv.ReplaceEnv(sidecar.Proxy.Upstreams[i].DestinationName) + sidecar.Proxy.Upstreams[i].LocalBindAddress = taskEnv.ReplaceEnv(sidecar.Proxy.Upstreams[i].LocalBindAddress) } sidecar.Proxy.Config = interpolateMapStringInterface(taskEnv, sidecar.Proxy.Config) } diff --git a/client/taskenv/services_test.go b/client/taskenv/services_test.go index b376197b7..dc6a5593a 100644 --- a/client/taskenv/services_test.go +++ b/client/taskenv/services_test.go @@ -164,41 +164,42 @@ func TestInterpolate_interpolateConnect(t *testing.T) { t.Parallel() e := map[string]string{ - "tag1": "_tag1", - "port1": "12345", - "address1": "1.2.3.4", - "destination1": "_dest1", - "datacenter1": "_datacenter1", - "path1": "_path1", - "protocol1": "_protocol1", - "port2": "_port2", - "config1": "_config1", - "driver1": "_driver1", - "user1": "_user1", - "config2": "_config2", - "env1": "_env1", - "env2": "_env2", - "mode1": "_mode1", - "device1": "_device1", - "cidr1": "10.0.0.0/64", - "ip1": "1.1.1.1", - "server1": "10.0.0.1", - "search1": "10.0.0.2", - "option1": "10.0.0.3", - "port3": "_port3", - "network1": "_network1", - "port4": "_port4", - "network2": "_network2", - "resource1": "_resource1", - "meta1": "_meta1", - "meta2": "_meta2", - "signal1": "_signal1", - "bind1": "_bind1", - "address2": "10.0.0.4", - "config3": "_config3", - "protocol2": "_protocol2", - "service1": "_service1", - "host1": "_host1", + "tag1": "_tag1", + "port1": "12345", + "address1": "1.2.3.4", + "destination1": "_dest1", + "datacenter1": "_datacenter1", + "localbindaddress1": "127.0.0.2", + "path1": "_path1", + "protocol1": "_protocol1", + "port2": "_port2", + "config1": "_config1", + "driver1": "_driver1", + "user1": "_user1", + "config2": "_config2", + "env1": "_env1", + "env2": "_env2", + "mode1": "_mode1", + "device1": "_device1", + "cidr1": "10.0.0.0/64", + "ip1": "1.1.1.1", + "server1": "10.0.0.1", + "search1": "10.0.0.2", + "option1": "10.0.0.3", + "port3": "_port3", + "network1": "_network1", + "port4": "_port4", + "network2": "_network2", + "resource1": "_resource1", + "meta1": "_meta1", + "meta2": "_meta2", + "signal1": "_signal1", + "bind1": "_bind1", + "address2": "10.0.0.4", + "config3": "_config3", + "protocol2": "_protocol2", + "service1": "_service1", + "host1": "_host1", } env := NewTaskEnv(e, e, nil, nil, "", "") @@ -211,9 +212,10 @@ func TestInterpolate_interpolateConnect(t *testing.T) { LocalServiceAddress: "${address1}", LocalServicePort: 10000, Upstreams: []structs.ConsulUpstream{{ - DestinationName: "${destination1}", - Datacenter: "${datacenter1}", - LocalBindPort: 10001, + DestinationName: "${destination1}", + Datacenter: "${datacenter1}", + LocalBindPort: 10001, + LocalBindAddress: "${localbindaddress1}", }}, Expose: &structs.ConsulExposeConfig{ Paths: []structs.ConsulExposePath{{ @@ -318,9 +320,10 @@ func TestInterpolate_interpolateConnect(t *testing.T) { LocalServiceAddress: "1.2.3.4", LocalServicePort: 10000, Upstreams: []structs.ConsulUpstream{{ - DestinationName: "_dest1", - Datacenter: "_datacenter1", - LocalBindPort: 10001, + DestinationName: "_dest1", + Datacenter: "_datacenter1", + LocalBindPort: 10001, + LocalBindAddress: "127.0.0.2", }}, Expose: &structs.ConsulExposeConfig{ Paths: []structs.ConsulExposePath{{