package cluster import ( "io/ioutil" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/tools/clientcmd/api" ) func buildKubeconfigFromRestConfig(config *rest.Config) ([]byte, error) { apiConfig := api.NewConfig() apiCluster := &api.Cluster{ Server: config.Host, CertificateAuthorityData: config.CAData, } // generated kubeconfig will be used by cluster federation, CAFile is not // accepted by kubefed, so we need read CAFile if len(apiCluster.CertificateAuthorityData) == 0 && len(config.CAFile) != 0 { caData, err := ioutil.ReadFile(config.CAFile) if err != nil { return nil, err } apiCluster.CertificateAuthorityData = caData } apiConfig.Clusters["kubernetes"] = apiCluster apiConfig.AuthInfos["kubernetes-admin"] = &api.AuthInfo{ ClientCertificateData: config.CertData, ClientKeyData: config.KeyData, Token: config.BearerToken, TokenFile: config.BearerTokenFile, Username: config.Username, Password: config.Password, } apiConfig.Contexts["kubernetes-admin@kubernetes"] = &api.Context{ Cluster: "kubernetes", AuthInfo: "kubernetes-admin", } apiConfig.CurrentContext = "kubernetes-admin@kubernetes" return clientcmd.Write(*apiConfig) }