Unversioned types should decode no matter what the requested version is

Status is exposed as v1 in the current schema (so all groups are returning v1.Status). However, if you give a codec only "mygroup" "myversion", it will fail to convert Status to v1. For now, unversioned types should be allowed to be projected into all group versions, and when we add the server group we'll rip out the unversioned concept entirely.
parent 95116c77
...@@ -519,6 +519,15 @@ func (s *Scheme) convertToVersion(copy bool, in Object, target GroupVersioner) ( ...@@ -519,6 +519,15 @@ func (s *Scheme) convertToVersion(copy bool, in Object, target GroupVersioner) (
gvk, ok := target.KindForGroupVersionKinds(kinds) gvk, ok := target.KindForGroupVersionKinds(kinds)
if !ok { if !ok {
// try to see if this type is listed as unversioned (for legacy support)
// TODO: when we move to server API versions, we should completely remove the unversioned concept
if unversionedKind, ok := s.unversionedTypes[t]; ok {
if gvk, ok := target.KindForGroupVersionKinds([]unversioned.GroupVersionKind{unversionedKind}); ok {
return copyAndSetTargetKind(copy, s, in, gvk)
}
return copyAndSetTargetKind(copy, s, in, unversionedKind)
}
// TODO: should this be a typed error? // TODO: should this be a typed error?
return nil, fmt.Errorf("%v is not suitable for converting to %q", t, target) return nil, fmt.Errorf("%v is not suitable for converting to %q", t, target)
} }
......
...@@ -625,6 +625,17 @@ func TestConvertToVersion(t *testing.T) { ...@@ -625,6 +625,17 @@ func TestConvertToVersion(t *testing.T) {
A: "test", A: "test",
}, },
}, },
// unversioned type returned when not included in the target types
{
scheme: GetTestScheme(),
in: &UnversionedType{A: "test"},
gv: unversioned.GroupVersions{{Group: "other", Version: "v2"}},
same: true,
out: &UnversionedType{
MyWeirdCustomEmbeddedVersionKindField: MyWeirdCustomEmbeddedVersionKindField{APIVersion: "v1", ObjectKind: "UnversionedType"},
A: "test",
},
},
// detected as already being in the target version // detected as already being in the target version
{ {
scheme: GetTestScheme(), scheme: GetTestScheme(),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment