// SetOpenShiftDefaults sets the default settings on the passed // client configuration func SetOpenShiftDefaults(config *restclient.Config) error { if len(config.UserAgent) == 0 { config.UserAgent = DefaultOpenShiftUserAgent() } if config.GroupVersion == nil { // Clients default to the preferred code API version groupVersionCopy := latest.Version config.GroupVersion = &groupVersionCopy } if config.APIPath == "" { config.APIPath = "/oapi" } // groupMeta, err := registered.Group(config.GroupVersion.Group) // if err != nil { // return fmt.Errorf("API group %q is not recognized (valid values: %v)", config.GroupVersion.Group, latest.Versions) // } if config.NegotiatedSerializer == nil { config.NegotiatedSerializer = kapi.Codecs } if config.Codec == nil { config.Codec = kapi.Codecs.LegacyCodec(*config.GroupVersion) // config.Codec = kapi.Codecs.CodecForVersions(groupMeta.Codec, []unversioned.GroupVersion{*config.GroupVersion}, groupMeta.GroupVersions) } return nil }
// NewClient returns a new client based on the passed in config. The // codec is ignored, as the dynamic client uses it's own codec. func NewClient(conf *restclient.Config) (*Client, error) { // avoid changing the original config confCopy := *conf conf = &confCopy conf.Codec = dynamicCodec{} if conf.APIPath == "" { conf.APIPath = "/api" } if len(conf.UserAgent) == 0 { conf.UserAgent = restclient.DefaultKubernetesUserAgent() } if conf.QPS == 0.0 { conf.QPS = 5.0 } if conf.Burst == 0 { conf.Burst = 10 } cl, err := restclient.RESTClientFor(conf) if err != nil { return nil, err } return &Client{cl: cl}, nil }
// NewClient returns a new client based on the passed in config. The // codec is ignored, as the dynamic client uses it's own codec. func NewClient(conf *restclient.Config) (*Client, error) { // avoid changing the original config confCopy := *conf conf = &confCopy // TODO: it's questionable that this should be using anything other than unstructured schema and JSON conf.ContentType = runtime.ContentTypeJSON conf.AcceptContentTypes = runtime.ContentTypeJSON if conf.APIPath == "" { conf.APIPath = "/api" } if len(conf.UserAgent) == 0 { conf.UserAgent = restclient.DefaultKubernetesUserAgent() } if conf.NegotiatedSerializer == nil { streamingInfo, _ := api.Codecs.StreamingSerializerForMediaType("application/json;stream=watch", nil) conf.NegotiatedSerializer = serializer.NegotiatedSerializerWrapper(runtime.SerializerInfo{Serializer: dynamicCodec{}}, streamingInfo) } cl, err := restclient.RESTClientFor(conf) if err != nil { return nil, err } return &Client{cl: cl}, nil }
func BuildClusterConfig(c *federation_v1beta1.Cluster) (*restclient.Config, error) { var serverAddress string var clusterConfig *restclient.Config hostIP, err := utilnet.ChooseHostInterface() if err != nil { return nil, err } for _, item := range c.Spec.ServerAddressByClientCIDRs { _, cidrnet, err := net.ParseCIDR(item.ClientCIDR) if err != nil { return nil, err } myaddr := net.ParseIP(hostIP.String()) if cidrnet.Contains(myaddr) == true { serverAddress = item.ServerAddress break } } if serverAddress != "" { if c.Spec.SecretRef == nil { glog.Infof("didn't find secretRef for cluster %s. Trying insecure access", c.Name) clusterConfig, err = clientcmd.BuildConfigFromFlags(serverAddress, "") } else { kubeconfigGetter := KubeconfigGetterForCluster(c) clusterConfig, err = clientcmd.BuildConfigFromKubeconfigGetter(serverAddress, kubeconfigGetter) } if err != nil { return nil, err } clusterConfig.QPS = KubeAPIQPS clusterConfig.Burst = KubeAPIBurst } return clusterConfig, 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 = "" 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 }
func (s *DelegatingAuthenticationOptions) newTokenAccessReview() (authenticationclient.TokenReviewInterface, error) { var clientConfig *restclient.Config var err error if len(s.RemoteKubeConfigFile) > 0 { loadingRules := &clientcmd.ClientConfigLoadingRules{ExplicitPath: s.RemoteKubeConfigFile} loader := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, &clientcmd.ConfigOverrides{}) clientConfig, err = loader.ClientConfig() } else { // without the remote kubeconfig file, try to use the in-cluster config. Most addon API servers will // use this path clientConfig, err = restclient.InClusterConfig() } if err != nil { return nil, err } // set high qps/burst limits since this will effectively limit API server responsiveness clientConfig.QPS = 200 clientConfig.Burst = 400 client, err := authenticationclient.NewForConfig(clientConfig) if err != nil { return nil, err } return client.TokenReviews(), nil }
// NewClient returns a new client based on the passed in config. The // codec is ignored, as the dynamic client uses it's own codec. func NewClient(conf *restclient.Config) (*Client, error) { // avoid changing the original config confCopy := *conf conf = &confCopy contentConfig := ContentConfig() contentConfig.GroupVersion = conf.GroupVersion if conf.NegotiatedSerializer != nil { contentConfig.NegotiatedSerializer = conf.NegotiatedSerializer } conf.ContentConfig = contentConfig if conf.APIPath == "" { conf.APIPath = "/api" } if len(conf.UserAgent) == 0 { conf.UserAgent = restclient.DefaultKubernetesUserAgent() } cl, err := restclient.RESTClientFor(conf) if err != nil { return nil, err } return &Client{cl: cl}, nil }
// makeUserIdentificationFieldsConfig returns a client.Config capable of being merged using mergo for only server identification information func makeServerIdentificationConfig(info clientauth.Info) restclient.Config { config := restclient.Config{} config.CAFile = info.CAFile if info.Insecure != nil { config.Insecure = *info.Insecure } return config }
// applyClientConnectionOverrides updates a kubeConfig with the overrides from the config. func applyClientConnectionOverrides(overrides *ClientConnectionOverrides, kubeConfig *restclient.Config) { if overrides == nil { return } kubeConfig.QPS = overrides.QPS kubeConfig.Burst = int(overrides.Burst) kubeConfig.ContentConfig.AcceptContentTypes = overrides.AcceptContentTypes kubeConfig.ContentConfig.ContentType = overrides.ContentType }
func setDiscoveryDefaults(config *restclient.Config) error { config.APIPath = "" config.GroupVersion = nil config.Codec = runtime.NoopEncoder{api.Codecs.UniversalDecoder()} if len(config.UserAgent) == 0 { config.UserAgent = restclient.DefaultKubernetesUserAgent() } return nil }
func setDiscoveryDefaults(config *restclient.Config) error { config.APIPath = "" config.GroupVersion = nil codec := runtime.NoopEncoder{Decoder: api.Codecs.UniversalDecoder()} config.NegotiatedSerializer = serializer.NegotiatedSerializerWrapper(runtime.SerializerInfo{Serializer: codec}) if len(config.UserAgent) == 0 { config.UserAgent = restclient.DefaultKubernetesUserAgent() } return nil }
func setCertificatesDefaults(config *restclient.Config) error { setGroupDefaults(certificates.GroupName, config) if config.QPS == 0 { config.QPS = 5 } if config.Burst == 0 { config.Burst = 10 } return nil }
func TestOAuthDisabled(t *testing.T) { testutil.RequireEtcd(t) defer testutil.DumpEtcdOnFailure(t) // Build master config masterOptions, err := testserver.DefaultMasterOptions() if err != nil { t.Fatalf("unexpected error: %v", err) } // Disable OAuth masterOptions.OAuthConfig = nil // Start server clusterAdminKubeConfig, err := testserver.StartConfiguredMaster(masterOptions) if err != nil { t.Fatalf("unexpected error: %v", err) } client, err := testutil.GetClusterAdminKubeClient(clusterAdminKubeConfig) if err != nil { t.Fatalf("unexpected error: %v", err) } clientConfig, err := testutil.GetClusterAdminClientConfig(clusterAdminKubeConfig) if err != nil { t.Fatalf("unexpected error: %v", err) } // Make sure cert auth still works namespaces, err := client.Namespaces().List(kapi.ListOptions{}) if err != nil { t.Fatalf("Unexpected error %v", err) } if len(namespaces.Items) == 0 { t.Errorf("Expected namespaces, got none") } // Use the server and CA info anonConfig := restclient.Config{} anonConfig.Host = clientConfig.Host anonConfig.CAFile = clientConfig.CAFile anonConfig.CAData = clientConfig.CAData // Make sure we can't authenticate using OAuth if _, err := tokencmd.RequestToken(&anonConfig, nil, "username", "password"); err == nil { t.Error("Expected error, got none") } }
func createKubeClient(flags *flag.FlagSet, inCluster bool) (*kube_client.Client, error) { var config *kube_restclient.Config var err error if inCluster { config, err = kube_restclient.InClusterConfig() } else { clientConfig := kubectl_util.DefaultClientConfig(flags) config, err = clientConfig.ClientConfig() } if err != nil { fmt.Errorf("error connecting to the client: %v", err) } config.ContentType = *contentType return kube_client.NewOrDie(config), nil }
// SetKubernetesDefaults sets default values on the provided client config for accessing the // Kubernetes API or returns an error if any of the defaults are impossible or invalid. // TODO: this method needs to be split into one that sets defaults per group, expected to be fix in PR "Refactoring clientcache.go and helper.go #14592" func SetKubernetesDefaults(config *restclient.Config) error { if config.APIPath == "" { config.APIPath = legacyAPIPath } g, err := registered.Group(api.GroupName) if err != nil { return err } // TODO: Unconditionally set the config.Version, until we fix the config. copyGroupVersion := g.GroupVersion config.GroupVersion = ©GroupVersion if config.NegotiatedSerializer == nil { config.NegotiatedSerializer = api.Codecs } return restclient.SetKubernetesDefaults(config) }
// SetOpenShiftDefaults sets the default settings on the passed // client configuration func SetOpenShiftDefaults(config *restclient.Config) error { if len(config.UserAgent) == 0 { config.UserAgent = DefaultOpenShiftUserAgent() } if config.GroupVersion == nil { // Clients default to the preferred code API version groupVersionCopy := latest.Version config.GroupVersion = &groupVersionCopy } if config.APIPath == "" { config.APIPath = "/oapi" } if config.NegotiatedSerializer == nil { config.NegotiatedSerializer = kapi.Codecs } return nil }
// SetKubernetesDefaults sets default values on the provided client config for accessing the // Kubernetes API or returns an error if any of the defaults are impossible or invalid. // TODO: this method needs to be split into one that sets defaults per group, expected to be fix in PR "Refactoring clientcache.go and helper.go #14592" func SetKubernetesDefaults(config *restclient.Config) error { if config.APIPath == "" { config.APIPath = legacyAPIPath } if config.GroupVersion == nil || config.GroupVersion.Group != api.GroupName { g, err := registered.Group(api.GroupName) if err != nil { return err } copyGroupVersion := g.GroupVersion config.GroupVersion = ©GroupVersion } if config.NegotiatedSerializer == nil { config.NegotiatedSerializer = api.Codecs } return restclient.SetKubernetesDefaults(config) }
// 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 }
func setBatchDefaults(config *restclient.Config, gv *unversioned.GroupVersion) error { // if batch group is not registered, return an error g, err := registered.Group(batch.GroupName) if err != nil { return err } config.APIPath = defaultAPIPath if config.UserAgent == "" { config.UserAgent = restclient.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { copyGroupVersion := g.GroupVersion if gv != nil { copyGroupVersion = *gv } config.GroupVersion = ©GroupVersion //} config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion) config.NegotiatedSerializer = api.Codecs if config.QPS == 0 { config.QPS = 5 } if config.Burst == 0 { config.Burst = 10 } return nil }
func setPolicyDefaults(config *restclient.Config) error { g, err := registered.Group(policy.GroupName) if err != nil { return err } config.APIPath = defaultAPIPath if config.UserAgent == "" { config.UserAgent = restclient.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { copyGroupVersion := g.GroupVersion config.GroupVersion = ©GroupVersion //} config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion) config.NegotiatedSerializer = api.Codecs if config.QPS == 0 { config.QPS = 5 } if config.Burst == 0 { config.Burst = 10 } return nil }
func setGroupDefaults(groupName string, config *restclient.Config) error { config.APIPath = defaultAPIPath if config.UserAgent == "" { config.UserAgent = restclient.DefaultKubernetesUserAgent() } if config.GroupVersion == nil || config.GroupVersion.Group != groupName { g, err := registered.Group(groupName) if err != nil { return err } copyGroupVersion := g.GroupVersion config.GroupVersion = ©GroupVersion } if config.NegotiatedSerializer == nil { config.NegotiatedSerializer = api.Codecs } return nil }
func setAppsDefaults(config *restclient.Config) error { g, err := registered.Group(apps.GroupName) if err != nil { return err } config.APIPath = defaultAPIPath if config.UserAgent == "" { config.UserAgent = restclient.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { copyGroupVersion := g.GroupVersion config.GroupVersion = ©GroupVersion //} config.NegotiatedSerializer = api.Codecs return nil }
// addChaosToClientConfig injects random errors into client connections if configured. func addChaosToClientConfig(s *options.KubeletServer, config *restclient.Config) { if s.ChaosChance != 0.0 { config.WrapTransport = func(rt http.RoundTripper) http.RoundTripper { seed := chaosclient.NewSeed(1) // TODO: introduce a standard chaos package with more tunables - this is just a proof of concept // TODO: introduce random latency and stalls return chaosclient.NewChaosRoundTripper(rt, chaosclient.LogChaos, seed.P(s.ChaosChance, chaosclient.ErrSimulatedConnectionResetByPeer)) } } }
func setConfigDefaults(config *restclient.Config) error { gv, err := schema.ParseGroupVersion("policy/v1beta1") if err != nil { return err } // if policy/v1beta1 is not enabled, return an error if !registered.IsEnabledVersion(gv) { return fmt.Errorf("policy/v1beta1 is not enabled") } config.APIPath = "/apis" if config.UserAgent == "" { config.UserAgent = restclient.DefaultKubernetesUserAgent() } copyGroupVersion := gv config.GroupVersion = ©GroupVersion config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: api.Codecs} return nil }
func setExtensionsDefaults(config *restclient.Config) error { // if experimental group is not registered, return an error g, err := registered.Group(extensions.GroupName) if err != nil { return err } config.APIPath = defaultAPIPath if config.UserAgent == "" { config.UserAgent = restclient.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { copyGroupVersion := g.GroupVersion config.GroupVersion = ©GroupVersion //} config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion) config.NegotiatedSerializer = api.Codecs return nil }
// MergeWithConfig returns a copy of a client.Config with values from the Info. // The fields of client.Config with a corresponding field in the Info are set // with the value from the Info. func (info Info) MergeWithConfig(c restclient.Config) (restclient.Config, error) { var config restclient.Config = c config.Username = info.User config.Password = info.Password config.CAFile = info.CAFile config.CertFile = info.CertFile config.KeyFile = info.KeyFile config.BearerToken = info.BearerToken if info.Insecure != nil { config.Insecure = *info.Insecure } return config, nil }
func setConfigDefaults(config *restclient.Config) error { // if extensions group is not registered, return an error g, err := registered.Group("extensions") if err != nil { return err } config.APIPath = "/apis" if config.UserAgent == "" { config.UserAgent = restclient.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { copyGroupVersion := g.GroupVersion config.GroupVersion = ©GroupVersion //} config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: api.Codecs} return nil }
func setConfigDefaults(config *restclient.Config) error { // if extensions group is not registered, return an error g, err := registered.Group("extensions") if err != nil { return err } config.APIPath = "/apis" if config.UserAgent == "" { config.UserAgent = restclient.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { copyGroupVersion := g.GroupVersion config.GroupVersion = ©GroupVersion //} codec, ok := api.Codecs.SerializerForFileExtension("json") if !ok { return fmt.Errorf("unable to find serializer for JSON") } config.Codec = codec if config.QPS == 0 { config.QPS = 5 } if config.Burst == 0 { config.Burst = 10 } return nil }
func setConfigDefaults(config *restclient.Config) error { // if testgroup group is not registered, return an error g, err := registered.Group("testgroup.k8s.io") if err != nil { return err } config.APIPath = "/apis" if config.UserAgent == "" { config.UserAgent = restclient.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { copyGroupVersion := g.GroupVersion config.GroupVersion = ©GroupVersion //} config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion) if config.QPS == 0 { config.QPS = 5 } if config.Burst == 0 { config.Burst = 10 } return nil }
func setConfigDefaults(config *restclient.Config) error { // if core group is not registered, return an error g, err := registered.Group("") if err != nil { return err } config.APIPath = "/api" if config.UserAgent == "" { config.UserAgent = restclient.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { copyGroupVersion := g.GroupVersion config.GroupVersion = ©GroupVersion //} config.NegotiatedSerializer = api.Codecs if config.QPS == 0 { config.QPS = 5 } if config.Burst == 0 { config.Burst = 10 } return nil }