func loadClientOrDie() *client.Client { config := client.Config{ Host: *host, } info, err := clientauth.LoadFromFile(*authConfig) if err != nil { glog.Fatalf("Error loading auth: %v", err) } // If the certificate directory is provided, set the cert paths to be there. if *certDir != "" { glog.Infof("Expecting certs in %v.", *certDir) info.CAFile = filepath.Join(*certDir, "ca.crt") info.CertFile = filepath.Join(*certDir, "kubecfg.crt") info.KeyFile = filepath.Join(*certDir, "kubecfg.key") } config, err = info.MergeWithConfig(config) if err != nil { glog.Fatalf("Error creating client") } c, err := client.New(&config) if err != nil { glog.Fatalf("Error creating client") } return c }
// TODO(jdef): hacked from kubelet/server/server.go // TODO(k8s): replace this with clientcmd func (s *SchedulerServer) createAPIServerClient() (*client.Client, error) { authInfo, err := clientauth.LoadFromFile(s.AuthPath) if err != nil { log.Warningf("Could not load kubernetes auth path: %v. Continuing with defaults.", err) } if authInfo == nil { // authInfo didn't load correctly - continue with defaults. authInfo = &clientauth.Info{} } clientConfig, err := authInfo.MergeWithConfig(client.Config{}) if err != nil { return nil, err } if len(s.APIServerList) < 1 { return nil, fmt.Errorf("no api servers specified") } // TODO: adapt Kube client to support LB over several servers if len(s.APIServerList) > 1 { log.Infof("Multiple api servers specified. Picking first one") } clientConfig.Host = s.APIServerList[0] c, err := client.New(&clientConfig) if err != nil { return nil, err } return c, nil }
func loadConfig() (*client.Config, error) { switch { case testContext.KubeConfig != "": fmt.Printf(">>> testContext.KubeConfig: %s\n", testContext.KubeConfig) c, err := clientcmd.LoadFromFile(testContext.KubeConfig) if err != nil { return nil, fmt.Errorf("error loading KubeConfig: %v", err.Error()) } if testContext.KubeContext != "" { fmt.Printf(">>> testContext.KubeContext: %s\n", testContext.KubeContext) c.CurrentContext = testContext.KubeContext } return clientcmd.NewDefaultClientConfig(*c, &clientcmd.ConfigOverrides{}).ClientConfig() case testContext.AuthConfig != "": fmt.Printf(">>> testContext.AuthConfig: %s\n", testContext.AuthConfig) config := &client.Config{ Host: testContext.Host, } info, err := clientauth.LoadFromFile(testContext.AuthConfig) if err != nil { return nil, fmt.Errorf("error loading AuthConfig: %v", err.Error()) } // If the certificate directory is provided, set the cert paths to be there. if testContext.CertDir != "" { Logf("Expecting certs in %v.", testContext.CertDir) info.CAFile = filepath.Join(testContext.CertDir, "ca.crt") info.CertFile = filepath.Join(testContext.CertDir, "kubecfg.crt") info.KeyFile = filepath.Join(testContext.CertDir, "kubecfg.key") } mergedConfig, err := info.MergeWithConfig(*config) return &mergedConfig, err default: return nil, fmt.Errorf("either KubeConfig or AuthConfig must be specified to load client config") } }
func newKubeSource(pollDuration time.Duration) (*kubeSource, error) { if len(*argMaster) == 0 { return nil, fmt.Errorf("kubernetes_master flag not specified") } if !(strings.HasPrefix(*argMaster, "http://") || strings.HasPrefix(*argMaster, "https://")) { *argMaster = "http://" + *argMaster } kubeConfig := kube_client.Config{ Host: *argMaster, Version: kubeClientVersion, Insecure: *argMasterInsecure, } if len(*argClientAuthFile) > 0 { clientAuth, err := clientauth.LoadFromFile(*argClientAuthFile) if err != nil { return nil, err } kubeConfig, err = clientAuth.MergeWithConfig(kubeConfig) if err != nil { return nil, err } } kubeClient := kube_client.NewOrDie(&kubeConfig) nodesApi, err := nodes.NewKubeNodes(kubeClient) if err != nil { return nil, err } glog.Infof("Using Kubernetes client with master %q and version %s\n", *argMaster, kubeClientVersion) glog.Infof("Using kubelet port %q", *argKubeletPort) eventsSource := NewEventsSource(kubeClient) return &kubeSource{ lastQuery: time.Now(), pollDuration: pollDuration, kubeletPort: *argKubeletPort, kubeletApi: datasource.NewKubelet(), nodesApi: nodesApi, podsApi: newPodsApi(kubeClient), podErrors: make(map[podInstance]int), eventsApi: eventsSource, }, nil }
// LoadAuth parses an AuthInfo object from a file path. It prompts user and creates file if it doesn't exist. func (a *PromptingAuthLoader) LoadAuth(path string) (*clientauth.Info, error) { var auth clientauth.Info // Prompt for user/pass and write a file if none exists. if _, err := os.Stat(path); os.IsNotExist(err) { auth = *a.Prompt() data, err := json.Marshal(auth) if err != nil { return &auth, err } err = ioutil.WriteFile(path, data, 0600) return &auth, err } authPtr, err := clientauth.LoadFromFile(path) if err != nil { return nil, err } return authPtr, nil }
func loadClientOrDie() *client.Client { config := client.Config{ Host: *host, } auth, err := clientauth.LoadFromFile(*authConfig) if err != nil { glog.Fatalf("Error loading auth: %v", err) } config, err = auth.MergeWithConfig(config) if err != nil { glog.Fatalf("Error creating client") } c, err := client.New(&config) if err != nil { glog.Fatalf("Error creating client") } return c }
// LoadClientAuthInfoOrPrompt parses a clientauth.Info object from a file path. It prompts user and creates file if it doesn't exist. // Oddly, it returns a clientauth.Info even if there is an error. func LoadClientAuthInfoOrPrompt(path string, r io.Reader) (*clientauth.Info, error) { var auth clientauth.Info // Prompt for user/pass and write a file if none exists. if _, err := os.Stat(path); os.IsNotExist(err) { auth.User = promptForString("Username", r) auth.Password = promptForString("Password", r) data, err := json.Marshal(auth) if err != nil { return &auth, err } err = ioutil.WriteFile(path, data, 0600) return &auth, err } authPtr, err := clientauth.LoadFromFile(path) if err != nil { return nil, err } return authPtr, nil }
func TestLoadFromFile(t *testing.T) { loadAuthInfoTests := []struct { authData string authInfo *clientauth.Info expectErr bool }{ { `{"user": "******", "password": "******"}`, &clientauth.Info{User: "******", Password: "******"}, false, }, { "", nil, true, }, } for _, loadAuthInfoTest := range loadAuthInfoTests { tt := loadAuthInfoTest aifile, err := ioutil.TempFile("", "testAuthInfo") if err != nil { t.Errorf("Unexpected error: %v", err) } if tt.authData != "missing" { defer os.Remove(aifile.Name()) defer aifile.Close() _, err = aifile.WriteString(tt.authData) if err != nil { t.Errorf("Unexpected error: %v", err) } } else { aifile.Close() os.Remove(aifile.Name()) } authInfo, err := clientauth.LoadFromFile(aifile.Name()) gotErr := err != nil if gotErr != tt.expectErr { t.Errorf("expected errorness: %v, actual errorness: %v", tt.expectErr, gotErr) } if !reflect.DeepEqual(authInfo, tt.authInfo) { t.Errorf("Expected %v, got %v", tt.authInfo, authInfo) } } }
func getApiserverClient() (*client.Client, error) { authInfo, err := clientauth.LoadFromFile(*authPath) if err != nil { return nil, err } clientConfig, err := authInfo.MergeWithConfig(client.Config{}) if err != nil { return nil, err } // TODO: adapt Kube client to support LB over several servers if len(apiServerList) > 1 { glog.Infof("Mulitple api servers specified. Picking first one") } clientConfig.Host = apiServerList[0] if c, err := client.New(&clientConfig); err != nil { return nil, err } else { return c, nil } }
func (s *KubeletServer) authPathClientConfig(useDefaults bool) (*client.Config, error) { authInfo, err := clientauth.LoadFromFile(s.AuthPath.Value()) if err != nil && !useDefaults { return nil, err } // If loading the default auth path, for backwards compatibility keep going // with the default auth. if err != nil { glog.Warningf("Could not load kubernetes auth path %s: %v. Continuing with defaults.", s.AuthPath, err) } if authInfo == nil { // authInfo didn't load correctly - continue with defaults. authInfo = &clientauth.Info{} } authConfig, err := authInfo.MergeWithConfig(client.Config{}) if err != nil { return nil, err } authConfig.Host = s.APIServerList[0] return &authConfig, nil }
// TODO: replace this with clientcmd func GetAPIServerClient(authPath string, apiServerList util.StringList) (*client.Client, error) { authInfo, err := clientauth.LoadFromFile(authPath) if err != nil { return nil, err } clientConfig, err := authInfo.MergeWithConfig(client.Config{}) if err != nil { return nil, err } if len(apiServerList) < 1 { return nil, fmt.Errorf("no api servers specified.") } // TODO: adapt Kube client to support LB over several servers if len(apiServerList) > 1 { glog.Infof("Multiple api servers specified. Picking first one") } clientConfig.Host = apiServerList[0] c, err := client.New(&clientConfig) if err != nil { return nil, err } return c, nil }
// LoadAuth for defaultAuthLoader simply delegates to clientauth.LoadFromFile func (*defaultAuthLoader) LoadAuth(path string) (*clientauth.Info, error) { return clientauth.LoadFromFile(path) }