func (m *DefaultRESTMapper) ResourcesFor(resource unversioned.GroupVersionResource) ([]unversioned.GroupVersionResource, error) { hasResource := len(resource.Resource) > 0 hasGroup := len(resource.Group) > 0 hasVersion := len(resource.Version) > 0 if !hasResource { return nil, fmt.Errorf("a resource must be present, got: %v", resource) } ret := []unversioned.GroupVersionResource{} switch { // fully qualified. Find the exact match case hasGroup && hasVersion: for plural, singular := range m.pluralToSingular { if singular == resource { ret = append(ret, plural) break } if plural == resource { ret = append(ret, plural) break } } case hasGroup: requestedGroupResource := resource.GroupResource() for currResource := range m.pluralToSingular { if currResource.GroupResource() == requestedGroupResource { ret = append(ret, currResource) } } case hasVersion: for currResource := range m.pluralToSingular { if currResource.Version == resource.Version && currResource.Resource == resource.Resource { ret = append(ret, currResource) } } default: for currResource := range m.pluralToSingular { if currResource.Resource == resource.Resource { ret = append(ret, currResource) } } } if len(ret) == 0 { return nil, fmt.Errorf("no resource %v has been defined; known resources: %v", resource, m.pluralToSingular) } sort.Sort(resourceByPreferredGroupVersion{ret, m.defaultGroupVersions}) return ret, nil }
func (m *DefaultRESTMapper) KindsFor(input unversioned.GroupVersionResource) ([]unversioned.GroupVersionKind, error) { resource := input.GroupVersion().WithResource(strings.ToLower(input.Resource)) hasResource := len(resource.Resource) > 0 hasGroup := len(resource.Group) > 0 hasVersion := len(resource.Version) > 0 if !hasResource { return nil, fmt.Errorf("a resource must be present, got: %v", resource) } ret := []unversioned.GroupVersionKind{} switch { // fully qualified. Find the exact match case hasGroup && hasVersion: kind, exists := m.resourceToKind[resource] if exists { ret = append(ret, kind) } case hasGroup: requestedGroupResource := resource.GroupResource() for currResource, currKind := range m.resourceToKind { if currResource.GroupResource() == requestedGroupResource { ret = append(ret, currKind) } } case hasVersion: for currResource, currKind := range m.resourceToKind { if currResource.Version == resource.Version && currResource.Resource == resource.Resource { ret = append(ret, currKind) } } default: for currResource, currKind := range m.resourceToKind { if currResource.Resource == resource.Resource { ret = append(ret, currKind) } } } if len(ret) == 0 { return nil, fmt.Errorf("no kind %v has been defined; known resources: %v", resource, m.pluralToSingular) } sort.Sort(kindByPreferredGroupVersion{ret, m.defaultGroupVersions}) return ret, nil }