blob: 778796602130476e80a6bb99441398ca55f50b9f [file] [log] [blame]
Matthias Andreas Benkard832a54e2019-01-29 09:27:38 +01001/*
2Copyright 2014 The Kubernetes Authors.
3
4Licensed under the Apache License, Version 2.0 (the "License");
5you may not use this file except in compliance with the License.
6You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15*/
16
17package runtime
18
19import (
20 "fmt"
21 "reflect"
22
23 "k8s.io/apimachinery/pkg/runtime/schema"
24)
25
26type notRegisteredErr struct {
27 gvk schema.GroupVersionKind
28 target GroupVersioner
29 t reflect.Type
30}
31
32func NewNotRegisteredErrForKind(gvk schema.GroupVersionKind) error {
33 return &notRegisteredErr{gvk: gvk}
34}
35
36func NewNotRegisteredErrForType(t reflect.Type) error {
37 return &notRegisteredErr{t: t}
38}
39
40func NewNotRegisteredErrForTarget(t reflect.Type, target GroupVersioner) error {
41 return &notRegisteredErr{t: t, target: target}
42}
43
44func NewNotRegisteredGVKErrForTarget(gvk schema.GroupVersionKind, target GroupVersioner) error {
45 return &notRegisteredErr{gvk: gvk, target: target}
46}
47
48func (k *notRegisteredErr) Error() string {
49 if k.t != nil && k.target != nil {
50 return fmt.Sprintf("%v is not suitable for converting to %q", k.t, k.target)
51 }
52 nullGVK := schema.GroupVersionKind{}
53 if k.gvk != nullGVK && k.target != nil {
54 return fmt.Sprintf("%q is not suitable for converting to %q", k.gvk.GroupVersion(), k.target)
55 }
56 if k.t != nil {
57 return fmt.Sprintf("no kind is registered for the type %v", k.t)
58 }
59 if len(k.gvk.Kind) == 0 {
60 return fmt.Sprintf("no version %q has been registered", k.gvk.GroupVersion())
61 }
62 if k.gvk.Version == APIVersionInternal {
63 return fmt.Sprintf("no kind %q is registered for the internal version of group %q", k.gvk.Kind, k.gvk.Group)
64 }
65
66 return fmt.Sprintf("no kind %q is registered for version %q", k.gvk.Kind, k.gvk.GroupVersion())
67}
68
69// IsNotRegisteredError returns true if the error indicates the provided
70// object or input data is not registered.
71func IsNotRegisteredError(err error) bool {
72 if err == nil {
73 return false
74 }
75 _, ok := err.(*notRegisteredErr)
76 return ok
77}
78
79type missingKindErr struct {
80 data string
81}
82
83func NewMissingKindErr(data string) error {
84 return &missingKindErr{data}
85}
86
87func (k *missingKindErr) Error() string {
88 return fmt.Sprintf("Object 'Kind' is missing in '%s'", k.data)
89}
90
91// IsMissingKind returns true if the error indicates that the provided object
92// is missing a 'Kind' field.
93func IsMissingKind(err error) bool {
94 if err == nil {
95 return false
96 }
97 _, ok := err.(*missingKindErr)
98 return ok
99}
100
101type missingVersionErr struct {
102 data string
103}
104
105func NewMissingVersionErr(data string) error {
106 return &missingVersionErr{data}
107}
108
109func (k *missingVersionErr) Error() string {
110 return fmt.Sprintf("Object 'apiVersion' is missing in '%s'", k.data)
111}
112
113// IsMissingVersion returns true if the error indicates that the provided object
114// is missing a 'Version' field.
115func IsMissingVersion(err error) bool {
116 if err == nil {
117 return false
118 }
119 _, ok := err.(*missingVersionErr)
120 return ok
121}