diff --git a/modules/kubernetes/client.go b/modules/kubernetes/client.go index 78c64d47..db7c1ea0 100644 --- a/modules/kubernetes/client.go +++ b/modules/kubernetes/client.go @@ -10,6 +10,7 @@ import ( ) var kubeClient *clientInstance +var kubeError error var clientOnce sync.Once type clientInstance struct { @@ -17,26 +18,30 @@ type clientInstance struct { } // getInstance returns a Kubernetes interface for a clientset -func (widget *Widget) getInstance() *clientInstance { +func (widget *Widget) getInstance() (*clientInstance, error) { clientOnce.Do(func() { if kubeClient == nil { + client, err := widget.getKubeClient() + if err != nil { + kubeError = err + } kubeClient = &clientInstance{ - Client: widget.getKubeClient(), + Client: client, } } }) - return kubeClient + return kubeClient, kubeError } // getKubeClient returns a kubernetes clientset for the kubeconfig provided -func (widget *Widget) getKubeClient() kubernetes.Interface { +func (widget *Widget) getKubeClient() (kubernetes.Interface, error) { config, err := clientcmd.BuildConfigFromFlags("", widget.kubeconfig) if err != nil { - panic(err) + return nil, err } clientset, err := kubernetes.NewForConfig(config) if err != nil { - panic(err) + return nil, err } - return clientset + return clientset, nil } diff --git a/modules/kubernetes/widget.go b/modules/kubernetes/widget.go index a52865e3..2120e89d 100644 --- a/modules/kubernetes/widget.go +++ b/modules/kubernetes/widget.go @@ -41,7 +41,12 @@ func NewWidget(app *tview.Application, settings *Settings) *Widget { // Refresh executes the command and updates the view with the results func (widget *Widget) Refresh() { title := widget.generateTitle() - client := widget.getInstance() + client, err := widget.getInstance() + + if err != nil { + widget.Redraw(func() (string, string, bool) { return title, err.Error(), true }) + return + } var content string