// setupKubeconfig reads config from disk, adds the minikube settings, and writes it back. // activeContext is true when minikube is the CurrentContext // If no CurrentContext is set, the given name will be used. func setupKubeconfig(server, certAuth string) error { configFile := constants.KubeconfigPath // read existing config or create new if does not exist config, err := kubeconfig.ReadConfigOrNew(configFile) if err != nil { return err } currentContextName := config.CurrentContext currentContext := config.Contexts[currentContextName] clusterName, err := ocfg.GetClusterNicknameFromURL(server) if err != nil { return err } cluster := cfg.NewCluster() cluster.Server = server cluster.CertificateAuthorityData = []byte(certAuth) config.Clusters[clusterName] = cluster // user userName := "******" + clusterName user := cfg.NewAuthInfo() if currentContext != nil && currentContext.AuthInfo == userName { currentUser := config.AuthInfos[userName] if currentUser != nil { user.Token = config.AuthInfos[userName].Token } } config.AuthInfos[userName] = user // context context := cfg.NewContext() context.Cluster = clusterName context.AuthInfo = userName context.Namespace = api.NamespaceDefault contextName := ocfg.GetContextNickname(api.NamespaceDefault, clusterName, userName) if currentContext != nil && currentContext.Cluster == clusterName && currentContext.AuthInfo == userName { contextName = currentContextName context.Namespace = currentContext.Namespace } config.Contexts[contextName] = context config.CurrentContext = contextName // write back to disk if err := kubeconfig.WriteConfig(config, configFile); err != nil { return err } fmt.Println("oc is now configured to use the cluster.") if len(user.Token) == 0 { fmt.Println("Run this command to use the cluster: ") fmt.Println("oc login --username=admin --password=admin") } return nil }
func (o CreateKubeConfigOptions) CreateKubeConfig() (*clientcmdapi.Config, error) { glog.V(4).Infof("creating a .kubeconfig with: %#v", o) // read all the referenced filenames caData, err := ioutil.ReadFile(o.APIServerCAFile) if err != nil { return nil, err } certData, err := ioutil.ReadFile(o.CertFile) if err != nil { return nil, err } keyData, err := ioutil.ReadFile(o.KeyFile) if err != nil { return nil, err } certConfig, err := crypto.GetTLSCertificateConfig(o.CertFile, o.KeyFile) if err != nil { return nil, err } // determine all the nicknames clusterNick, err := cliconfig.GetClusterNicknameFromURL(o.APIServerURL) if err != nil { return nil, err } userNick, err := cliconfig.GetUserNicknameFromCert(clusterNick, certConfig.Certs...) if err != nil { return nil, err } contextNick, err := cliconfig.GetContextNickname(o.ContextNamespace, clusterNick, userNick) if err != nil { return nil, err } credentials := make(map[string]clientcmdapi.AuthInfo) credentials[userNick] = clientcmdapi.AuthInfo{ ClientCertificateData: certData, ClientKeyData: keyData, } clusters := make(map[string]clientcmdapi.Cluster) clusters[clusterNick] = clientcmdapi.Cluster{ Server: o.APIServerURL, CertificateAuthorityData: caData, } contexts := make(map[string]clientcmdapi.Context) contexts[contextNick] = clientcmdapi.Context{Cluster: clusterNick, AuthInfo: userNick, Namespace: o.ContextNamespace} createPublic := (len(o.PublicAPIServerURL) > 0) && o.APIServerURL != o.PublicAPIServerURL if createPublic { publicClusterNick, err := cliconfig.GetClusterNicknameFromURL(o.PublicAPIServerURL) if err != nil { return nil, err } publicContextNick, err := cliconfig.GetContextNickname(o.ContextNamespace, publicClusterNick, userNick) if err != nil { return nil, err } clusters[publicClusterNick] = clientcmdapi.Cluster{ Server: o.PublicAPIServerURL, CertificateAuthorityData: caData, } contexts[publicContextNick] = clientcmdapi.Context{Cluster: publicClusterNick, AuthInfo: userNick, Namespace: o.ContextNamespace} } kubeConfig := &clientcmdapi.Config{ Clusters: clusters, AuthInfos: credentials, Contexts: contexts, CurrentContext: contextNick, } glog.V(3).Infof("Generating '%s' API client config as %s\n", userNick, o.KubeConfigFile) // Ensure the parent dir exists if err := os.MkdirAll(filepath.Dir(o.KubeConfigFile), os.FileMode(0755)); err != nil { return nil, err } if err := clientcmd.WriteToFile(*kubeConfig, o.KubeConfigFile); err != nil { return nil, err } return kubeConfig, nil }