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 }