forked from vmware-archive/kubecfg
/
client.go
104 lines (85 loc) · 2.84 KB
/
client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package utils
import (
"sync"
"github.com/emicklei/go-restful/swagger"
"k8s.io/client-go/discovery"
"k8s.io/client-go/pkg/api/unversioned"
"k8s.io/client-go/pkg/version"
"k8s.io/client-go/rest"
)
type memcachedDiscoveryClient struct {
cl discovery.DiscoveryInterface
lock sync.RWMutex
servergroups *unversioned.APIGroupList
serverresources map[string]*unversioned.APIResourceList
serverresourcesIsComplete bool
}
// NewMemcachedDiscoveryClient creates a new DiscoveryClient that
// caches results in memory
func NewMemcachedDiscoveryClient(cl discovery.DiscoveryInterface) discovery.CachedDiscoveryInterface {
c := &memcachedDiscoveryClient{cl: cl}
c.Invalidate()
return c
}
func (c *memcachedDiscoveryClient) Fresh() bool {
return true
}
func (c *memcachedDiscoveryClient) Invalidate() {
c.lock.Lock()
defer c.lock.Unlock()
c.servergroups = nil
c.serverresources = make(map[string]*unversioned.APIResourceList)
c.serverresourcesIsComplete = false
}
func (c *memcachedDiscoveryClient) RESTClient() rest.Interface {
return c.cl.RESTClient()
}
func (c *memcachedDiscoveryClient) ServerGroups() (*unversioned.APIGroupList, error) {
c.lock.Lock()
defer c.lock.Unlock()
var err error
if c.servergroups != nil {
return c.servergroups, nil
}
c.servergroups, err = c.cl.ServerGroups()
return c.servergroups, err
}
func (c *memcachedDiscoveryClient) ServerResourcesForGroupVersion(groupVersion string) (*unversioned.APIResourceList, error) {
c.lock.Lock()
defer c.lock.Unlock()
var err error
if v := c.serverresources[groupVersion]; v != nil {
return v, nil
}
if c.serverresourcesIsComplete {
return &unversioned.APIResourceList{}, nil
}
c.serverresources[groupVersion], err = c.cl.ServerResourcesForGroupVersion(groupVersion)
return c.serverresources[groupVersion], err
}
func (c *memcachedDiscoveryClient) ServerResources() (map[string]*unversioned.APIResourceList, error) {
c.lock.Lock()
defer c.lock.Unlock()
var err error
if c.serverresourcesIsComplete {
return c.serverresources, nil
}
c.serverresources, err = c.cl.ServerResources()
if err == nil {
c.serverresourcesIsComplete = true
}
return c.serverresources, err
}
func (c *memcachedDiscoveryClient) ServerPreferredResources() ([]unversioned.GroupVersionResource, error) {
return c.cl.ServerPreferredResources()
}
func (c *memcachedDiscoveryClient) ServerPreferredNamespacedResources() ([]unversioned.GroupVersionResource, error) {
return c.cl.ServerPreferredNamespacedResources()
}
func (c *memcachedDiscoveryClient) ServerVersion() (*version.Info, error) {
return c.cl.ServerVersion()
}
func (c *memcachedDiscoveryClient) SwaggerSchema(version unversioned.GroupVersion) (*swagger.ApiDeclaration, error) {
return c.cl.SwaggerSchema(version)
}
var _ discovery.CachedDiscoveryInterface = &memcachedDiscoveryClient{}