From 392b8da1d04f3026d018bc115d8d73b7c6414988 Mon Sep 17 00:00:00 2001 From: Solly Ross Date: Mon, 1 May 2017 17:04:09 -0400 Subject: [PATCH 1/5] [client-gen] Allow overriding the resource name This commit allows client-gen to generate clients where the resource name does not directly correspond to the type name. The tag `// +resourceName=` can be used to override the resource name. --- .../client-gen/generators/client_generator.go | 28 ++++++++++++++++++- .../fake/generator_fake_for_type.go | 2 +- .../generators/generator_for_type.go | 18 ++++++------ cmd/libs/go2idl/client-gen/generators/tags.go | 11 ++++++++ 4 files changed, 48 insertions(+), 11 deletions(-) diff --git a/cmd/libs/go2idl/client-gen/generators/client_generator.go b/cmd/libs/go2idl/client-gen/generators/client_generator.go index cafb98ee5fe..6cc6783cd6b 100644 --- a/cmd/libs/go2idl/client-gen/generators/client_generator.go +++ b/cmd/libs/go2idl/client-gen/generators/client_generator.go @@ -39,13 +39,15 @@ func NameSystems() namer.NameSystems { pluralExceptions := map[string]string{ "Endpoints": "Endpoints", } + lowercaseNamer := namer.NewAllLowercasePluralNamer(pluralExceptions) return namer.NameSystems{ "public": namer.NewPublicNamer(0), "private": namer.NewPrivateNamer(0), "raw": namer.NewRawNamer("", nil), "publicPlural": namer.NewPublicPluralNamer(pluralExceptions), "privatePlural": namer.NewPrivatePluralNamer(pluralExceptions), - "allLowercasePlural": namer.NewAllLowercasePluralNamer(pluralExceptions), + "allLowercasePlural": lowercaseNamer, + "resource": NewTagOverrideNamer("resourceName", lowercaseNamer), } } @@ -279,3 +281,27 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat return generator.Packages(packageList) } + +// tagOverrideNamer is a namer which pulls names from a given tag, if specified, +// and otherwise falls back to a different namer. +type tagOverrideNamer struct { + tagName string + fallback namer.Namer +} + +func (n *tagOverrideNamer) Name(t *types.Type) string { + if nameOverride := extractTag(n.tagName, t.SecondClosestCommentLines); nameOverride != "" { + return nameOverride + } + + return n.fallback.Name(t) +} + +// NewTagOverrideNamer creates a namer.Namer which uses the contents of the given tag as +// the name, or falls back to another Namer if the tag is not present. +func NewTagOverrideNamer(tagName string, fallback namer.Namer) namer.Namer { + return &tagOverrideNamer{ + tagName: tagName, + fallback: fallback, + } +} diff --git a/cmd/libs/go2idl/client-gen/generators/fake/generator_fake_for_type.go b/cmd/libs/go2idl/client-gen/generators/fake/generator_fake_for_type.go index c5c58719033..bf98a0da0de 100644 --- a/cmd/libs/go2idl/client-gen/generators/fake/generator_fake_for_type.go +++ b/cmd/libs/go2idl/client-gen/generators/fake/generator_fake_for_type.go @@ -197,7 +197,7 @@ type Fake$.type|publicPlural$ struct { ` var resource = ` -var $.type|allLowercasePlural$Resource = $.GroupVersionResource|raw${Group: "$.groupName$", Version: "$.version$", Resource: "$.type|allLowercasePlural$"} +var $.type|allLowercasePlural$Resource = $.GroupVersionResource|raw${Group: "$.groupName$", Version: "$.version$", Resource: "$.type|resource$"} ` var kind = ` diff --git a/cmd/libs/go2idl/client-gen/generators/generator_for_type.go b/cmd/libs/go2idl/client-gen/generators/generator_for_type.go index f2781ce595e..8fc4cbca147 100644 --- a/cmd/libs/go2idl/client-gen/generators/generator_for_type.go +++ b/cmd/libs/go2idl/client-gen/generators/generator_for_type.go @@ -224,7 +224,7 @@ func (c *$.type|privatePlural$) List(opts $.ListOptions|raw$) (result *$.type|ra result = &$.type|raw$List{} err = c.client.Get(). $if .namespaced$Namespace(c.ns).$end$ - Resource("$.type|allLowercasePlural$"). + Resource("$.type|resource$"). VersionedParams(&opts, $.schemeParameterCodec|raw$). Do(). Into(result) @@ -237,7 +237,7 @@ func (c *$.type|privatePlural$) Get(name string, options $.GetOptions|raw$) (res result = &$.type|raw${} err = c.client.Get(). $if .namespaced$Namespace(c.ns).$end$ - Resource("$.type|allLowercasePlural$"). + Resource("$.type|resource$"). Name(name). VersionedParams(&options, $.schemeParameterCodec|raw$). Do(). @@ -251,7 +251,7 @@ var deleteTemplate = ` func (c *$.type|privatePlural$) Delete(name string, options *$.DeleteOptions|raw$) error { return c.client.Delete(). $if .namespaced$Namespace(c.ns).$end$ - Resource("$.type|allLowercasePlural$"). + Resource("$.type|resource$"). Name(name). Body(options). Do(). @@ -264,7 +264,7 @@ var deleteCollectionTemplate = ` func (c *$.type|privatePlural$) DeleteCollection(options *$.DeleteOptions|raw$, listOptions $.ListOptions|raw$) error { return c.client.Delete(). $if .namespaced$Namespace(c.ns).$end$ - Resource("$.type|allLowercasePlural$"). + Resource("$.type|resource$"). VersionedParams(&listOptions, $.schemeParameterCodec|raw$). Body(options). Do(). @@ -278,7 +278,7 @@ func (c *$.type|privatePlural$) Create($.type|private$ *$.type|raw$) (result *$. result = &$.type|raw${} err = c.client.Post(). $if .namespaced$Namespace(c.ns).$end$ - Resource("$.type|allLowercasePlural$"). + Resource("$.type|resource$"). Body($.type|private$). Do(). Into(result) @@ -292,7 +292,7 @@ func (c *$.type|privatePlural$) Update($.type|private$ *$.type|raw$) (result *$. result = &$.type|raw${} err = c.client.Put(). $if .namespaced$Namespace(c.ns).$end$ - Resource("$.type|allLowercasePlural$"). + Resource("$.type|resource$"). Name($.type|private$.Name). Body($.type|private$). Do(). @@ -309,7 +309,7 @@ func (c *$.type|privatePlural$) UpdateStatus($.type|private$ *$.type|raw$) (resu result = &$.type|raw${} err = c.client.Put(). $if .namespaced$Namespace(c.ns).$end$ - Resource("$.type|allLowercasePlural$"). + Resource("$.type|resource$"). Name($.type|private$.Name). SubResource("status"). Body($.type|private$). @@ -325,7 +325,7 @@ func (c *$.type|privatePlural$) Watch(opts $.ListOptions|raw$) ($.watchInterface opts.Watch = true return c.client.Get(). $if .namespaced$Namespace(c.ns).$end$ - Resource("$.type|allLowercasePlural$"). + Resource("$.type|resource$"). VersionedParams(&opts, $.schemeParameterCodec|raw$). Watch() } @@ -337,7 +337,7 @@ func (c *$.type|privatePlural$) Patch(name string, pt $.PatchType|raw$, data []b result = &$.type|raw${} err = c.client.Patch(pt). $if .namespaced$Namespace(c.ns).$end$ - Resource("$.type|allLowercasePlural$"). + Resource("$.type|resource$"). SubResource(subresources...). Name(name). Body(data). diff --git a/cmd/libs/go2idl/client-gen/generators/tags.go b/cmd/libs/go2idl/client-gen/generators/tags.go index 34aa77231fa..063559c09e1 100644 --- a/cmd/libs/go2idl/client-gen/generators/tags.go +++ b/cmd/libs/go2idl/client-gen/generators/tags.go @@ -31,3 +31,14 @@ func extractBoolTagOrDie(key string, lines []string) bool { } return val } + +// extractTag gets the comment-tags for the key. If the tag did not exist, it +// returns the empty string. +func extractTag(key string, lines []string) string { + val, present := types.ExtractCommentTags("+", lines)[key] + if !present || len(val) < 1 { + return "" + } + + return val[0] +} From 1cbc825fb9f3cf79e788d50ddbdd7d03c0e47ec9 Mon Sep 17 00:00:00 2001 From: Solly Ross Date: Mon, 1 May 2017 17:11:01 -0400 Subject: [PATCH 2/5] [client-gen] Support Read-Only APIs This commit adds support for read-only APIs to client-gen. If the tag `// +readonly=true` is used, only the {Get,List,Watch} client methods will be generated. --- .../fake/generator_fake_for_type.go | 11 +++++++ .../generators/generator_for_type.go | 29 +++++++++++++++---- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/cmd/libs/go2idl/client-gen/generators/fake/generator_fake_for_type.go b/cmd/libs/go2idl/client-gen/generators/fake/generator_fake_for_type.go index bf98a0da0de..f6c607ea03d 100644 --- a/cmd/libs/go2idl/client-gen/generators/fake/generator_fake_for_type.go +++ b/cmd/libs/go2idl/client-gen/generators/fake/generator_fake_for_type.go @@ -149,6 +149,8 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io. noMethods := extractBoolTagOrDie("noMethods", t.SecondClosestCommentLines) == true + readonly := extractBoolTagOrDie("readonly", t.SecondClosestCommentLines) == true + if namespaced { sw.Do(structNamespaced, m) } else { @@ -158,6 +160,9 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io. if !noMethods { sw.Do(resource, m) sw.Do(kind, m) + } + + if !noMethods && !readonly { sw.Do(createTemplate, m) sw.Do(updateTemplate, m) // Generate the UpdateStatus method if the type has a status @@ -166,6 +171,9 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io. } sw.Do(deleteTemplate, m) sw.Do(deleteCollectionTemplate, m) + } + + if !noMethods { sw.Do(getTemplate, m) if hasObjectMeta(t) { sw.Do(listUsingOptionsTemplate, m) @@ -173,6 +181,9 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io. sw.Do(listTemplate, m) } sw.Do(watchTemplate, m) + } + + if !noMethods && !readonly { sw.Do(patchTemplate, m) } diff --git a/cmd/libs/go2idl/client-gen/generators/generator_for_type.go b/cmd/libs/go2idl/client-gen/generators/generator_for_type.go index 8fc4cbca147..be2c9908a7b 100644 --- a/cmd/libs/go2idl/client-gen/generators/generator_for_type.go +++ b/cmd/libs/go2idl/client-gen/generators/generator_for_type.go @@ -102,14 +102,20 @@ func (g *genClientForType) GenerateType(c *generator.Context, t *types.Type, w i } noMethods := extractBoolTagOrDie("noMethods", t.SecondClosestCommentLines) == true + readonly := extractBoolTagOrDie("readonly", t.SecondClosestCommentLines) == true + sw.Do(interfaceTemplate1, m) if !noMethods { - sw.Do(interfaceTemplate2, m) - // Include the UpdateStatus method if the type has a status - if genStatus(t) { - sw.Do(interfaceUpdateStatusTemplate, m) + if readonly { + sw.Do(interfaceTemplateReadonly, m) + } else { + sw.Do(interfaceTemplate2, m) + // Include the UpdateStatus method if the type has a status + if genStatus(t) { + sw.Do(interfaceUpdateStatusTemplate, m) + } + sw.Do(interfaceTemplate3, m) } - sw.Do(interfaceTemplate3, m) } sw.Do(interfaceTemplate4, m) @@ -121,7 +127,7 @@ func (g *genClientForType) GenerateType(c *generator.Context, t *types.Type, w i sw.Do(newStructNonNamespaced, m) } - if !noMethods { + if !noMethods && !readonly { sw.Do(createTemplate, m) sw.Do(updateTemplate, m) // Generate the UpdateStatus method if the type has a status @@ -130,9 +136,15 @@ func (g *genClientForType) GenerateType(c *generator.Context, t *types.Type, w i } sw.Do(deleteTemplate, m) sw.Do(deleteCollectionTemplate, m) + } + + if !noMethods { sw.Do(getTemplate, m) sw.Do(listTemplate, m) sw.Do(watchTemplate, m) + } + + if !noMethods && !readonly { sw.Do(patchTemplate, m) } @@ -177,6 +189,11 @@ var interfaceTemplate3 = ` Watch(opts $.ListOptions|raw$) ($.watchInterface|raw$, error) Patch(name string, pt $.PatchType|raw$, data []byte, subresources ...string) (result *$.type|raw$, err error)` +var interfaceTemplateReadonly = ` + Get(name string, options $.GetOptions|raw$) (*$.type|raw$, error) + List(opts $.ListOptions|raw$) (*$.type|raw$List, error) + Watch(opts $.ListOptions|raw$) ($.watchInterface|raw$, error)` + var interfaceTemplate4 = ` $.type|public$Expansion } From 0b43fffa486abd426c83a26f2e3b5279bbf53180 Mon Sep 17 00:00:00 2001 From: Solly Ross Date: Mon, 1 May 2017 18:24:23 -0400 Subject: [PATCH 3/5] Enable client-gen for k8s.io/metrics This commit turns on client-gen for k8s.io/metrics. Clients are generated for `k8s.io/metrics/pkg/apis/metrics` (both internal and v1alpha1). `k8s.io/metrics/pkg/apis/custom_metrics` uses a bespoke client due to the unique nature of its paths. --- hack/update-codegen.sh | 1 + hack/verify-codegen.sh | 1 + .../src/k8s.io/metrics/hack/update-codegen.sh | 42 +++++++++++++++ .../src/k8s.io/metrics/hack/verify-codegen.sh | 51 +++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100755 staging/src/k8s.io/metrics/hack/update-codegen.sh create mode 100755 staging/src/k8s.io/metrics/hack/verify-codegen.sh diff --git a/hack/update-codegen.sh b/hack/update-codegen.sh index 3c8d75b6dc1..4b809eb7be0 100755 --- a/hack/update-codegen.sh +++ b/hack/update-codegen.sh @@ -104,3 +104,4 @@ ${informergen} \ vendor/k8s.io/kube-aggregator/hack/update-codegen.sh vendor/k8s.io/sample-apiserver/hack/update-codegen.sh vendor/k8s.io/kube-apiextensions-server/hack/update-codegen.sh +vendor/k8s.io/metrics/hack/update-codegen.sh diff --git a/hack/verify-codegen.sh b/hack/verify-codegen.sh index cef0a60d2b0..85845ff3b24 100755 --- a/hack/verify-codegen.sh +++ b/hack/verify-codegen.sh @@ -27,6 +27,7 @@ kube::golang::setup_env vendor/k8s.io/kube-aggregator/hack/verify-codegen.sh vendor/k8s.io/sample-apiserver/hack/verify-codegen.sh vendor/k8s.io/kube-apiextensions-server/hack/verify-codegen.sh +vendor/k8s.io/metrics/hack/verify-codegen.sh "${KUBE_ROOT}/hack/update-codegen.sh" --verify-only diff --git a/staging/src/k8s.io/metrics/hack/update-codegen.sh b/staging/src/k8s.io/metrics/hack/update-codegen.sh new file mode 100755 index 00000000000..785ece8eed2 --- /dev/null +++ b/staging/src/k8s.io/metrics/hack/update-codegen.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# Copyright 2017 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. + +set -o errexit +set -o nounset +set -o pipefail + +KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../../../../.. +METRICS_ROOT=$(dirname "${BASH_SOURCE}")/.. +source "${KUBE_ROOT}/hack/lib/init.sh" + +# Register function to be called on EXIT to remove generated binary. +function cleanup { + rm -f "${CLIENTGEN:-}" +} +trap cleanup EXIT + +echo "Building client-gen" +CLIENTGEN="${PWD}/client-gen-binary" +go build -o "${CLIENTGEN}" ./cmd/libs/go2idl/client-gen + +PREFIX=k8s.io/metrics/pkg/apis +INPUT_BASE="--input-base ${PREFIX}" +CLIENTSET_PATH="--clientset-path k8s.io/metrics/pkg/client/clientset_generated" + +${CLIENTGEN} --clientset-name="clientset" ${INPUT_BASE} --input metrics/v1alpha1 ${CLIENTSET_PATH} --output-base ${KUBE_ROOT}/vendor + +# we skip informers and listers for metrics, because we don't quite support the requisite operations yet +# we skip generating the internal clientset as it's not really needed diff --git a/staging/src/k8s.io/metrics/hack/verify-codegen.sh b/staging/src/k8s.io/metrics/hack/verify-codegen.sh new file mode 100755 index 00000000000..fcb45ca2446 --- /dev/null +++ b/staging/src/k8s.io/metrics/hack/verify-codegen.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +# Copyright 2017 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. + +set -o errexit +set -o nounset +set -o pipefail + +KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../../../../.. +METRICS_ROOT=$(dirname "${BASH_SOURCE}")/.. +source "${KUBE_ROOT}/hack/lib/init.sh" + +DIFFROOT="${METRICS_ROOT}/pkg" +TMP_DIFFROOT="${METRICS_ROOT}/_tmp/pkg" +_tmp="${METRICS_ROOT}/_tmp" + +cleanup() { + rm -rf "${_tmp}" +} +trap "cleanup" EXIT SIGINT + +cleanup + +mkdir -p "${TMP_DIFFROOT}" +cp -a "${DIFFROOT}"/* "${TMP_DIFFROOT}" + +"${METRICS_ROOT}/hack/update-codegen.sh" +echo "diffing ${DIFFROOT} against freshly generated codegen" +ret=0 +diff -Naupr "${DIFFROOT}" "${TMP_DIFFROOT}" || ret=$? +cp -a "${TMP_DIFFROOT}"/* "${DIFFROOT}" +if [[ $ret -eq 0 ]] +then + echo "${DIFFROOT} up to date." +else + echo "${DIFFROOT} is out of date. Please run hack/update-codegen.sh" + exit 1 +fi + From b4ee4e2e803eaf9250263375ff14c2de5a086477 Mon Sep 17 00:00:00 2001 From: Solly Ross Date: Wed, 3 May 2017 18:11:22 -0400 Subject: [PATCH 4/5] Fix HPA unit tests with new fake client The new fake client properly represents the resource of `PodMetrics` as "pods" and the resource of `NodeMetrics` as "nodes". Previously, it used "podmetricses" and "nodemetrics", respectively. This fixes up `horizontal_test.go` and `replica_calc_test.go` to use the new names. --- pkg/controller/podautoscaler/horizontal_test.go | 3 +-- .../podautoscaler/metrics/rest_metrics_client_test.go | 2 +- pkg/controller/podautoscaler/replica_calculator_test.go | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/pkg/controller/podautoscaler/horizontal_test.go b/pkg/controller/podautoscaler/horizontal_test.go index e58e5fbd9e6..e70fdaec229 100644 --- a/pkg/controller/podautoscaler/horizontal_test.go +++ b/pkg/controller/podautoscaler/horizontal_test.go @@ -360,8 +360,7 @@ func (tc *testCase) prepareTestClient(t *testing.T) (*fake.Clientset, *metricsfa fakeClient.AddWatchReactor("*", core.DefaultWatchReactor(fakeWatch, nil)) fakeMetricsClient := &metricsfake.Clientset{} - // NB: we have to sound like Gollum due to gengo's inability to handle already-plural resource names - fakeMetricsClient.AddReactor("list", "podmetricses", func(action core.Action) (handled bool, ret runtime.Object, err error) { + fakeMetricsClient.AddReactor("list", "pods", func(action core.Action) (handled bool, ret runtime.Object, err error) { tc.Lock() defer tc.Unlock() diff --git a/pkg/controller/podautoscaler/metrics/rest_metrics_client_test.go b/pkg/controller/podautoscaler/metrics/rest_metrics_client_test.go index 7ded3de6c37..0490135a5ef 100644 --- a/pkg/controller/podautoscaler/metrics/rest_metrics_client_test.go +++ b/pkg/controller/podautoscaler/metrics/rest_metrics_client_test.go @@ -74,7 +74,7 @@ func (tc *restClientTestCase) prepareTestClient(t *testing.T) (*metricsfake.Clie fakeCMClient := &cmfake.FakeCustomMetricsClient{} if isResource { - fakeMetricsClient.AddReactor("list", "podmetricses", func(action core.Action) (handled bool, ret runtime.Object, err error) { + fakeMetricsClient.AddReactor("list", "pods", func(action core.Action) (handled bool, ret runtime.Object, err error) { metrics := &metricsapi.PodMetricsList{} for i, containers := range tc.reportedPodMetrics { metric := metricsapi.PodMetrics{ diff --git a/pkg/controller/podautoscaler/replica_calculator_test.go b/pkg/controller/podautoscaler/replica_calculator_test.go index c37b61494b5..04418b5b07b 100644 --- a/pkg/controller/podautoscaler/replica_calculator_test.go +++ b/pkg/controller/podautoscaler/replica_calculator_test.go @@ -135,7 +135,7 @@ func (tc *replicaCalcTestCase) prepareTestClient(t *testing.T) (*fake.Clientset, fakeMetricsClient := &metricsfake.Clientset{} // NB: we have to sound like Gollum due to gengo's inability to handle already-plural resource names - fakeMetricsClient.AddReactor("list", "podmetricses", func(action core.Action) (handled bool, ret runtime.Object, err error) { + fakeMetricsClient.AddReactor("list", "pods", func(action core.Action) (handled bool, ret runtime.Object, err error) { if tc.resource != nil { metrics := &metricsapi.PodMetricsList{} for i, resValue := range tc.resource.levels { From be28a99afed69e2e1c73994b5a11ef533584b167 Mon Sep 17 00:00:00 2001 From: Solly Ross Date: Wed, 10 May 2017 13:37:37 -0400 Subject: [PATCH 5/5] Update generated clients for k8s.io/metrics This commit updates the generated clients for k8s.io/metrics based on the generators updated in the previous commits. --- .../clientset_generated/clientset/BUILD | 1 - .../clientset/clientset.go | 1 - .../clientset_generated/clientset/fake/BUILD | 6 ++- .../clientset/fake/clientset_generated.go | 3 +- .../clientset/fake/register.go | 53 +++++++++++++++++++ .../metrics/v1alpha1/fake/fake_nodemetrics.go | 2 +- .../metrics/v1alpha1/fake/fake_podmetrics.go | 2 +- .../typed/metrics/v1alpha1/nodemetrics.go | 3 +- .../typed/metrics/v1alpha1/podmetrics.go | 3 +- 9 files changed, 63 insertions(+), 11 deletions(-) create mode 100644 staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/fake/register.go diff --git a/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/BUILD b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/BUILD index dbf2f4dd93f..0789fbf0579 100644 --- a/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/BUILD +++ b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/BUILD @@ -17,7 +17,6 @@ go_library( deps = [ "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/client-go/discovery:go_default_library", - "//vendor/k8s.io/client-go/plugin/pkg/client/auth:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/util/flowcontrol:go_default_library", "//vendor/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1:go_default_library", diff --git a/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/clientset.go b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/clientset.go index 3bd819cb36a..a202099b2b1 100644 --- a/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/clientset.go +++ b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/clientset.go @@ -19,7 +19,6 @@ package clientset import ( glog "github.com/golang/glog" discovery "k8s.io/client-go/discovery" - _ "k8s.io/client-go/plugin/pkg/client/auth" rest "k8s.io/client-go/rest" flowcontrol "k8s.io/client-go/util/flowcontrol" metricsv1alpha1 "k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1" diff --git a/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/fake/BUILD b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/fake/BUILD index d27d9795abb..1ac675edad7 100644 --- a/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/fake/BUILD +++ b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/fake/BUILD @@ -12,15 +12,19 @@ go_library( srcs = [ "clientset_generated.go", "doc.go", + "register.go", ], tags = ["automanaged"], deps = [ + "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", "//vendor/k8s.io/client-go/discovery:go_default_library", "//vendor/k8s.io/client-go/discovery/fake:go_default_library", - "//vendor/k8s.io/client-go/pkg/api:go_default_library", "//vendor/k8s.io/client-go/testing:go_default_library", + "//vendor/k8s.io/metrics/pkg/apis/metrics/v1alpha1:go_default_library", "//vendor/k8s.io/metrics/pkg/client/clientset_generated/clientset:go_default_library", "//vendor/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1:go_default_library", "//vendor/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1/fake:go_default_library", diff --git a/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/fake/clientset_generated.go b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/fake/clientset_generated.go index dc7c6463a8d..a9a6b403d16 100644 --- a/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/fake/clientset_generated.go +++ b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/fake/clientset_generated.go @@ -21,7 +21,6 @@ import ( "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/discovery" fakediscovery "k8s.io/client-go/discovery/fake" - "k8s.io/client-go/pkg/api" "k8s.io/client-go/testing" clientset "k8s.io/metrics/pkg/client/clientset_generated/clientset" metricsv1alpha1 "k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1" @@ -33,7 +32,7 @@ import ( // without applying any validations and/or defaults. It shouldn't be considered a replacement // for a real clientset and is mostly useful in simple unit tests. func NewSimpleClientset(objects ...runtime.Object) *Clientset { - o := testing.NewObjectTracker(api.Scheme, api.Codecs.UniversalDecoder()) + o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder()) for _, obj := range objects { if err := o.Add(obj); err != nil { panic(err) diff --git a/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/fake/register.go b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/fake/register.go new file mode 100644 index 00000000000..9c678401713 --- /dev/null +++ b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/fake/register.go @@ -0,0 +1,53 @@ +/* +Copyright 2017 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 fake + +import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + metricsv1alpha1 "k8s.io/metrics/pkg/apis/metrics/v1alpha1" +) + +var scheme = runtime.NewScheme() +var codecs = serializer.NewCodecFactory(scheme) +var parameterCodec = runtime.NewParameterCodec(scheme) + +func init() { + v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"}) + AddToScheme(scheme) +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kuberentes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +func AddToScheme(scheme *runtime.Scheme) { + metricsv1alpha1.AddToScheme(scheme) + +} diff --git a/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1/fake/fake_nodemetrics.go b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1/fake/fake_nodemetrics.go index 380adff3a7e..fbdb2d45e70 100644 --- a/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1/fake/fake_nodemetrics.go +++ b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1/fake/fake_nodemetrics.go @@ -30,7 +30,7 @@ type FakeNodeMetricses struct { Fake *FakeMetricsV1alpha1 } -var nodemetricsesResource = schema.GroupVersionResource{Group: "metrics", Version: "v1alpha1", Resource: "nodemetricses"} +var nodemetricsesResource = schema.GroupVersionResource{Group: "metrics", Version: "v1alpha1", Resource: "nodes"} var nodemetricsesKind = schema.GroupVersionKind{Group: "metrics", Version: "v1alpha1", Kind: "NodeMetrics"} diff --git a/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1/fake/fake_podmetrics.go b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1/fake/fake_podmetrics.go index d9ce896ef49..b0c73967e2d 100644 --- a/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1/fake/fake_podmetrics.go +++ b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1/fake/fake_podmetrics.go @@ -31,7 +31,7 @@ type FakePodMetricses struct { ns string } -var podmetricsesResource = schema.GroupVersionResource{Group: "metrics", Version: "v1alpha1", Resource: "podmetricses"} +var podmetricsesResource = schema.GroupVersionResource{Group: "metrics", Version: "v1alpha1", Resource: "pods"} var podmetricsesKind = schema.GroupVersionKind{Group: "metrics", Version: "v1alpha1", Kind: "PodMetrics"} diff --git a/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1/nodemetrics.go b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1/nodemetrics.go index 605fb74e9cf..4883f07c38d 100644 --- a/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1/nodemetrics.go +++ b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1/nodemetrics.go @@ -35,7 +35,6 @@ type NodeMetricsInterface interface { Get(name string, options v1.GetOptions) (*v1alpha1.NodeMetrics, error) List(opts v1.ListOptions) (*v1alpha1.NodeMetricsList, error) Watch(opts v1.ListOptions) (watch.Interface, error) - NodeMetricsExpansion } @@ -76,8 +75,8 @@ func (c *nodeMetricses) List(opts v1.ListOptions) (result *v1alpha1.NodeMetricsL // Watch returns a watch.Interface that watches the requested nodeMetricses. func (c *nodeMetricses) Watch(opts v1.ListOptions) (watch.Interface, error) { + opts.Watch = true return c.client.Get(). - Prefix("watch"). Resource("nodes"). VersionedParams(&opts, scheme.ParameterCodec). Watch() diff --git a/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1/podmetrics.go b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1/podmetrics.go index e51d7fddae9..0fbb38c68bc 100644 --- a/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1/podmetrics.go +++ b/staging/src/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1/podmetrics.go @@ -35,7 +35,6 @@ type PodMetricsInterface interface { Get(name string, options v1.GetOptions) (*v1alpha1.PodMetrics, error) List(opts v1.ListOptions) (*v1alpha1.PodMetricsList, error) Watch(opts v1.ListOptions) (watch.Interface, error) - PodMetricsExpansion } @@ -80,8 +79,8 @@ func (c *podMetricses) List(opts v1.ListOptions) (result *v1alpha1.PodMetricsLis // Watch returns a watch.Interface that watches the requested podMetricses. func (c *podMetricses) Watch(opts v1.ListOptions) (watch.Interface, error) { + opts.Watch = true return c.client.Get(). - Prefix("watch"). Namespace(c.ns). Resource("pods"). VersionedParams(&opts, scheme.ParameterCodec).