github.com/itscaro/cli@v0.0.0-20190705081621-c9db0fe93829/cli/context/kubernetes/save.go (about)

     1  package kubernetes
     2  
     3  import (
     4  	"io/ioutil"
     5  
     6  	"github.com/docker/cli/cli/context"
     7  	"k8s.io/client-go/tools/clientcmd"
     8  	clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
     9  )
    10  
    11  // FromKubeConfig creates a Kubernetes endpoint from a Kubeconfig file
    12  func FromKubeConfig(kubeconfig, kubeContext, namespaceOverride string) (Endpoint, error) {
    13  	cfg := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
    14  		&clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeconfig},
    15  		&clientcmd.ConfigOverrides{CurrentContext: kubeContext, Context: clientcmdapi.Context{Namespace: namespaceOverride}})
    16  	ns, _, err := cfg.Namespace()
    17  	if err != nil {
    18  		return Endpoint{}, err
    19  	}
    20  	clientcfg, err := cfg.ClientConfig()
    21  	if err != nil {
    22  		return Endpoint{}, err
    23  	}
    24  	var ca, key, cert []byte
    25  	if ca, err = readFileOrDefault(clientcfg.CAFile, clientcfg.CAData); err != nil {
    26  		return Endpoint{}, err
    27  	}
    28  	if key, err = readFileOrDefault(clientcfg.KeyFile, clientcfg.KeyData); err != nil {
    29  		return Endpoint{}, err
    30  	}
    31  	if cert, err = readFileOrDefault(clientcfg.CertFile, clientcfg.CertData); err != nil {
    32  		return Endpoint{}, err
    33  	}
    34  	var tlsData *context.TLSData
    35  	if ca != nil || cert != nil || key != nil {
    36  		tlsData = &context.TLSData{
    37  			CA:   ca,
    38  			Cert: cert,
    39  			Key:  key,
    40  		}
    41  	}
    42  	return Endpoint{
    43  		EndpointMeta: EndpointMeta{
    44  			EndpointMetaBase: context.EndpointMetaBase{
    45  				Host:          clientcfg.Host,
    46  				SkipTLSVerify: clientcfg.Insecure,
    47  			},
    48  			DefaultNamespace: ns,
    49  			AuthProvider:     clientcfg.AuthProvider,
    50  			Exec:             clientcfg.ExecProvider,
    51  		},
    52  		TLSData: tlsData,
    53  	}, nil
    54  }
    55  
    56  func readFileOrDefault(path string, defaultValue []byte) ([]byte, error) {
    57  	if path != "" {
    58  		return ioutil.ReadFile(path)
    59  	}
    60  	return defaultValue, nil
    61  }