Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 618050e

Browse files
committed
client-go: extend discovery intf with ServerGroupsAndResources
1 parent 57d0f9d commit 618050e

File tree

10 files changed

+147
-35
lines changed

10 files changed

+147
-35
lines changed

pkg/controller/garbagecollector/garbagecollector_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -948,10 +948,15 @@ func (_ *fakeServerResources) ServerResourcesForGroupVersion(groupVersion string
948948
return nil, nil
949949
}
950950

951+
// Deprecated: use ServerGroupsAndResources instead.
951952
func (_ *fakeServerResources) ServerResources() ([]*metav1.APIResourceList, error) {
952953
return nil, nil
953954
}
954955

956+
func (_ *fakeServerResources) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
957+
return nil, nil, nil
958+
}
959+
955960
func (f *fakeServerResources) ServerPreferredResources() ([]*metav1.APIResourceList, error) {
956961
f.Lock.Lock()
957962
defer f.Lock.Unlock()

pkg/kubectl/cmd/testing/fake.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,10 +275,15 @@ func (d *fakeCachedDiscoveryClient) Fresh() bool {
275275
func (d *fakeCachedDiscoveryClient) Invalidate() {
276276
}
277277

278+
// Deprecated: use ServerGroupsAndResources instead.
278279
func (d *fakeCachedDiscoveryClient) ServerResources() ([]*metav1.APIResourceList, error) {
279280
return []*metav1.APIResourceList{}, nil
280281
}
281282

283+
func (d *fakeCachedDiscoveryClient) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
284+
return []*metav1.APIGroup{}, []*metav1.APIResourceList{}, nil
285+
}
286+
282287
// TestFactory extends cmdutil.Factory
283288
type TestFactory struct {
284289
cmdutil.Factory

pkg/kubectl/cmd/top/top_pod_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,10 +405,16 @@ func (d *fakeDiscovery) ServerResourcesForGroupVersion(groupVersion string) (*me
405405
}
406406

407407
// ServerResources returns the supported resources for all groups and versions.
408+
// Deprecated: use ServerGroupsAndResources instead.
408409
func (d *fakeDiscovery) ServerResources() ([]*metav1.APIResourceList, error) {
409410
return nil, nil
410411
}
411412

413+
// ServerGroupsAndResources returns the supported groups and resources for all groups and versions.
414+
func (d *fakeDiscovery) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
415+
return nil, nil, nil
416+
}
417+
412418
// ServerPreferredResources returns the supported resources with the version preferred by the
413419
// server.
414420
func (d *fakeDiscovery) ServerPreferredResources() ([]*metav1.APIResourceList, error) {

staging/src/k8s.io/client-go/discovery/cached/memcache.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,16 @@ func (d *memCacheClient) ServerResourcesForGroupVersion(groupVersion string) (*m
118118
}
119119

120120
// ServerResources returns the supported resources for all groups and versions.
121+
// Deprecated: use ServerGroupsAndResources instead.
121122
func (d *memCacheClient) ServerResources() ([]*metav1.APIResourceList, error) {
122123
return discovery.ServerResources(d)
123124
}
124125

126+
// ServerGroupsAndResources returns the groups and supported resources for all groups and versions.
127+
func (d *memCacheClient) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
128+
return discovery.ServerGroupsAndResources(d)
129+
}
130+
125131
func (d *memCacheClient) ServerGroups() (*metav1.APIGroupList, error) {
126132
d.lock.Lock()
127133
defer d.lock.Unlock()

staging/src/k8s.io/client-go/discovery/cached_discovery.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,15 @@ func (d *CachedDiscoveryClient) ServerResourcesForGroupVersion(groupVersion stri
9090
}
9191

9292
// ServerResources returns the supported resources for all groups and versions.
93+
// Deprecated: use ServerGroupsAndResources instead.
9394
func (d *CachedDiscoveryClient) ServerResources() ([]*metav1.APIResourceList, error) {
94-
return ServerResources(d)
95+
_, rs, err := ServerGroupsAndResources(d)
96+
return rs, err
97+
}
98+
99+
// ServerGroupsAndResources returns the supported groups and resources for all groups and versions.
100+
func (d *CachedDiscoveryClient) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
101+
return ServerGroupsAndResources(d)
95102
}
96103

97104
// ServerGroups returns the supported groups, with information like supported versions and the

staging/src/k8s.io/client-go/discovery/cached_discovery_test.go

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ func (c *fakeDiscoveryClient) RESTClient() restclient.Interface {
112112

113113
func (c *fakeDiscoveryClient) ServerGroups() (*metav1.APIGroupList, error) {
114114
c.groupCalls = c.groupCalls + 1
115+
return c.serverGroups()
116+
}
117+
118+
func (c *fakeDiscoveryClient) serverGroups() (*metav1.APIGroupList, error) {
115119
return &metav1.APIGroupList{
116120
Groups: []metav1.APIGroup{
117121
{
@@ -140,12 +144,26 @@ func (c *fakeDiscoveryClient) ServerResourcesForGroupVersion(groupVersion string
140144
return nil, errors.NewNotFound(schema.GroupResource{}, "")
141145
}
142146

147+
// Deprecated: use ServerGroupsAndResources instead.
143148
func (c *fakeDiscoveryClient) ServerResources() ([]*metav1.APIResourceList, error) {
149+
_, rs, err := c.ServerGroupsAndResources()
150+
return rs, err
151+
}
152+
153+
func (c *fakeDiscoveryClient) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
144154
c.resourceCalls = c.resourceCalls + 1
155+
156+
gs, _ := c.serverGroups()
157+
resultGroups := []*metav1.APIGroup{}
158+
for i := range gs.Groups {
159+
resultGroups = append(resultGroups, &gs.Groups[i])
160+
}
161+
145162
if c.serverResourcesHandler != nil {
146-
return c.serverResourcesHandler()
163+
rs, err := c.serverResourcesHandler()
164+
return resultGroups, rs, err
147165
}
148-
return []*metav1.APIResourceList{}, nil
166+
return resultGroups, []*metav1.APIResourceList{}, nil
149167
}
150168

151169
func (c *fakeDiscoveryClient) ServerPreferredResources() ([]*metav1.APIResourceList, error) {

staging/src/k8s.io/client-go/discovery/discovery_client.go

Lines changed: 54 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,28 @@ type ServerResourcesInterface interface {
8888
// ServerResourcesForGroupVersion returns the supported resources for a group and version.
8989
ServerResourcesForGroupVersion(groupVersion string) (*metav1.APIResourceList, error)
9090
// ServerResources returns the supported resources for all groups and versions.
91+
//
92+
// The returned resource list might be non-nil with partial results even in the case of
93+
// non-nil error.
94+
//
95+
// Deprecated: use ServerGroupsAndResources instead.
9196
ServerResources() ([]*metav1.APIResourceList, error)
97+
// ServerResources returns the supported groups and resources for all groups and versions.
98+
//
99+
// The returned group and resource lists might be non-nil with partial results even in the
100+
// case of non-nil error.
101+
ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error)
92102
// ServerPreferredResources returns the supported resources with the version preferred by the
93103
// server.
104+
//
105+
// The returned group and resource lists might be non-nil with partial results even in the
106+
// case of non-nil error.
94107
ServerPreferredResources() ([]*metav1.APIResourceList, error)
95108
// ServerPreferredNamespacedResources returns the supported namespaced resources with the
96109
// version preferred by the server.
110+
//
111+
// The returned resource list might be non-nil with partial results even in the case of
112+
// non-nil error.
97113
ServerPreferredNamespacedResources() ([]*metav1.APIResourceList, error)
98114
}
99115

@@ -191,14 +207,18 @@ func (d *DiscoveryClient) ServerResourcesForGroupVersion(groupVersion string) (r
191207
return resources, nil
192208
}
193209

194-
// serverResources returns the supported resources for all groups and versions.
195-
func (d *DiscoveryClient) serverResources() ([]*metav1.APIResourceList, error) {
196-
return ServerResources(d)
197-
}
198-
199210
// ServerResources returns the supported resources for all groups and versions.
211+
// Deprecated: use ServerGroupsAndResources instead.
200212
func (d *DiscoveryClient) ServerResources() ([]*metav1.APIResourceList, error) {
201-
return withRetries(defaultRetries, d.serverResources)
213+
_, rs, err := d.ServerGroupsAndResources()
214+
return rs, err
215+
}
216+
217+
// ServerGroupsAndResources returns the supported resources for all groups and versions.
218+
func (d *DiscoveryClient) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
219+
return withRetries(defaultRetries, func() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
220+
return ServerGroupsAndResources(d)
221+
})
202222
}
203223

204224
// ErrGroupDiscoveryFailed is returned if one or more API groups fail to load.
@@ -224,23 +244,28 @@ func IsGroupDiscoveryFailedError(err error) bool {
224244
return err != nil && ok
225245
}
226246

227-
// serverPreferredResources returns the supported resources with the version preferred by the server.
228-
func (d *DiscoveryClient) serverPreferredResources() ([]*metav1.APIResourceList, error) {
229-
return ServerPreferredResources(d)
230-
}
231-
232247
// ServerResources uses the provided discovery interface to look up supported resources for all groups and versions.
248+
// Deprecated: use ServerGroupsAndResources instead.
233249
func ServerResources(d DiscoveryInterface) ([]*metav1.APIResourceList, error) {
234-
apiGroups, err := d.ServerGroups()
235-
if err != nil {
236-
return nil, err
250+
_, rs, err := ServerGroupsAndResources(d)
251+
return rs, err
252+
}
253+
254+
func ServerGroupsAndResources(d DiscoveryInterface) ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
255+
sgs, err := d.ServerGroups()
256+
if sgs == nil {
257+
return nil, nil, err
258+
}
259+
resultGroups := []*metav1.APIGroup{}
260+
for i := range sgs.Groups {
261+
resultGroups = append(resultGroups, &sgs.Groups[i])
237262
}
238263

239-
groupVersionResources, failedGroups := fetchGroupVersionResources(d, apiGroups)
264+
groupVersionResources, failedGroups := fetchGroupVersionResources(d, sgs)
240265

241266
// order results by group/version discovery order
242267
result := []*metav1.APIResourceList{}
243-
for _, apiGroup := range apiGroups.Groups {
268+
for _, apiGroup := range sgs.Groups {
244269
for _, version := range apiGroup.Versions {
245270
gv := schema.GroupVersion{Group: apiGroup.Name, Version: version.Version}
246271
if resources, ok := groupVersionResources[gv]; ok {
@@ -250,10 +275,10 @@ func ServerResources(d DiscoveryInterface) ([]*metav1.APIResourceList, error) {
250275
}
251276

252277
if len(failedGroups) == 0 {
253-
return result, nil
278+
return resultGroups, result, nil
254279
}
255280

256-
return result, &ErrGroupDiscoveryFailed{Groups: failedGroups}
281+
return resultGroups, result, &ErrGroupDiscoveryFailed{Groups: failedGroups}
257282
}
258283

259284
// ServerPreferredResources uses the provided discovery interface to look up preferred resources
@@ -357,7 +382,11 @@ func fetchGroupVersionResources(d DiscoveryInterface, apiGroups *metav1.APIGroup
357382
// ServerPreferredResources returns the supported resources with the version preferred by the
358383
// server.
359384
func (d *DiscoveryClient) ServerPreferredResources() ([]*metav1.APIResourceList, error) {
360-
return withRetries(defaultRetries, d.serverPreferredResources)
385+
_, rs, err := withRetries(defaultRetries, func() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
386+
rs, err := ServerPreferredResources(d)
387+
return nil, rs, err
388+
})
389+
return rs, err
361390
}
362391

363392
// ServerPreferredNamespacedResources returns the supported namespaced resources with the
@@ -412,19 +441,20 @@ func (d *DiscoveryClient) OpenAPISchema() (*openapi_v2.Document, error) {
412441
}
413442

414443
// withRetries retries the given recovery function in case the groups supported by the server change after ServerGroup() returns.
415-
func withRetries(maxRetries int, f func() ([]*metav1.APIResourceList, error)) ([]*metav1.APIResourceList, error) {
444+
func withRetries(maxRetries int, f func() ([]*metav1.APIGroup, []*metav1.APIResourceList, error)) ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
416445
var result []*metav1.APIResourceList
446+
var resultGroups []*metav1.APIGroup
417447
var err error
418448
for i := 0; i < maxRetries; i++ {
419-
result, err = f()
449+
resultGroups, result, err = f()
420450
if err == nil {
421-
return result, nil
451+
return resultGroups, result, nil
422452
}
423453
if _, ok := err.(*ErrGroupDiscoveryFailed); !ok {
424-
return nil, err
454+
return nil, nil, err
425455
}
426456
}
427-
return result, err
457+
return resultGroups, result, err
428458
}
429459

430460
func setDiscoveryDefaults(config *restclient.Config) error {

staging/src/k8s.io/client-go/discovery/fake/discovery.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,29 @@ func (c *FakeDiscovery) ServerResourcesForGroupVersion(groupVersion string) (*me
5353
}
5454

5555
// ServerResources returns the supported resources for all groups and versions.
56+
// Deprecated: use ServerGroupsAndResources instead.
5657
func (c *FakeDiscovery) ServerResources() ([]*metav1.APIResourceList, error) {
58+
_, rs, err := c.ServerGroupsAndResources()
59+
return rs, err
60+
}
61+
62+
// ServerGroupsAndResources returns the supported groups and resources for all groups and versions.
63+
func (c *FakeDiscovery) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
64+
sgs, err := c.ServerGroups()
65+
if err != nil {
66+
return nil, nil, err
67+
}
68+
resultGroups := []*metav1.APIGroup{}
69+
for i := range sgs.Groups {
70+
resultGroups = append(resultGroups, &sgs.Groups[i])
71+
}
72+
5773
action := testing.ActionImpl{
5874
Verb: "get",
5975
Resource: schema.GroupVersionResource{Resource: "resource"},
6076
}
6177
c.Invokes(action, nil)
62-
return c.Resources, nil
78+
return resultGroups, c.Resources, nil
6379
}
6480

6581
// ServerPreferredResources returns the supported resources with the version

staging/src/k8s.io/client-go/restmapper/discovery_test.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,9 @@ func (d *fakeFailingDiscovery) ServerGroups() (*metav1.APIGroupList, error) {
391391
return &metav1.APIGroupList{Groups: d.groups}, d.groupsErr
392392
}
393393

394+
func (d *fakeFailingDiscovery) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
395+
return ServerGroupsAndResources(d)
396+
}
394397
func (d *fakeFailingDiscovery) ServerResourcesForGroupVersion(groupVersion string) (*metav1.APIResourceList, error) {
395398
if rs, found := d.resourcesForGroupVersion[groupVersion]; found {
396399
return rs, d.resourcesForGroupVersionErr[groupVersion]
@@ -449,6 +452,10 @@ func (c *fakeCachedDiscoveryInterface) ServerGroups() (*metav1.APIGroupList, err
449452
return &metav1.APIGroupList{}, nil
450453
}
451454

455+
func (c *fakeCachedDiscoveryInterface) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
456+
return ServerGroupsAndResources(c)
457+
}
458+
452459
func (c *fakeCachedDiscoveryInterface) ServerResourcesForGroupVersion(groupVersion string) (*metav1.APIResourceList, error) {
453460
if c.enabledGroupA && groupVersion == "a/v1" {
454461
return &aResources, nil
@@ -457,12 +464,9 @@ func (c *fakeCachedDiscoveryInterface) ServerResourcesForGroupVersion(groupVersi
457464
return nil, errors.NewNotFound(schema.GroupResource{}, "")
458465
}
459466

467+
// Deprecated: use ServerGroupsAndResources instead.
460468
func (c *fakeCachedDiscoveryInterface) ServerResources() ([]*metav1.APIResourceList, error) {
461-
if c.enabledGroupA {
462-
av1, _ := c.ServerResourcesForGroupVersion("a/v1")
463-
return []*metav1.APIResourceList{av1}, nil
464-
}
465-
return []*metav1.APIResourceList{}, nil
469+
return ServerResources(c)
466470
}
467471

468472
func (c *fakeCachedDiscoveryInterface) ServerPreferredResources() ([]*metav1.APIResourceList, error) {

staging/src/k8s.io/client-go/restmapper/shortcut_test.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,11 +265,26 @@ func (c *fakeDiscoveryClient) ServerResourcesForGroupVersion(groupVersion string
265265
return nil, errors.NewNotFound(schema.GroupResource{}, "")
266266
}
267267

268+
// Deprecated: use ServerGroupsAndResources instead.
268269
func (c *fakeDiscoveryClient) ServerResources() ([]*metav1.APIResourceList, error) {
270+
_, rs, err := c.ServerGroupsAndResources()
271+
return rs, err
272+
}
273+
274+
func (c *fakeDiscoveryClient) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav1.APIResourceList, error) {
275+
sgs, err := c.ServerGroups()
276+
if err != nil {
277+
return nil, nil, err
278+
}
279+
resultGroups := []*metav1.APIGroup{}
280+
for i := range sgs.Groups {
281+
resultGroups = append(resultGroups, &sgs.Groups[i])
282+
}
269283
if c.serverResourcesHandler != nil {
270-
return c.serverResourcesHandler()
284+
rs, err := c.serverResourcesHandler()
285+
return resultGroups, rs, err
271286
}
272-
return []*metav1.APIResourceList{}, nil
287+
return resultGroups, []*metav1.APIResourceList{}, nil
273288
}
274289

275290
func (c *fakeDiscoveryClient) ServerPreferredResources() ([]*metav1.APIResourceList, error) {

0 commit comments

Comments
 (0)