github.com/ali-iotechsys/cli@v20.10.0+incompatible/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 var usernamePassword *UsernamePassword 43 if clientcfg.Username != "" || clientcfg.Password != "" { 44 usernamePassword = &UsernamePassword{ 45 Username: clientcfg.Username, 46 Password: clientcfg.Password, 47 } 48 } 49 return Endpoint{ 50 EndpointMeta: EndpointMeta{ 51 EndpointMetaBase: context.EndpointMetaBase{ 52 Host: clientcfg.Host, 53 SkipTLSVerify: clientcfg.Insecure, 54 }, 55 DefaultNamespace: ns, 56 AuthProvider: clientcfg.AuthProvider, 57 Exec: clientcfg.ExecProvider, 58 UsernamePassword: usernamePassword, 59 }, 60 TLSData: tlsData, 61 }, nil 62 } 63 64 func readFileOrDefault(path string, defaultValue []byte) ([]byte, error) { 65 if path != "" { 66 return ioutil.ReadFile(path) 67 } 68 return defaultValue, nil 69 }