From 9a53b833345e5f6dab6afdd549c5376d45a713af Mon Sep 17 00:00:00 2001 From: Kelsey Rose Date: Tue, 10 Sep 2019 17:39:01 -0700 Subject: [PATCH] Add option to disable proxy for kubernetes forwards --- pkg/config/model.go | 3 ++- pkg/config/model_test.go | 27 ++++++++++++++++++++++++++- pkg/forwarder/forwarder.go | 6 +++++- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/pkg/config/model.go b/pkg/config/model.go index cb73f67d..dfb9c90c 100644 --- a/pkg/config/model.go +++ b/pkg/config/model.go @@ -94,7 +94,7 @@ type Forward struct { // IsProxified indicates if the current forward rule will use the proxy func (f *Forward) IsProxified() bool { if value, ok := ProxifiedForwarders[f.Type]; ok && value { - return true + return !f.Values.DisableProxy } return false @@ -107,6 +107,7 @@ type ForwardValues struct { Labels map[string]string `yaml:"labels"` Hostname string `yaml:"hostname"` ProxyHostname string `yaml:"proxy_hostname"` + DisableProxy bool `yaml:"disable_proxy"` Ports []string `yaml:"ports"` Remote string `yaml:"remote"` Args []string `yaml:"args"` diff --git a/pkg/config/model_test.go b/pkg/config/model_test.go index 0747783f..3f763dc3 100644 --- a/pkg/config/model_test.go +++ b/pkg/config/model_test.go @@ -36,7 +36,7 @@ func TestApplicationGetPathWhenGoPath(t *testing.T) { assert.Equal(t, "/tmp/gopath/src/fake.github.com/user/repository", path) } -func TestForwardIsProxified(t *testing.T) { +func TestForwardTypeIsProxified(t *testing.T) { // Given testCases := []struct { forwardType string @@ -57,3 +57,28 @@ func TestForwardIsProxified(t *testing.T) { assert.Equal(t, testCase.expected, forward.IsProxified()) } } + +func TestForwardConfigIsProxified(t *testing.T) { + // Given + testCases := []struct { + forwardType string + disableProxy bool + expected bool + }{ + {forwardType: ForwarderKubernetes, disableProxy: false, expected: true}, + {forwardType: ForwarderKubernetes, disableProxy: true, expected: false}, + } + + // When - Then + for _, testCase := range testCases { + values := ForwardValues{ + DisableProxy: testCase.disableProxy, + } + forward := Forward{ + Type: testCase.forwardType, + Values: values, + } + + assert.Equal(t, testCase.expected, forward.IsProxified()) + } +} diff --git a/pkg/forwarder/forwarder.go b/pkg/forwarder/forwarder.go index b2627277..a1d19625 100644 --- a/pkg/forwarder/forwarder.go +++ b/pkg/forwarder/forwarder.go @@ -138,7 +138,11 @@ func (f *Forwarder) forward(forward *config.Forward, wg *sync.WaitGroup) { switch forward.Type { // Kubernetes local port-forward: give proxy port as local port and forwarded port, use proxy case config.ForwarderKubernetes: - forwarder, err := kubernetes.NewForwarder(f.view, forward.Type, forward.Name, values.Context, values.Namespace, proxifiedPorts, values.Labels) + forwardPorts := values.Ports + if forward.IsProxified() { + forwardPorts = proxifiedPorts + } + forwarder, err := kubernetes.NewForwarder(f.view, forward.Type, forward.Name, values.Context, values.Namespace, forwardPorts, values.Labels) if err != nil { f.view.Writef("❌ %s\n", err.Error()) return