github.com/wtfutil/wtf@v0.43.0/modules/kubernetes/client.go (about)

     1  package kubernetes
     2  
     3  import (
     4  	"k8s.io/client-go/kubernetes"
     5  	// Includes authentication modules for various Kubernetes providers
     6  	_ "k8s.io/client-go/plugin/pkg/client/auth"
     7  	"k8s.io/client-go/tools/clientcmd"
     8  )
     9  
    10  type clientInstance struct {
    11  	Client kubernetes.Interface
    12  }
    13  
    14  // getInstance returns a Kubernetes interface for a clientset
    15  func (widget *Widget) getInstance() (*clientInstance, error) {
    16  	var err error
    17  
    18  	widget.clientOnce.Do(func() {
    19  		widget.client = &clientInstance{}
    20  		widget.client.Client, err = widget.getKubeClient()
    21  	})
    22  
    23  	return widget.client, err
    24  }
    25  
    26  // getKubeClient returns a kubernetes clientset for the kubeconfig provided
    27  func (widget *Widget) getKubeClient() (kubernetes.Interface, error) {
    28  	var overrides *clientcmd.ConfigOverrides
    29  	if widget.context != "" {
    30  		overrides = &clientcmd.ConfigOverrides{
    31  			CurrentContext: widget.context,
    32  		}
    33  	}
    34  
    35  	config, err := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
    36  		&clientcmd.ClientConfigLoadingRules{ExplicitPath: widget.kubeconfig},
    37  		overrides).ClientConfig()
    38  
    39  	if err != nil {
    40  		return nil, err
    41  	}
    42  
    43  	clientset, err := kubernetes.NewForConfig(config)
    44  	if err != nil {
    45  		return nil, err
    46  	}
    47  	return clientset, nil
    48  }