// Clients returns an OpenShift and Kubernetes client with the credentials of the named service account // TODO: change return types to client.Interface/kclient.Interface to allow auto-reloading credentials func Clients(config restclient.Config, tokenRetriever TokenRetriever, namespace, name string) (*restclient.Config, *client.Client, *kclient.Client, error) { // Clear existing auth info config.Username = "" config.Password = "" config.CertFile = "" config.CertData = []byte{} config.KeyFile = "" config.KeyData = []byte{} config.BearerToken = "" if len(config.UserAgent) > 0 { config.UserAgent += " " } config.UserAgent += fmt.Sprintf("system:serviceaccount:%s:%s", namespace, name) // For now, just initialize the token once // TODO: refetch the token if the client encounters 401 errors token, err := tokenRetriever.GetToken(namespace, name) if err != nil { return nil, nil, nil, err } config.BearerToken = token c, err := client.New(&config) if err != nil { return nil, nil, nil, err } kc, err := kclient.New(&config) if err != nil { return nil, nil, nil, err } return &config, c, kc, nil }
// Clients returns an OpenShift and Kubernetes client with the credentials of the named service account // TODO: change return types to client.Interface/kclient.Interface to allow auto-reloading credentials func Clients(config restclient.Config, tokenRetriever TokenRetriever, namespace, name string) (*restclient.Config, *client.Client, *kclient.Client, error) { // Clear existing auth info config.Username = "" config.Password = "" config.CertFile = "" config.CertData = []byte{} config.KeyFile = "" config.KeyData = []byte{} config.BearerToken = "" kubeUserAgent := "" openshiftUserAgent := "" // they specified, don't mess with it if len(config.UserAgent) > 0 { kubeUserAgent = config.UserAgent openshiftUserAgent = config.UserAgent } else { kubeUserAgent = fmt.Sprintf("%s system:serviceaccount:%s:%s", restclient.DefaultKubernetesUserAgent(), namespace, name) openshiftUserAgent = fmt.Sprintf("%s system:serviceaccount:%s:%s", client.DefaultOpenShiftUserAgent(), namespace, name) } // For now, just initialize the token once // TODO: refetch the token if the client encounters 401 errors token, err := tokenRetriever.GetToken(namespace, name) if err != nil { return nil, nil, nil, err } config.BearerToken = token config.UserAgent = openshiftUserAgent c, err := client.New(&config) if err != nil { return nil, nil, nil, err } config.UserAgent = kubeUserAgent kc, err := kclient.New(&config) if err != nil { return nil, nil, nil, err } return &config, c, kc, nil }