49 lines
1.3 KiB
Go
49 lines
1.3 KiB
Go
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)
|
|
}
|