// ResolveResource returns the resource type and name of the resourceString. // If the resource string has no specified type, defaultResource will be returned. func ResolveResource(defaultResource, resourceString string, mapper meta.RESTMapper) (string, string, error) { if mapper == nil { return "", "", errors.New("mapper cannot be nil") } var name string parts := strings.Split(resourceString, "/") switch len(parts) { case 1: name = parts[0] case 2: partialResource := unversioned.GroupVersionResource{Resource: parts[0]} gvrs, err := mapper.ResourcesFor(partialResource) if err != nil { return "", "", err } if len(gvrs) == 0 { return gvrs[0].Resource, parts[1], nil } groupResource := gvrs[0].GroupResource() for _, gvr := range gvrs[1:] { if groupResource != gvr.GroupResource() { return "", "", &meta.AmbiguousResourceError{PartialResource: partialResource, MatchingResources: gvrs} } } return gvrs[0].Resource, parts[1], nil default: return "", "", fmt.Errorf("invalid resource format: %s", resourceString) } return defaultResource, name, nil }