mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	fix ShortcutRESTMapper and prevent it from ever silently failing again
This commit is contained in:
		@@ -26,7 +26,6 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api/meta"
 | 
						"k8s.io/kubernetes/pkg/api/meta"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api/unversioned"
 | 
						"k8s.io/kubernetes/pkg/api/unversioned"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apis/extensions"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const kubectlAnnotationPrefix = "kubectl.kubernetes.io/"
 | 
					const kubectlAnnotationPrefix = "kubectl.kubernetes.io/"
 | 
				
			||||||
@@ -75,53 +74,72 @@ func (m OutputVersionMapper) RESTMapping(gk unversioned.GroupKind, versions ...s
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ShortcutExpander is a RESTMapper that can be used for Kubernetes
 | 
					// ShortcutExpander is a RESTMapper that can be used for Kubernetes
 | 
				
			||||||
// resources.
 | 
					// resources.  It expands the resource first, then invokes the wrapped RESTMapper
 | 
				
			||||||
type ShortcutExpander struct {
 | 
					type ShortcutExpander struct {
 | 
				
			||||||
	meta.RESTMapper
 | 
						RESTMapper meta.RESTMapper
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var _ meta.RESTMapper = &ShortcutExpander{}
 | 
					var _ meta.RESTMapper = &ShortcutExpander{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// KindFor implements meta.RESTMapper. It expands the resource first, then invokes the wrapped
 | 
					 | 
				
			||||||
// mapper.
 | 
					 | 
				
			||||||
func (e ShortcutExpander) KindFor(resource unversioned.GroupVersionResource) (unversioned.GroupVersionKind, error) {
 | 
					func (e ShortcutExpander) KindFor(resource unversioned.GroupVersionResource) (unversioned.GroupVersionKind, error) {
 | 
				
			||||||
	resource = expandResourceShortcut(resource)
 | 
						return e.RESTMapper.KindFor(expandResourceShortcut(resource))
 | 
				
			||||||
	return e.RESTMapper.KindFor(resource)
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e ShortcutExpander) KindsFor(resource unversioned.GroupVersionResource) ([]unversioned.GroupVersionKind, error) {
 | 
				
			||||||
 | 
						return e.RESTMapper.KindsFor(expandResourceShortcut(resource))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e ShortcutExpander) ResourcesFor(resource unversioned.GroupVersionResource) ([]unversioned.GroupVersionResource, error) {
 | 
				
			||||||
 | 
						return e.RESTMapper.ResourcesFor(expandResourceShortcut(resource))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e ShortcutExpander) ResourceFor(resource unversioned.GroupVersionResource) (unversioned.GroupVersionResource, error) {
 | 
				
			||||||
 | 
						return e.RESTMapper.ResourceFor(expandResourceShortcut(resource))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ResourceSingularizer expands the named resource and then singularizes it.
 | 
					 | 
				
			||||||
func (e ShortcutExpander) ResourceSingularizer(resource string) (string, error) {
 | 
					func (e ShortcutExpander) ResourceSingularizer(resource string) (string, error) {
 | 
				
			||||||
	return e.RESTMapper.ResourceSingularizer(expandResourceShortcut(unversioned.GroupVersionResource{Resource: resource}).Resource)
 | 
						return e.RESTMapper.ResourceSingularizer(expandResourceShortcut(unversioned.GroupVersionResource{Resource: resource}).Resource)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e ShortcutExpander) RESTMapping(gk unversioned.GroupKind, versions ...string) (*meta.RESTMapping, error) {
 | 
				
			||||||
 | 
						return e.RESTMapper.RESTMapping(gk, versions...)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e ShortcutExpander) AliasesForResource(resource string) ([]string, bool) {
 | 
				
			||||||
 | 
						return e.RESTMapper.AliasesForResource(expandResourceShortcut(unversioned.GroupVersionResource{Resource: resource}).Resource)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// shortForms is the list of short names to their expanded names
 | 
				
			||||||
 | 
					var shortForms = map[string]string{
 | 
				
			||||||
 | 
						// Please keep this alphabetized
 | 
				
			||||||
 | 
						// If you add an entry here, please also take a look at pkg/kubectl/cmd/cmd.go
 | 
				
			||||||
 | 
						// and add an entry to valid_resources when appropriate.
 | 
				
			||||||
 | 
						"cs":     "componentstatuses",
 | 
				
			||||||
 | 
						"ds":     "daemonsets",
 | 
				
			||||||
 | 
						"ep":     "endpoints",
 | 
				
			||||||
 | 
						"ev":     "events",
 | 
				
			||||||
 | 
						"hpa":    "horizontalpodautoscalers",
 | 
				
			||||||
 | 
						"ing":    "ingresses",
 | 
				
			||||||
 | 
						"limits": "limitranges",
 | 
				
			||||||
 | 
						"no":     "nodes",
 | 
				
			||||||
 | 
						"ns":     "namespaces",
 | 
				
			||||||
 | 
						"po":     "pods",
 | 
				
			||||||
 | 
						"psp":    "podSecurityPolicies",
 | 
				
			||||||
 | 
						"pvc":    "persistentvolumeclaims",
 | 
				
			||||||
 | 
						"pv":     "persistentvolumes",
 | 
				
			||||||
 | 
						"quota":  "resourcequotas",
 | 
				
			||||||
 | 
						"rc":     "replicationcontrollers",
 | 
				
			||||||
 | 
						"rs":     "replicasets",
 | 
				
			||||||
 | 
						"svc":    "services",
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// expandResourceShortcut will return the expanded version of resource
 | 
					// expandResourceShortcut will return the expanded version of resource
 | 
				
			||||||
// (something that a pkg/api/meta.RESTMapper can understand), if it is
 | 
					// (something that a pkg/api/meta.RESTMapper can understand), if it is
 | 
				
			||||||
// indeed a shortcut. Otherwise, will return resource unmodified.
 | 
					// indeed a shortcut. Otherwise, will return resource unmodified.
 | 
				
			||||||
func expandResourceShortcut(resource unversioned.GroupVersionResource) unversioned.GroupVersionResource {
 | 
					func expandResourceShortcut(resource unversioned.GroupVersionResource) unversioned.GroupVersionResource {
 | 
				
			||||||
	shortForms := map[string]unversioned.GroupVersionResource{
 | 
					 | 
				
			||||||
		// Please keep this alphabetized
 | 
					 | 
				
			||||||
		// If you add an entry here, please also take a look at pkg/kubectl/cmd/cmd.go
 | 
					 | 
				
			||||||
		// and add an entry to valid_resources when appropriate.
 | 
					 | 
				
			||||||
		"cs":     api.SchemeGroupVersion.WithResource("componentstatuses"),
 | 
					 | 
				
			||||||
		"ds":     extensions.SchemeGroupVersion.WithResource("daemonsets"),
 | 
					 | 
				
			||||||
		"ep":     api.SchemeGroupVersion.WithResource("endpoints"),
 | 
					 | 
				
			||||||
		"ev":     api.SchemeGroupVersion.WithResource("events"),
 | 
					 | 
				
			||||||
		"hpa":    extensions.SchemeGroupVersion.WithResource("horizontalpodautoscalers"),
 | 
					 | 
				
			||||||
		"ing":    extensions.SchemeGroupVersion.WithResource("ingresses"),
 | 
					 | 
				
			||||||
		"limits": api.SchemeGroupVersion.WithResource("limitranges"),
 | 
					 | 
				
			||||||
		"no":     api.SchemeGroupVersion.WithResource("nodes"),
 | 
					 | 
				
			||||||
		"ns":     api.SchemeGroupVersion.WithResource("namespaces"),
 | 
					 | 
				
			||||||
		"po":     api.SchemeGroupVersion.WithResource("pods"),
 | 
					 | 
				
			||||||
		"psp":    api.SchemeGroupVersion.WithResource("podSecurityPolicies"),
 | 
					 | 
				
			||||||
		"pvc":    api.SchemeGroupVersion.WithResource("persistentvolumeclaims"),
 | 
					 | 
				
			||||||
		"pv":     api.SchemeGroupVersion.WithResource("persistentvolumes"),
 | 
					 | 
				
			||||||
		"quota":  api.SchemeGroupVersion.WithResource("resourcequotas"),
 | 
					 | 
				
			||||||
		"rc":     api.SchemeGroupVersion.WithResource("replicationcontrollers"),
 | 
					 | 
				
			||||||
		"rs":     extensions.SchemeGroupVersion.WithResource("replicasets"),
 | 
					 | 
				
			||||||
		"svc":    api.SchemeGroupVersion.WithResource("services"),
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if expanded, ok := shortForms[resource.Resource]; ok {
 | 
						if expanded, ok := shortForms[resource.Resource]; ok {
 | 
				
			||||||
		return expanded
 | 
							// don't change the group or version that's already been specified
 | 
				
			||||||
 | 
							resource.Resource = expanded
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return resource
 | 
						return resource
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user