You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
3.9 KiB
121 lines
3.9 KiB
/* |
|
Copyright 2014 The Kubernetes Authors. |
|
|
|
Licensed under the Apache License, Version 2.0 (the "License"); |
|
you may not use this file except in compliance with the License. |
|
You may obtain a copy of the License at |
|
|
|
http://www.apache.org/licenses/LICENSE-2.0 |
|
|
|
Unless required by applicable law or agreed to in writing, software |
|
distributed under the License is distributed on an "AS IS" BASIS, |
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
See the License for the specific language governing permissions and |
|
limitations under the License. |
|
*/ |
|
|
|
package meta |
|
|
|
import ( |
|
"fmt" |
|
|
|
"k8s.io/apimachinery/pkg/runtime/schema" |
|
"k8s.io/apimachinery/pkg/util/sets" |
|
) |
|
|
|
// AmbiguousResourceError is returned if the RESTMapper finds multiple matches for a resource |
|
type AmbiguousResourceError struct { |
|
PartialResource schema.GroupVersionResource |
|
|
|
MatchingResources []schema.GroupVersionResource |
|
MatchingKinds []schema.GroupVersionKind |
|
} |
|
|
|
func (e *AmbiguousResourceError) Error() string { |
|
switch { |
|
case len(e.MatchingKinds) > 0 && len(e.MatchingResources) > 0: |
|
return fmt.Sprintf("%v matches multiple resources %v and kinds %v", e.PartialResource, e.MatchingResources, e.MatchingKinds) |
|
case len(e.MatchingKinds) > 0: |
|
return fmt.Sprintf("%v matches multiple kinds %v", e.PartialResource, e.MatchingKinds) |
|
case len(e.MatchingResources) > 0: |
|
return fmt.Sprintf("%v matches multiple resources %v", e.PartialResource, e.MatchingResources) |
|
} |
|
return fmt.Sprintf("%v matches multiple resources or kinds", e.PartialResource) |
|
} |
|
|
|
// AmbiguousKindError is returned if the RESTMapper finds multiple matches for a kind |
|
type AmbiguousKindError struct { |
|
PartialKind schema.GroupVersionKind |
|
|
|
MatchingResources []schema.GroupVersionResource |
|
MatchingKinds []schema.GroupVersionKind |
|
} |
|
|
|
func (e *AmbiguousKindError) Error() string { |
|
switch { |
|
case len(e.MatchingKinds) > 0 && len(e.MatchingResources) > 0: |
|
return fmt.Sprintf("%v matches multiple resources %v and kinds %v", e.PartialKind, e.MatchingResources, e.MatchingKinds) |
|
case len(e.MatchingKinds) > 0: |
|
return fmt.Sprintf("%v matches multiple kinds %v", e.PartialKind, e.MatchingKinds) |
|
case len(e.MatchingResources) > 0: |
|
return fmt.Sprintf("%v matches multiple resources %v", e.PartialKind, e.MatchingResources) |
|
} |
|
return fmt.Sprintf("%v matches multiple resources or kinds", e.PartialKind) |
|
} |
|
|
|
func IsAmbiguousError(err error) bool { |
|
if err == nil { |
|
return false |
|
} |
|
switch err.(type) { |
|
case *AmbiguousResourceError, *AmbiguousKindError: |
|
return true |
|
default: |
|
return false |
|
} |
|
} |
|
|
|
// NoResourceMatchError is returned if the RESTMapper can't find any match for a resource |
|
type NoResourceMatchError struct { |
|
PartialResource schema.GroupVersionResource |
|
} |
|
|
|
func (e *NoResourceMatchError) Error() string { |
|
return fmt.Sprintf("no matches for %v", e.PartialResource) |
|
} |
|
|
|
// NoKindMatchError is returned if the RESTMapper can't find any match for a kind |
|
type NoKindMatchError struct { |
|
// GroupKind is the API group and kind that was searched |
|
GroupKind schema.GroupKind |
|
// SearchedVersions is the optional list of versions the search was restricted to |
|
SearchedVersions []string |
|
} |
|
|
|
func (e *NoKindMatchError) Error() string { |
|
searchedVersions := sets.NewString() |
|
for _, v := range e.SearchedVersions { |
|
searchedVersions.Insert(schema.GroupVersion{Group: e.GroupKind.Group, Version: v}.String()) |
|
} |
|
|
|
switch len(searchedVersions) { |
|
case 0: |
|
return fmt.Sprintf("no matches for kind %q in group %q", e.GroupKind.Kind, e.GroupKind.Group) |
|
case 1: |
|
return fmt.Sprintf("no matches for kind %q in version %q", e.GroupKind.Kind, searchedVersions.List()[0]) |
|
default: |
|
return fmt.Sprintf("no matches for kind %q in versions %q", e.GroupKind.Kind, searchedVersions.List()) |
|
} |
|
} |
|
|
|
func IsNoMatchError(err error) bool { |
|
if err == nil { |
|
return false |
|
} |
|
switch err.(type) { |
|
case *NoResourceMatchError, *NoKindMatchError: |
|
return true |
|
default: |
|
return false |
|
} |
|
}
|
|
|