From 10a29d1662110fb1f1f922d8fed796e69823e5a7 Mon Sep 17 00:00:00 2001 From: Janario Oliveira Date: Tue, 6 Oct 2020 22:33:06 +0200 Subject: [PATCH 1/2] Reuse kube-client Signed-off-by: Janario Oliveira --- pkg/kube/client.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/pkg/kube/client.go b/pkg/kube/client.go index 83bebf51f..2af8e3225 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -21,6 +21,7 @@ import ( "encoding/json" "fmt" "io" + "k8s.io/client-go/kubernetes" "strings" "sync" "time" @@ -60,6 +61,8 @@ type Client struct { Log func(string, ...interface{}) // Namespace allows to bypass the kubeconfig file for the choice of the namespace Namespace string + + kubeClient *kubernetes.Clientset } var addToScheme sync.Once @@ -87,9 +90,19 @@ func New(getter genericclioptions.RESTClientGetter) *Client { var nopLogger = func(_ string, _ ...interface{}) {} +// getKubeClient get or create a new KubernetesClientSet +func (c *Client) getKubeClient() (*kubernetes.Clientset, error) { + var err error + if c.kubeClient == nil { + c.kubeClient, err = c.Factory.KubernetesClientSet() + } + + return c.kubeClient, err +} + // IsReachable tests connectivity to the cluster func (c *Client) IsReachable() error { - client, err := c.Factory.KubernetesClientSet() + client, err := c.getKubeClient() if err == genericclioptions.ErrEmptyConfig { // re-replace kubernetes ErrEmptyConfig error with a friendy error // moar workarounds for Kubernetes API breaking. @@ -115,7 +128,7 @@ func (c *Client) Create(resources ResourceList) (*Result, error) { // Wait up to the given timeout for the specified resources to be ready func (c *Client) Wait(resources ResourceList, timeout time.Duration) error { - cs, err := c.Factory.KubernetesClientSet() + cs, err := c.getKubeClient() if err != nil { return err } @@ -572,7 +585,7 @@ func scrubValidationError(err error) error { // WaitAndGetCompletedPodPhase waits up to a timeout until a pod enters a completed phase // and returns said phase (PodSucceeded or PodFailed qualify). func (c *Client) WaitAndGetCompletedPodPhase(name string, timeout time.Duration) (v1.PodPhase, error) { - client, err := c.Factory.KubernetesClientSet() + client, err := c.getKubeClient() if err != nil { return v1.PodUnknown, err } From cf3870a57fc56de0d9569fcbbf6f7b9e978e4cb9 Mon Sep 17 00:00:00 2001 From: Janario Oliveira Date: Tue, 6 Oct 2020 22:38:26 +0200 Subject: [PATCH 2/2] Adjusted import Signed-off-by: Janario Oliveira --- pkg/kube/client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/kube/client.go b/pkg/kube/client.go index 2af8e3225..6fd3336c9 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -21,7 +21,6 @@ import ( "encoding/json" "fmt" "io" - "k8s.io/client-go/kubernetes" "strings" "sync" "time" @@ -44,6 +43,7 @@ import ( "k8s.io/apimachinery/pkg/watch" "k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/resource" + "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" cachetools "k8s.io/client-go/tools/cache" watchtools "k8s.io/client-go/tools/watch"