From dd357ed86a85f2a832fbbe55d78c05837b56a614 Mon Sep 17 00:00:00 2001 From: Chao Xu Date: Thu, 28 Jan 2016 23:43:47 -0800 Subject: [PATCH] include DiscoveryClient in the generated clientset --- .../generators/generator-for-clientset.go | 29 ++++++-- .../test_release_1_1/clientset.go | 13 ++++ .../release_1_1/clientset.go | 13 ++++ pkg/client/testing/fake/clientset.go | 5 ++ pkg/client/testing/fake/discovery.go | 74 +++++++++++++++++++ pkg/client/unversioned/discovery_client.go | 20 ++++- pkg/client/unversioned/helper.go | 2 +- 7 files changed, 148 insertions(+), 8 deletions(-) create mode 100644 pkg/client/testing/fake/discovery.go diff --git a/cmd/libs/go2idl/client-gen/generators/generator-for-clientset.go b/cmd/libs/go2idl/client-gen/generators/generator-for-clientset.go index bf2199bf978..8641570f199 100644 --- a/cmd/libs/go2idl/client-gen/generators/generator-for-clientset.go +++ b/cmd/libs/go2idl/client-gen/generators/generator-for-clientset.go @@ -97,16 +97,22 @@ func (g *genClientset) GenerateType(c *generator.Context, t *types.Type, w io.Wr } m := map[string]interface{}{ - "allGroups": allGroups, - "Config": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "Config"}), - "DefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: pkgUnversioned, Name: "DefaultKubernetesUserAgent"}), - "RESTClient": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "RESTClient"}), + "allGroups": allGroups, + "Config": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "Config"}), + "DefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: pkgUnversioned, Name: "DefaultKubernetesUserAgent"}), + "RESTClient": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "RESTClient"}), + "DiscoveryInterface": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "DiscoveryInterface"}), + "DiscoveryClient": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "DiscoveryClient"}), + "NewDiscoveryClientForConfig": c.Universe.Function(types.Name{Package: pkgUnversioned, Name: "NewDiscoveryClientForConfig"}), + "NewDiscoveryClientForConfigOrDie": c.Universe.Function(types.Name{Package: pkgUnversioned, Name: "NewDiscoveryClientForConfigOrDie"}), + "NewDiscoveryClient": c.Universe.Function(types.Name{Package: pkgUnversioned, Name: "NewDiscoveryClient"}), } sw.Do(clientsetInterfaceTemplate, m) sw.Do(clientsetTemplate, m) for _, g := range allGroups { sw.Do(clientsetInterfaceImplTemplate, g) } + sw.Do(getDiscoveryTemplate, m) sw.Do(newClientsetForConfigTemplate, m) sw.Do(newClientsetForConfigOrDieTemplate, m) sw.Do(newClientsetForRESTClientTemplate, m) @@ -116,6 +122,7 @@ func (g *genClientset) GenerateType(c *generator.Context, t *types.Type, w io.Wr var clientsetInterfaceTemplate = ` type Interface interface { + Discovery() $.DiscoveryInterface|raw$ $range .allGroups$$.Group$() $.PackageName$.$.Group$Interface $end$ } @@ -125,6 +132,7 @@ var clientsetTemplate = ` // Clientset contains the clients for groups. Each group has exactly one // version included in a Clientset. type Clientset struct { + *$.DiscoveryClient|raw$ $range .allGroups$*$.PackageName$.$.Group$Client $end$ } @@ -136,6 +144,12 @@ func (c *Clientset) $.Group$() $.PackageName$.$.Group$Interface { return c.$.Group$Client } ` +var getDiscoveryTemplate = ` +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() $.DiscoveryInterface|raw$ { + return c.DiscoveryClient +} +` var newClientsetForConfigTemplate = ` // NewForConfig creates a new Clientset for the given config. @@ -147,6 +161,10 @@ $range .allGroups$ clientset.$.Group$Client, err =$.PackageName$.NewForConfig return nil, err } $end$ + clientset.DiscoveryClient, err = $.NewDiscoveryClientForConfig|raw$(c) + if err!=nil { + return nil, err + } return &clientset, nil } ` @@ -158,6 +176,7 @@ func NewForConfigOrDie(c *$.Config|raw$) *Clientset { var clientset Clientset $range .allGroups$ clientset.$.Group$Client =$.PackageName$.NewForConfigOrDie(c) $end$ + clientset.DiscoveryClient = $.NewDiscoveryClientForConfigOrDie|raw$(c) return &clientset } ` @@ -168,7 +187,7 @@ func New(c *$.RESTClient|raw$) *Clientset { var clientset Clientset $range .allGroups$ clientset.$.Group$Client =$.PackageName$.New(c) $end$ - + clientset.DiscoveryClient = $.NewDiscoveryClient|raw$(c) return &clientset } ` diff --git a/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_release_1_1/clientset.go b/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_release_1_1/clientset.go index c389af8c2f9..91e8faab34d 100644 --- a/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_release_1_1/clientset.go +++ b/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_release_1_1/clientset.go @@ -22,12 +22,14 @@ import ( ) type Interface interface { + Discovery() unversioned.DiscoveryInterface Testgroup() testgroup_unversioned.TestgroupInterface } // Clientset contains the clients for groups. Each group has exactly one // version included in a Clientset. type Clientset struct { + *unversioned.DiscoveryClient *testgroup_unversioned.TestgroupClient } @@ -36,6 +38,11 @@ func (c *Clientset) Testgroup() testgroup_unversioned.TestgroupInterface { return c.TestgroupClient } +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() unversioned.DiscoveryInterface { + return c.DiscoveryClient +} + // NewForConfig creates a new Clientset for the given config. func NewForConfig(c *unversioned.Config) (*Clientset, error) { var clientset Clientset @@ -45,6 +52,10 @@ func NewForConfig(c *unversioned.Config) (*Clientset, error) { return nil, err } + clientset.DiscoveryClient, err = unversioned.NewDiscoveryClientForConfig(c) + if err != nil { + return nil, err + } return &clientset, nil } @@ -54,6 +65,7 @@ func NewForConfigOrDie(c *unversioned.Config) *Clientset { var clientset Clientset clientset.TestgroupClient = testgroup_unversioned.NewForConfigOrDie(c) + clientset.DiscoveryClient = unversioned.NewDiscoveryClientForConfigOrDie(c) return &clientset } @@ -62,5 +74,6 @@ func New(c *unversioned.RESTClient) *Clientset { var clientset Clientset clientset.TestgroupClient = testgroup_unversioned.New(c) + clientset.DiscoveryClient = unversioned.NewDiscoveryClient(c) return &clientset } diff --git a/pkg/client/clientset_generated/release_1_1/clientset.go b/pkg/client/clientset_generated/release_1_1/clientset.go index b6c1e6aafd0..88a5cb632ad 100644 --- a/pkg/client/clientset_generated/release_1_1/clientset.go +++ b/pkg/client/clientset_generated/release_1_1/clientset.go @@ -23,6 +23,7 @@ import ( ) type Interface interface { + Discovery() unversioned.DiscoveryInterface Legacy() legacy_unversioned.LegacyInterface Extensions() extensions_unversioned.ExtensionsInterface } @@ -30,6 +31,7 @@ type Interface interface { // Clientset contains the clients for groups. Each group has exactly one // version included in a Clientset. type Clientset struct { + *unversioned.DiscoveryClient *legacy_unversioned.LegacyClient *extensions_unversioned.ExtensionsClient } @@ -44,6 +46,11 @@ func (c *Clientset) Extensions() extensions_unversioned.ExtensionsInterface { return c.ExtensionsClient } +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() unversioned.DiscoveryInterface { + return c.DiscoveryClient +} + // NewForConfig creates a new Clientset for the given config. func NewForConfig(c *unversioned.Config) (*Clientset, error) { var clientset Clientset @@ -57,6 +64,10 @@ func NewForConfig(c *unversioned.Config) (*Clientset, error) { return nil, err } + clientset.DiscoveryClient, err = unversioned.NewDiscoveryClientForConfig(c) + if err != nil { + return nil, err + } return &clientset, nil } @@ -67,6 +78,7 @@ func NewForConfigOrDie(c *unversioned.Config) *Clientset { clientset.LegacyClient = legacy_unversioned.NewForConfigOrDie(c) clientset.ExtensionsClient = extensions_unversioned.NewForConfigOrDie(c) + clientset.DiscoveryClient = unversioned.NewDiscoveryClientForConfigOrDie(c) return &clientset } @@ -76,5 +88,6 @@ func New(c *unversioned.RESTClient) *Clientset { clientset.LegacyClient = legacy_unversioned.New(c) clientset.ExtensionsClient = extensions_unversioned.New(c) + clientset.DiscoveryClient = unversioned.NewDiscoveryClient(c) return &clientset } diff --git a/pkg/client/testing/fake/clientset.go b/pkg/client/testing/fake/clientset.go index e14b0dc08bd..f0e76fbd13e 100644 --- a/pkg/client/testing/fake/clientset.go +++ b/pkg/client/testing/fake/clientset.go @@ -24,6 +24,7 @@ import ( extensions_unversioned_fake "k8s.io/kubernetes/pkg/client/typed/generated/extensions/unversioned/fake" legacy_unversioned "k8s.io/kubernetes/pkg/client/typed/generated/legacy/unversioned" legacy_unversioned_fake "k8s.io/kubernetes/pkg/client/typed/generated/legacy/unversioned/fake" + "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/watch" ) @@ -61,3 +62,7 @@ func (c *Clientset) Legacy() legacy_unversioned.LegacyInterface { func (c *Clientset) Extensions() extensions_unversioned.ExtensionsInterface { return &extensions_unversioned_fake.FakeExtensions{&c.Fake} } + +func (c *Clientset) Discovery() unversioned.DiscoveryInterface { + return &FakeDiscovery{&c.Fake} +} diff --git a/pkg/client/testing/fake/discovery.go b/pkg/client/testing/fake/discovery.go new file mode 100644 index 00000000000..76e672fd343 --- /dev/null +++ b/pkg/client/testing/fake/discovery.go @@ -0,0 +1,74 @@ +/* +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 fake + +import ( + "github.com/emicklei/go-restful/swagger" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/client/testing/core" + "k8s.io/kubernetes/pkg/version" +) + +type FakeDiscovery struct { + *core.Fake +} + +func (c *FakeDiscovery) ServerResourcesForGroupVersion(groupVersion string) (*unversioned.APIResourceList, error) { + action := core.ActionImpl{ + Verb: "get", + Resource: "resource", + } + c.Invokes(action, nil) + return c.Resources[groupVersion], nil +} + +func (c *FakeDiscovery) ServerResources() (map[string]*unversioned.APIResourceList, error) { + action := core.ActionImpl{ + Verb: "get", + Resource: "resource", + } + c.Invokes(action, nil) + return c.Resources, nil +} + +func (c *FakeDiscovery) ServerGroups() (*unversioned.APIGroupList, error) { + return nil, nil +} + +func (c *FakeDiscovery) ServerVersion() (*version.Info, error) { + action := core.ActionImpl{} + action.Verb = "get" + action.Resource = "version" + + c.Invokes(action, nil) + versionInfo := version.Get() + return &versionInfo, nil +} + +func (c *FakeDiscovery) SwaggerSchema(version unversioned.GroupVersion) (*swagger.ApiDeclaration, error) { + action := core.ActionImpl{} + action.Verb = "get" + if version == v1.SchemeGroupVersion { + action.Resource = "/swaggerapi/api/" + version.Version + } else { + action.Resource = "/swaggerapi/apis/" + version.Group + "/" + version.Version + } + + c.Invokes(action, nil) + return &swagger.ApiDeclaration{}, nil +} diff --git a/pkg/client/unversioned/discovery_client.go b/pkg/client/unversioned/discovery_client.go index ccc1c1ce8bd..890f376842c 100644 --- a/pkg/client/unversioned/discovery_client.go +++ b/pkg/client/unversioned/discovery_client.go @@ -214,9 +214,9 @@ func setDiscoveryDefaults(config *Config) error { return nil } -// NewDiscoveryClient creates a new DiscoveryClient for the given config. This client +// NewDiscoveryClientForConfig creates a new DiscoveryClient for the given config. This client // can be used to discover supported resources in the API server. -func NewDiscoveryClient(c *Config) (*DiscoveryClient, error) { +func NewDiscoveryClientForConfig(c *Config) (*DiscoveryClient, error) { config := *c if err := setDiscoveryDefaults(&config); err != nil { return nil, err @@ -224,3 +224,19 @@ func NewDiscoveryClient(c *Config) (*DiscoveryClient, error) { client, err := UnversionedRESTClientFor(&config) return &DiscoveryClient{client}, err } + +// NewDiscoveryClientForConfig creates a new DiscoveryClient for the given config. If +// there is an error, it panics. +func NewDiscoveryClientForConfigOrDie(c *Config) *DiscoveryClient { + client, err := NewDiscoveryClientForConfig(c) + if err != nil { + panic(err) + } + return client + +} + +// New creates a new DiscoveryClient for the given RESTClient. +func NewDiscoveryClient(c *RESTClient) *DiscoveryClient { + return &DiscoveryClient{c} +} diff --git a/pkg/client/unversioned/helper.go b/pkg/client/unversioned/helper.go index 40cfac01048..3bf9554b548 100644 --- a/pkg/client/unversioned/helper.go +++ b/pkg/client/unversioned/helper.go @@ -150,7 +150,7 @@ func New(c *Config) (*Client, error) { } discoveryConfig := *c - discoveryClient, err := NewDiscoveryClient(&discoveryConfig) + discoveryClient, err := NewDiscoveryClientForConfig(&discoveryConfig) if err != nil { return nil, err }