Skip to content

Commit 8765fa2

Browse files
authored
Merge pull request kubernetes#77522 from jennybuckley/remove-version
Handle conversion errors from ObjectToTyped correctly
2 parents b34d7ac + 13cb241 commit 8765fa2

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/typeconverter.go

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121

2222
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2323
"k8s.io/apimachinery/pkg/runtime"
24+
"k8s.io/apimachinery/pkg/runtime/schema"
2425
"k8s.io/kube-openapi/pkg/util/proto"
2526
"sigs.k8s.io/structured-merge-diff/typed"
2627
"sigs.k8s.io/structured-merge-diff/value"
@@ -93,7 +94,7 @@ func (c *typeConverter) ObjectToTyped(obj runtime.Object) (typed.TypedValue, err
9394
gvk := obj.GetObjectKind().GroupVersionKind()
9495
t := c.parser.Type(gvk)
9596
if t == nil {
96-
return nil, fmt.Errorf("no corresponding type for %v", gvk)
97+
return nil, newNoCorrespondingTypeError(gvk)
9798
}
9899
return t.FromUnstructured(u)
99100
}
@@ -108,7 +109,7 @@ func (c *typeConverter) YAMLToTyped(from []byte) (typed.TypedValue, error) {
108109
gvk := unstructured.GetObjectKind().GroupVersionKind()
109110
t := c.parser.Type(gvk)
110111
if t == nil {
111-
return nil, fmt.Errorf("no corresponding type for %v", gvk)
112+
return nil, newNoCorrespondingTypeError(gvk)
112113
}
113114
return t.FromYAML(typed.YAMLObject(string(from)))
114115
}
@@ -125,3 +126,23 @@ func valueToObject(value *value.Value) (runtime.Object, error) {
125126
}
126127
return &unstructured.Unstructured{Object: u}, nil
127128
}
129+
130+
type noCorrespondingTypeErr struct {
131+
gvk schema.GroupVersionKind
132+
}
133+
134+
func newNoCorrespondingTypeError(gvk schema.GroupVersionKind) error {
135+
return &noCorrespondingTypeErr{gvk: gvk}
136+
}
137+
138+
func (k *noCorrespondingTypeErr) Error() string {
139+
return fmt.Sprintf("no corresponding type for %v", k.gvk)
140+
}
141+
142+
func isNoCorrespondingTypeError(err error) bool {
143+
if err == nil {
144+
return false
145+
}
146+
_, ok := err.(*noCorrespondingTypeErr)
147+
return ok
148+
}

staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/versionconverter.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,5 +97,5 @@ func (v *versionConverter) Convert(object typed.TypedValue, version fieldpath.AP
9797

9898
// IsMissingVersionError
9999
func (v *versionConverter) IsMissingVersionError(err error) bool {
100-
return runtime.IsNotRegisteredError(err)
100+
return runtime.IsNotRegisteredError(err) || isNoCorrespondingTypeError(err)
101101
}

0 commit comments

Comments
 (0)