From 5a0705564526bbe5d67a631d46dd632821ae68be Mon Sep 17 00:00:00 2001 From: Vibhav Bobade Date: Mon, 26 Aug 2019 03:12:48 +0530 Subject: [PATCH] Add IsReachable to /pkg/kube/client to see if connected to the internet Signed-off-by: Vibhav Bobade --- pkg/kube/client.go | 10 ++++++++++ pkg/kube/fake/printer.go | 5 +++++ pkg/kube/interface.go | 3 +++ 3 files changed, 18 insertions(+) diff --git a/pkg/kube/client.go b/pkg/kube/client.go index dbe5e2dae..dc91ff9f8 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -63,6 +63,16 @@ func New(getter genericclioptions.RESTClientGetter) *Client { var nopLogger = func(_ string, _ ...interface{}) {} +// Test connectivity to the Client +func (c *Client) IsReachable() error { + client, _ := c.Factory.KubernetesClientSet() + _, err := client.ServerVersion() + if err != nil { + return errors.New("Kubernetes cluster unreachable") + } + return nil +} + // Create creates Kubernetes resources specified in the resource list. func (c *Client) Create(resources ResourceList) (*Result, error) { c.Log("creating %d resource(s)", len(resources)) diff --git a/pkg/kube/fake/printer.go b/pkg/kube/fake/printer.go index 3d7a81d14..21c67a63c 100644 --- a/pkg/kube/fake/printer.go +++ b/pkg/kube/fake/printer.go @@ -33,6 +33,11 @@ type PrintingKubeClient struct { Out io.Writer } +// isReachable checks if the cluster is reachable +func (p *PrintingKubeClient) IsReachable() error { + return nil +} + // Create prints the values of what would be created with a real KubeClient. func (p *PrintingKubeClient) Create(resources kube.ResourceList) (*kube.Result, error) { _, err := io.Copy(p.Out, bufferize(resources)) diff --git a/pkg/kube/interface.go b/pkg/kube/interface.go index 73dd42835..fc4189cc9 100644 --- a/pkg/kube/interface.go +++ b/pkg/kube/interface.go @@ -56,6 +56,9 @@ type Interface interface { // WaitAndGetCompletedPodPhase waits up to a timeout until a pod enters a completed phase // and returns said phase (PodSucceeded or PodFailed qualify). WaitAndGetCompletedPodPhase(name string, timeout time.Duration) (v1.PodPhase, error) + + // isReachable checks whether the client is able to connect to the cluster + IsReachable() error } var _ Interface = (*Client)(nil)