summaryrefslogtreecommitdiff
path: root/vendor/k8s.io/client-go/discovery/restmapper.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/k8s.io/client-go/discovery/restmapper.go')
-rw-r--r--vendor/k8s.io/client-go/discovery/restmapper.go31
1 files changed, 29 insertions, 2 deletions
diff --git a/vendor/k8s.io/client-go/discovery/restmapper.go b/vendor/k8s.io/client-go/discovery/restmapper.go
index 756669001..6d1de8c1b 100644
--- a/vendor/k8s.io/client-go/discovery/restmapper.go
+++ b/vendor/k8s.io/client-go/discovery/restmapper.go
@@ -49,6 +49,7 @@ func NewRESTMapper(groupResources []*APIGroupResources, versionInterfaces meta.V
for _, group := range groupResources {
groupPriority = append(groupPriority, group.Group.Name)
+ // Make sure the preferred version comes first
if len(group.Group.PreferredVersion.Version) != 0 {
preferred := group.Group.PreferredVersion.Version
if _, ok := group.VersionedResources[preferred]; ok {
@@ -72,6 +73,21 @@ func NewRESTMapper(groupResources []*APIGroupResources, versionInterfaces meta.V
continue
}
+ // Add non-preferred versions after the preferred version, in case there are resources that only exist in those versions
+ if discoveryVersion.Version != group.Group.PreferredVersion.Version {
+ resourcePriority = append(resourcePriority, schema.GroupVersionResource{
+ Group: group.Group.Name,
+ Version: discoveryVersion.Version,
+ Resource: meta.AnyResource,
+ })
+
+ kindPriority = append(kindPriority, schema.GroupVersionKind{
+ Group: group.Group.Name,
+ Version: discoveryVersion.Version,
+ Kind: meta.AnyKind,
+ })
+ }
+
gv := schema.GroupVersion{Group: group.Group.Name, Version: discoveryVersion.Version}
versionMapper := meta.NewDefaultRESTMapper([]schema.GroupVersion{gv}, versionInterfaces)
@@ -80,8 +96,19 @@ func NewRESTMapper(groupResources []*APIGroupResources, versionInterfaces meta.V
if !resource.Namespaced {
scope = meta.RESTScopeRoot
}
- versionMapper.Add(gv.WithKind(resource.Kind), scope)
- // TODO only do this if it supports listing
+
+ // this is for legacy resources and servers which don't list singular forms. For those we must still guess.
+ if len(resource.SingularName) == 0 {
+ versionMapper.Add(gv.WithKind(resource.Kind), scope)
+ // TODO this is producing unsafe guesses that don't actually work, but it matches previous behavior
+ versionMapper.Add(gv.WithKind(resource.Kind+"List"), scope)
+ continue
+ }
+
+ plural := gv.WithResource(resource.Name)
+ singular := gv.WithResource(resource.SingularName)
+ versionMapper.AddSpecific(gv.WithKind(resource.Kind), plural, singular, scope)
+ // TODO this is producing unsafe guesses that don't actually work, but it matches previous behavior
versionMapper.Add(gv.WithKind(resource.Kind+"List"), scope)
}
// TODO why is this type not in discovery (at least for "v1")