From 00b18446ac460ce9599aaa0d34cb7b26a8e8f08a Mon Sep 17 00:00:00 2001 From: Chao Xu Date: Mon, 11 Jan 2016 11:40:07 -0800 Subject: [PATCH 1/2] allow client-gen genereate typed client with only expansion methods --- .../generators/generator-for-type.go | 48 ++++++++++++------- 1 file changed, 31 insertions(+), 17 deletions(-) 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 843d5d42a0b..2cee12a63cc 100644 --- a/cmd/libs/go2idl/client-gen/generators/generator-for-type.go +++ b/cmd/libs/go2idl/client-gen/generators/generator-for-type.go @@ -84,12 +84,19 @@ func (g *genClientForType) GenerateType(c *generator.Context, t *types.Type, w i } else { sw.Do(getterNonNamesapced, m) } + noMethods := types.ExtractCommentTags("+", t.SecondClosestCommentLines)["noMethods"] == "true" + sw.Do(interfaceTemplate1, m) - // Include the UpdateStatus method if the type has a status - if hasStatus(t) { - sw.Do(interfaceUpdateStatusTemplate, m) + if !noMethods { + sw.Do(interfaceTemplate2, m) + // Include the UpdateStatus method if the type has a status + if hasStatus(t) { + sw.Do(interfaceUpdateStatusTemplate, m) + } + sw.Do(interfaceTemplate3, m) } - sw.Do(interfaceTemplate2, m) + sw.Do(interfaceTemplate4, m) + if namespaced { sw.Do(structNamespaced, m) sw.Do(newStructNamespaced, m) @@ -97,17 +104,20 @@ func (g *genClientForType) GenerateType(c *generator.Context, t *types.Type, w i sw.Do(structNonNamespaced, m) sw.Do(newStructNonNamespaced, m) } - sw.Do(createTemplate, m) - sw.Do(updateTemplate, m) - // Generate the UpdateStatus method if the type has a status - if hasStatus(t) { - sw.Do(updateStatusTemplate, m) + + if !noMethods { + sw.Do(createTemplate, m) + sw.Do(updateTemplate, m) + // Generate the UpdateStatus method if the type has a status + if hasStatus(t) { + sw.Do(updateStatusTemplate, m) + } + sw.Do(deleteTemplate, m) + sw.Do(deleteCollectionTemplate, m) + sw.Do(getTemplate, m) + sw.Do(listTemplate, m) + sw.Do(watchTemplate, m) } - sw.Do(deleteTemplate, m) - sw.Do(deleteCollectionTemplate, m) - sw.Do(getTemplate, m) - sw.Do(listTemplate, m) - sw.Do(watchTemplate, m) return sw.Error() } @@ -132,7 +142,9 @@ type $.type|publicPlural$Getter interface { // this type's interface, typed client will implement this interface. var interfaceTemplate1 = ` // $.type|public$Interface has methods to work with $.type|public$ resources. -type $.type|public$Interface interface { +type $.type|public$Interface interface {` + +var interfaceTemplate2 = ` Create(*$.type|raw$) (*$.type|raw$, error) Update(*$.type|raw$) (*$.type|raw$, error)` @@ -140,12 +152,14 @@ var interfaceUpdateStatusTemplate = ` UpdateStatus(*$.type|raw$) (*$.type|raw$, error)` // template for the Interface -var interfaceTemplate2 = ` +var interfaceTemplate3 = ` Delete(name string, options *$.apiDeleteOptions|raw$) error DeleteCollection(options *$.apiDeleteOptions|raw$, listOptions $.apiListOptions|raw$) error Get(name string) (*$.type|raw$, error) List(opts $.apiListOptions|raw$) (*$.type|raw$List, error) - Watch(opts $.apiListOptions|raw$) ($.watchInterface|raw$, error) + Watch(opts $.apiListOptions|raw$) ($.watchInterface|raw$, error)` + +var interfaceTemplate4 = ` $.type|public$Expansion } ` From b8be5e134068ca99f642939c1aa677c4fde02e59 Mon Sep 17 00:00:00 2001 From: Chao Xu Date: Mon, 11 Jan 2016 11:40:48 -0800 Subject: [PATCH 2/2] generate client for scale, which has only the expansion interface --- pkg/apis/extensions/types.go | 2 + .../unversioned/extensions_client.go | 5 +++ .../unversioned/generated_expansion.go | 2 + .../generated/extensions/unversioned/scale.go | 42 +++++++++++++++++++ 4 files changed, 51 insertions(+) create mode 100644 pkg/client/typed/generated/extensions/unversioned/scale.go diff --git a/pkg/apis/extensions/types.go b/pkg/apis/extensions/types.go index eff26b961d7..54bd36fd025 100644 --- a/pkg/apis/extensions/types.go +++ b/pkg/apis/extensions/types.go @@ -49,6 +49,8 @@ type ScaleStatus struct { Selector map[string]string `json:"selector,omitempty"` } +// +genclient=true,noMethods=true + // represents a scaling request for a resource. type Scale struct { unversioned.TypeMeta `json:",inline"` diff --git a/pkg/client/typed/generated/extensions/unversioned/extensions_client.go b/pkg/client/typed/generated/extensions/unversioned/extensions_client.go index cd939b802af..dcc42541bd6 100644 --- a/pkg/client/typed/generated/extensions/unversioned/extensions_client.go +++ b/pkg/client/typed/generated/extensions/unversioned/extensions_client.go @@ -28,6 +28,7 @@ type ExtensionsInterface interface { HorizontalPodAutoscalersGetter IngressesGetter JobsGetter + ScalesGetter ThirdPartyResourcesGetter } @@ -56,6 +57,10 @@ func (c *ExtensionsClient) Jobs(namespace string) JobInterface { return newJobs(c, namespace) } +func (c *ExtensionsClient) Scales(namespace string) ScaleInterface { + return newScales(c, namespace) +} + func (c *ExtensionsClient) ThirdPartyResources(namespace string) ThirdPartyResourceInterface { return newThirdPartyResources(c, namespace) } diff --git a/pkg/client/typed/generated/extensions/unversioned/generated_expansion.go b/pkg/client/typed/generated/extensions/unversioned/generated_expansion.go index 51c543d9f81..e256c5ce422 100644 --- a/pkg/client/typed/generated/extensions/unversioned/generated_expansion.go +++ b/pkg/client/typed/generated/extensions/unversioned/generated_expansion.go @@ -26,4 +26,6 @@ type IngressExpansion interface{} type JobExpansion interface{} +type ScaleExpansion interface{} + type ThirdPartyResourceExpansion interface{} diff --git a/pkg/client/typed/generated/extensions/unversioned/scale.go b/pkg/client/typed/generated/extensions/unversioned/scale.go new file mode 100644 index 00000000000..7e54bc34743 --- /dev/null +++ b/pkg/client/typed/generated/extensions/unversioned/scale.go @@ -0,0 +1,42 @@ +/* +Copyright 2016 The Kubernetes Authors All rights reserved. + +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 unversioned + +// ScalesGetter has a method to return a ScaleInterface. +// A group's client should implement this interface. +type ScalesGetter interface { + Scales(namespace string) ScaleInterface +} + +// ScaleInterface has methods to work with Scale resources. +type ScaleInterface interface { + ScaleExpansion +} + +// scales implements ScaleInterface +type scales struct { + client *ExtensionsClient + ns string +} + +// newScales returns a Scales +func newScales(c *ExtensionsClient, namespace string) *scales { + return &scales{ + client: c, + ns: namespace, + } +}