/
mapper.go
90 lines (80 loc) · 2.4 KB
/
mapper.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
package mapper
import (
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/discovery"
"k8s.io/client-go/discovery/cached/memory"
"k8s.io/client-go/rest"
"k8s.io/client-go/restmapper"
)
func New(config *rest.Config) (meta.RESTMapper, error) {
d, err := discovery.NewDiscoveryClientForConfig(config)
if err != nil {
return nil, err
}
cached := memory.NewMemCacheClient(d)
return &retryMapper{
target: restmapper.NewDeferredDiscoveryRESTMapper(cached),
cache: cached,
}, nil
}
type retryMapper struct {
target meta.RESTMapper
cache discovery.CachedDiscoveryInterface
}
func (r *retryMapper) KindFor(resource schema.GroupVersionResource) (schema.GroupVersionKind, error) {
result, err := r.target.KindFor(resource)
if err != nil {
r.cache.Invalidate()
return r.target.KindFor(resource)
}
return result, err
}
func (r *retryMapper) KindsFor(resource schema.GroupVersionResource) ([]schema.GroupVersionKind, error) {
result, err := r.target.KindsFor(resource)
if err != nil {
r.cache.Invalidate()
return r.target.KindsFor(resource)
}
return result, err
}
func (r *retryMapper) ResourceFor(input schema.GroupVersionResource) (schema.GroupVersionResource, error) {
result, err := r.target.ResourceFor(input)
if err != nil {
r.cache.Invalidate()
return r.target.ResourceFor(input)
}
return result, err
}
func (r *retryMapper) ResourcesFor(input schema.GroupVersionResource) ([]schema.GroupVersionResource, error) {
result, err := r.target.ResourcesFor(input)
if err != nil {
r.cache.Invalidate()
return r.target.ResourcesFor(input)
}
return result, err
}
func (r *retryMapper) RESTMapping(gk schema.GroupKind, versions ...string) (*meta.RESTMapping, error) {
result, err := r.target.RESTMapping(gk, versions...)
if err != nil {
r.cache.Invalidate()
return r.target.RESTMapping(gk, versions...)
}
return result, err
}
func (r *retryMapper) RESTMappings(gk schema.GroupKind, versions ...string) ([]*meta.RESTMapping, error) {
result, err := r.target.RESTMappings(gk, versions...)
if err != nil {
r.cache.Invalidate()
return r.target.RESTMappings(gk, versions...)
}
return result, err
}
func (r *retryMapper) ResourceSingularizer(resource string) (singular string, err error) {
result, err := r.target.ResourceSingularizer(resource)
if err != nil {
r.cache.Invalidate()
return r.target.ResourceSingularizer(resource)
}
return result, err
}