diff --git a/pkg/api/meta/restmapper.go b/pkg/api/meta/restmapper.go index bb1d817a2fe..7beadbb773d 100644 --- a/pkg/api/meta/restmapper.go +++ b/pkg/api/meta/restmapper.go @@ -189,9 +189,21 @@ func (m *DefaultRESTMapper) GroupForResource(resource string) (string, error) { // them with group/version tuples. // TODO this should probably become RESTMapping(GroupKind, versions ...string) func (m *DefaultRESTMapper) RESTMapping(kind string, versions ...string) (*RESTMapping, error) { + // TODO, this looks really strange, but once this API is update, the version detection becomes clean again + // because you won't be able to request cross-group kinds + hadVersion := false + for _, gvString := range versions { + currGroupVersion, err := unversioned.ParseGroupVersion(gvString) + if err != nil { + return nil, err + } + if len(currGroupVersion.Version) != 0 { + hadVersion = true + } + } + // Pick an appropriate version var groupVersion *unversioned.GroupVersion - hadVersion := false for _, v := range versions { if len(v) == 0 { continue @@ -202,7 +214,6 @@ func (m *DefaultRESTMapper) RESTMapping(kind string, versions ...string) (*RESTM } currGVK := currGroupVersion.WithKind(kind) - hadVersion = true if _, ok := m.kindToPluralResource[currGVK]; ok { groupVersion = &currGroupVersion break diff --git a/pkg/kubectl/kubectl.go b/pkg/kubectl/kubectl.go index c207cbd33cb..0cfe6e0dabe 100644 --- a/pkg/kubectl/kubectl.go +++ b/pkg/kubectl/kubectl.go @@ -51,21 +51,12 @@ type OutputVersionMapper struct { // RESTMapping implements meta.RESTMapper by prepending the output version to the preferred version list. func (m OutputVersionMapper) RESTMapping(kind string, versions ...string) (*meta.RESTMapping, error) { - preferred := []string{m.OutputVersion} - for _, version := range versions { - if len(version) > 0 { - preferred = append(preferred, version) - } + mapping, err := m.RESTMapper.RESTMapping(kind, m.OutputVersion) + if err == nil { + return mapping, nil } - // if the caller wants to use the default version list, try with the preferred version, and on - // error, use the default behavior. - if len(preferred) == 1 { - if m, err := m.RESTMapper.RESTMapping(kind, preferred...); err == nil { - return m, nil - } - preferred = nil - } - return m.RESTMapper.RESTMapping(kind, preferred...) + + return m.RESTMapper.RESTMapping(kind, versions...) } // ShortcutExpander is a RESTMapper that can be used for Kubernetes