From 4184c6cd6f97974576ed4f5db5ceee5c1e0beda2 Mon Sep 17 00:00:00 2001 From: Armin Barton Date: Thu, 10 Aug 2023 09:05:14 +0200 Subject: [PATCH] add proxy support Signed-off-by: Armin Barton --- apis/v1alpha1/types.go | 4 ++++ apis/v1beta1/types.go | 4 ++++ package/crds/helm.crossplane.io_providerconfigs.yaml | 6 ++++++ pkg/controller/release/release.go | 11 +++++++++++ 4 files changed, 25 insertions(+) diff --git a/apis/v1alpha1/types.go b/apis/v1alpha1/types.go index 919089b..c36d385 100644 --- a/apis/v1alpha1/types.go +++ b/apis/v1alpha1/types.go @@ -33,6 +33,10 @@ type ProviderConfigSpec struct { // example by configuring a bearer token source such as OAuth. // +optional Identity *Identity `json:"identity,omitempty"` + + // Proxy used to connect to the Kubernetes API. + // +optional + Proxy string `json:"proxy,omitempty"` } // ProviderCredentials required to authenticate. diff --git a/apis/v1beta1/types.go b/apis/v1beta1/types.go index 426e8ff..c558ce1 100644 --- a/apis/v1beta1/types.go +++ b/apis/v1beta1/types.go @@ -33,6 +33,10 @@ type ProviderConfigSpec struct { // example by configuring a bearer token source such as OAuth. // +optional Identity *Identity `json:"identity,omitempty"` + + // Proxy used to connect to the Kubernetes API. + // +optional + Proxy string `json:"proxy,omitempty"` } // ProviderCredentials required to authenticate. diff --git a/package/crds/helm.crossplane.io_providerconfigs.yaml b/package/crds/helm.crossplane.io_providerconfigs.yaml index aab90cc..4fd3b8c 100644 --- a/package/crds/helm.crossplane.io_providerconfigs.yaml +++ b/package/crds/helm.crossplane.io_providerconfigs.yaml @@ -163,6 +163,9 @@ spec: - source - type type: object + proxy: + description: Proxy used to connect to the Kubernetes API. + type: string required: - credentials type: object @@ -358,6 +361,9 @@ spec: - source - type type: object + proxy: + description: Proxy used to connect to the Kubernetes API. + type: string required: - credentials type: object diff --git a/pkg/controller/release/release.go b/pkg/controller/release/release.go index 05a9f2f..5c27879 100644 --- a/pkg/controller/release/release.go +++ b/pkg/controller/release/release.go @@ -18,6 +18,8 @@ package release import ( "context" + "net/http" + "net/url" "time" "github.com/crossplane/crossplane-runtime/pkg/logging" @@ -80,6 +82,7 @@ const ( errFailedToSetName = "failed to update chart spec with the name from URL" errFailedToSetVersion = "failed to update chart spec with the latest version" errFailedToCreateNamespace = "failed to create namespace for release" + errFailedToParseProxy = "failed to parse proxy url" ) // Setup adds a controller that reconciles Release managed resources. @@ -202,6 +205,14 @@ func (c *connector) Connect(ctx context.Context, mg resource.Managed) (managed.E } } + if proxy := p.Spec.Proxy; proxy != "" { + u, err := url.Parse(proxy) + if err != nil { + return nil, errors.Wrap(err, errFailedToParseProxy) + } + rc.Proxy = http.ProxyURL(u) + } + k, err := c.newKubeClientFn(rc) if err != nil { return nil, errors.Wrap(err, errNewKubernetesClient)