From c732bb8348b6ef4acc3ac7d006d56e6956141dd5 Mon Sep 17 00:00:00 2001 From: Antonio Ojea Date: Thu, 17 Mar 2022 13:19:43 +0100 Subject: [PATCH 1/2] default kubernetes agent for generated clients Set default kubernetes agent if empty --- .../kubernetes_test/clientset_test.go | 88 +++++++++++++++++++ .../generators/generator_for_clientset.go | 4 + 2 files changed, 92 insertions(+) create mode 100644 staging/src/k8s.io/client-go/kubernetes_test/clientset_test.go diff --git a/staging/src/k8s.io/client-go/kubernetes_test/clientset_test.go b/staging/src/k8s.io/client-go/kubernetes_test/clientset_test.go new file mode 100644 index 00000000000..ce1b1283aef --- /dev/null +++ b/staging/src/k8s.io/client-go/kubernetes_test/clientset_test.go @@ -0,0 +1,88 @@ +/* +Copyright 2022 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package kubernetes_test + +import ( + "context" + "net/http" + "net/http/httptest" + "testing" + + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" +) + +func TestClientUserAgent(t *testing.T) { + tests := []struct { + name string + userAgent string + expect string + }{ + { + name: "empty", + expect: rest.DefaultKubernetesUserAgent(), + }, + { + name: "custom", + userAgent: "test-agent", + expect: "test-agent", + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + userAgent := r.Header.Get("User-Agent") + if userAgent != tc.expect { + t.Errorf("User Agent expected: %s got: %s", tc.expect, userAgent) + http.Error(w, "Unexpected user agent", http.StatusBadRequest) + return + } + w.Header().Set("Content-Type", "application/json") + w.Write([]byte("{}")) + })) + ts.Start() + defer ts.Close() + + gv := v1.SchemeGroupVersion + config := &rest.Config{ + Host: ts.URL, + } + config.GroupVersion = &gv + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.UserAgent = tc.userAgent + config.ContentType = "application/json" + + client, err := kubernetes.NewForConfig(config) + if err != nil { + t.Fatalf("failed to create REST client: %v", err) + } + _, err = client.CoreV1().Pods("").List(context.TODO(), metav1.ListOptions{}) + if err != nil { + t.Error(err) + } + _, err = client.CoreV1().Secrets("").List(context.TODO(), metav1.ListOptions{}) + if err != nil { + t.Error(err) + } + }) + } + +} diff --git a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/generator_for_clientset.go b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/generator_for_clientset.go index b0212296c1c..cd7b1d0fc02 100644 --- a/staging/src/k8s.io/code-generator/cmd/client-gen/generators/generator_for_clientset.go +++ b/staging/src/k8s.io/code-generator/cmd/client-gen/generators/generator_for_clientset.go @@ -143,6 +143,10 @@ var newClientsetForConfigTemplate = ` func NewForConfig(c *$.Config|raw$) (*Clientset, error) { configShallowCopy := *c + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = $.DefaultKubernetesUserAgent|raw$() + } + // share the transport between all clients httpClient, err := $.RESTHTTPClientFor|raw$(&configShallowCopy) if err != nil { From 1d5ad2264cbebe2ce33e288451c2757fa16a1956 Mon Sep 17 00:00:00 2001 From: Antonio Ojea Date: Thu, 17 Mar 2022 16:03:10 +0100 Subject: [PATCH 2/2] client-go: update generated --- .../client-go/pkg/client/clientset/versioned/clientset.go | 4 ++++ .../pkg/client/clientset/clientset/clientset.go | 4 ++++ staging/src/k8s.io/client-go/kubernetes/clientset.go | 4 ++++ .../examples/HyphenGroup/clientset/versioned/clientset.go | 4 ++++ .../examples/MixedCase/clientset/versioned/clientset.go | 4 ++++ .../examples/apiserver/clientset/internalversion/clientset.go | 4 ++++ .../examples/apiserver/clientset/versioned/clientset.go | 4 ++++ .../examples/crd/clientset/versioned/clientset.go | 4 ++++ .../pkg/client/clientset_generated/clientset/clientset.go | 4 ++++ .../metrics/pkg/client/clientset/versioned/clientset.go | 4 ++++ .../pkg/generated/clientset/versioned/clientset.go | 4 ++++ .../pkg/generated/clientset/versioned/clientset.go | 4 ++++ 12 files changed, 48 insertions(+) diff --git a/staging/src/k8s.io/apiextensions-apiserver/examples/client-go/pkg/client/clientset/versioned/clientset.go b/staging/src/k8s.io/apiextensions-apiserver/examples/client-go/pkg/client/clientset/versioned/clientset.go index 7de7514538f..51969ba749c 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/examples/client-go/pkg/client/clientset/versioned/clientset.go +++ b/staging/src/k8s.io/apiextensions-apiserver/examples/client-go/pkg/client/clientset/versioned/clientset.go @@ -61,6 +61,10 @@ func (c *Clientset) Discovery() discovery.DiscoveryInterface { func NewForConfig(c *rest.Config) (*Clientset, error) { configShallowCopy := *c + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + // share the transport between all clients httpClient, err := rest.HTTPClientFor(&configShallowCopy) if err != nil { diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/clientset.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/clientset.go index 23f75d5d17d..65ae76067df 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/clientset.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/clientset.go @@ -69,6 +69,10 @@ func (c *Clientset) Discovery() discovery.DiscoveryInterface { func NewForConfig(c *rest.Config) (*Clientset, error) { configShallowCopy := *c + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + // share the transport between all clients httpClient, err := rest.HTTPClientFor(&configShallowCopy) if err != nil { diff --git a/staging/src/k8s.io/client-go/kubernetes/clientset.go b/staging/src/k8s.io/client-go/kubernetes/clientset.go index 3e512a7c2e9..e46c0537f78 100644 --- a/staging/src/k8s.io/client-go/kubernetes/clientset.go +++ b/staging/src/k8s.io/client-go/kubernetes/clientset.go @@ -413,6 +413,10 @@ func (c *Clientset) Discovery() discovery.DiscoveryInterface { func NewForConfig(c *rest.Config) (*Clientset, error) { configShallowCopy := *c + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + // share the transport between all clients httpClient, err := rest.HTTPClientFor(&configShallowCopy) if err != nil { diff --git a/staging/src/k8s.io/code-generator/examples/HyphenGroup/clientset/versioned/clientset.go b/staging/src/k8s.io/code-generator/examples/HyphenGroup/clientset/versioned/clientset.go index 3c1c4816631..af6f0e4d6c6 100644 --- a/staging/src/k8s.io/code-generator/examples/HyphenGroup/clientset/versioned/clientset.go +++ b/staging/src/k8s.io/code-generator/examples/HyphenGroup/clientset/versioned/clientset.go @@ -61,6 +61,10 @@ func (c *Clientset) Discovery() discovery.DiscoveryInterface { func NewForConfig(c *rest.Config) (*Clientset, error) { configShallowCopy := *c + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + // share the transport between all clients httpClient, err := rest.HTTPClientFor(&configShallowCopy) if err != nil { diff --git a/staging/src/k8s.io/code-generator/examples/MixedCase/clientset/versioned/clientset.go b/staging/src/k8s.io/code-generator/examples/MixedCase/clientset/versioned/clientset.go index 718039652c6..47f43cac7b8 100644 --- a/staging/src/k8s.io/code-generator/examples/MixedCase/clientset/versioned/clientset.go +++ b/staging/src/k8s.io/code-generator/examples/MixedCase/clientset/versioned/clientset.go @@ -61,6 +61,10 @@ func (c *Clientset) Discovery() discovery.DiscoveryInterface { func NewForConfig(c *rest.Config) (*Clientset, error) { configShallowCopy := *c + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + // share the transport between all clients httpClient, err := rest.HTTPClientFor(&configShallowCopy) if err != nil { diff --git a/staging/src/k8s.io/code-generator/examples/apiserver/clientset/internalversion/clientset.go b/staging/src/k8s.io/code-generator/examples/apiserver/clientset/internalversion/clientset.go index b9108feeb7d..c3e5be36438 100644 --- a/staging/src/k8s.io/code-generator/examples/apiserver/clientset/internalversion/clientset.go +++ b/staging/src/k8s.io/code-generator/examples/apiserver/clientset/internalversion/clientset.go @@ -77,6 +77,10 @@ func (c *Clientset) Discovery() discovery.DiscoveryInterface { func NewForConfig(c *rest.Config) (*Clientset, error) { configShallowCopy := *c + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + // share the transport between all clients httpClient, err := rest.HTTPClientFor(&configShallowCopy) if err != nil { diff --git a/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/clientset.go b/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/clientset.go index eb535065289..2c061b56bdb 100644 --- a/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/clientset.go +++ b/staging/src/k8s.io/code-generator/examples/apiserver/clientset/versioned/clientset.go @@ -77,6 +77,10 @@ func (c *Clientset) Discovery() discovery.DiscoveryInterface { func NewForConfig(c *rest.Config) (*Clientset, error) { configShallowCopy := *c + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + // share the transport between all clients httpClient, err := rest.HTTPClientFor(&configShallowCopy) if err != nil { diff --git a/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/clientset.go b/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/clientset.go index a13fc472b0f..88e189e2cdb 100644 --- a/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/clientset.go +++ b/staging/src/k8s.io/code-generator/examples/crd/clientset/versioned/clientset.go @@ -69,6 +69,10 @@ func (c *Clientset) Discovery() discovery.DiscoveryInterface { func NewForConfig(c *rest.Config) (*Clientset, error) { configShallowCopy := *c + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + // share the transport between all clients httpClient, err := rest.HTTPClientFor(&configShallowCopy) if err != nil { diff --git a/staging/src/k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/clientset.go b/staging/src/k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/clientset.go index 7ba462f44ef..d92ded3815b 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/clientset.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/clientset.go @@ -69,6 +69,10 @@ func (c *Clientset) Discovery() discovery.DiscoveryInterface { func NewForConfig(c *rest.Config) (*Clientset, error) { configShallowCopy := *c + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + // share the transport between all clients httpClient, err := rest.HTTPClientFor(&configShallowCopy) if err != nil { diff --git a/staging/src/k8s.io/metrics/pkg/client/clientset/versioned/clientset.go b/staging/src/k8s.io/metrics/pkg/client/clientset/versioned/clientset.go index 3141a8b450e..500e3a5f83e 100644 --- a/staging/src/k8s.io/metrics/pkg/client/clientset/versioned/clientset.go +++ b/staging/src/k8s.io/metrics/pkg/client/clientset/versioned/clientset.go @@ -69,6 +69,10 @@ func (c *Clientset) Discovery() discovery.DiscoveryInterface { func NewForConfig(c *rest.Config) (*Clientset, error) { configShallowCopy := *c + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + // share the transport between all clients httpClient, err := rest.HTTPClientFor(&configShallowCopy) if err != nil { diff --git a/staging/src/k8s.io/sample-apiserver/pkg/generated/clientset/versioned/clientset.go b/staging/src/k8s.io/sample-apiserver/pkg/generated/clientset/versioned/clientset.go index 09fa5721140..937251dce3c 100644 --- a/staging/src/k8s.io/sample-apiserver/pkg/generated/clientset/versioned/clientset.go +++ b/staging/src/k8s.io/sample-apiserver/pkg/generated/clientset/versioned/clientset.go @@ -69,6 +69,10 @@ func (c *Clientset) Discovery() discovery.DiscoveryInterface { func NewForConfig(c *rest.Config) (*Clientset, error) { configShallowCopy := *c + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + // share the transport between all clients httpClient, err := rest.HTTPClientFor(&configShallowCopy) if err != nil { diff --git a/staging/src/k8s.io/sample-controller/pkg/generated/clientset/versioned/clientset.go b/staging/src/k8s.io/sample-controller/pkg/generated/clientset/versioned/clientset.go index 3b2d65659a3..45f7a477e9a 100644 --- a/staging/src/k8s.io/sample-controller/pkg/generated/clientset/versioned/clientset.go +++ b/staging/src/k8s.io/sample-controller/pkg/generated/clientset/versioned/clientset.go @@ -61,6 +61,10 @@ func (c *Clientset) Discovery() discovery.DiscoveryInterface { func NewForConfig(c *rest.Config) (*Clientset, error) { configShallowCopy := *c + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + // share the transport between all clients httpClient, err := rest.HTTPClientFor(&configShallowCopy) if err != nil {