From e3b92a11f1e9b898265d50eba92727b8209e0bb2 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Fri, 19 May 2017 17:35:02 +0200 Subject: [PATCH] apimachinery: move unversioned registration to metav1 --- pkg/api/register.go | 12 ------------ .../garbagecollector/metaonly/metaonly.go | 4 ++-- .../apimachinery/pkg/apis/meta/v1/register.go | 13 +++++++++++++ .../k8s.io/apimachinery/pkg/runtime/scheme_test.go | 13 +++++++++++++ staging/src/k8s.io/client-go/pkg/api/register.go | 12 ------------ 5 files changed, 28 insertions(+), 26 deletions(-) diff --git a/pkg/api/register.go b/pkg/api/register.go index 23cfaabdbe1..5f261bdfb5b 100644 --- a/pkg/api/register.go +++ b/pkg/api/register.go @@ -50,10 +50,6 @@ const GroupName = "" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} -// Unversioned is group version for unversioned API objects -// TODO: this should be v1 probably -var Unversioned = schema.GroupVersion{Group: "", Version: "v1"} - // ParameterCodec handles versioning of objects that are converted to query parameters. var ParameterCodec = runtime.NewParameterCodec(Scheme) @@ -123,13 +119,5 @@ func addKnownTypes(scheme *runtime.Scheme) error { &ConfigMapList{}, ) - // Register Unversioned types under their own special group - scheme.AddUnversionedTypes(Unversioned, - &metav1.Status{}, - &metav1.APIVersions{}, - &metav1.APIGroupList{}, - &metav1.APIGroup{}, - &metav1.APIResourceList{}, - ) return nil } diff --git a/pkg/controller/garbagecollector/metaonly/metaonly.go b/pkg/controller/garbagecollector/metaonly/metaonly.go index bf7053c9b1d..e9f2872ccf9 100644 --- a/pkg/controller/garbagecollector/metaonly/metaonly.go +++ b/pkg/controller/garbagecollector/metaonly/metaonly.go @@ -52,14 +52,14 @@ func NewMetadataCodecFactory() serializer.CodecFactory { if kind.Version == runtime.APIVersionInternal { continue } - if kind == api.Unversioned.WithKind("Status") { + if kind == metav1.Unversioned.WithKind("Status") { // this is added below as unversioned continue } metaOnlyObject := gvkToMetadataOnlyObject(kind) scheme.AddKnownTypeWithName(kind, metaOnlyObject) } - scheme.AddUnversionedTypes(api.Unversioned, &metav1.Status{}) + scheme.AddUnversionedTypes(metav1.Unversioned, &metav1.Status{}) return serializer.NewCodecFactory(scheme) } diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/register.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/register.go index 8645d1abc75..6e449a436a1 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/register.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/register.go @@ -27,6 +27,10 @@ const GroupName = "meta.k8s.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} +// Unversioned is group version for unversioned API objects +// TODO: this should be v1 probably +var Unversioned = schema.GroupVersion{Group: "", Version: "v1"} + // WatchEventKind is name reserved for serializing watch events. const WatchEventKind = "WatchEvent" @@ -56,6 +60,15 @@ func AddToGroupVersion(scheme *runtime.Scheme, groupVersion schema.GroupVersion) Convert_versioned_Event_to_versioned_InternalEvent, ) + // Register Unversioned types under their own special group + scheme.AddUnversionedTypes(Unversioned, + &Status{}, + &APIVersions{}, + &APIGroupList{}, + &APIGroup{}, + &APIResourceList{}, + ) + // register manually. This usually goes through the SchemeBuilder, which we cannot use here. scheme.AddGeneratedDeepCopyFuncs(GetGeneratedDeepCopyFuncs()...) AddConversionFuncs(scheme) diff --git a/staging/src/k8s.io/apimachinery/pkg/runtime/scheme_test.go b/staging/src/k8s.io/apimachinery/pkg/runtime/scheme_test.go index d34b491bd84..9ce19928a17 100644 --- a/staging/src/k8s.io/apimachinery/pkg/runtime/scheme_test.go +++ b/staging/src/k8s.io/apimachinery/pkg/runtime/scheme_test.go @@ -570,6 +570,7 @@ func TestAddKnownTypesIdemPotent(t *testing.T) { t.Errorf("expected only one type after double registration with custom name") } + s.AddUnversionedTypes(gv, &InternalSimple{}) s.AddUnversionedTypes(gv, &InternalSimple{}) if len(s.KnownTypes(gv)) != 1 { t.Errorf("expected only one %v type after double registration with custom name", gv) @@ -587,6 +588,11 @@ func TestAddKnownTypesIdemPotent(t *testing.T) { } } +// EmbeddableTypeMeta passes GetObjectKind to the type which embeds it. +type EmbeddableTypeMeta runtime.TypeMeta + +func (tm *EmbeddableTypeMeta) GetObjectKind() schema.ObjectKind { return (*runtime.TypeMeta)(tm) } + func TestConflictingAddKnownTypes(t *testing.T) { s := runtime.NewScheme() gv := schema.GroupVersion{Group: "foo", Version: "v1"} @@ -612,7 +618,14 @@ func TestConflictingAddKnownTypes(t *testing.T) { panicked <- true } }() + s.AddUnversionedTypes(gv, &InternalSimple{}) + + // redefine InternalSimple with the same name, but obviously as a different type + type InternalSimple struct { + EmbeddableTypeMeta `json:",inline"` + TestString string `json:"testString"` + } s.AddUnversionedTypes(gv, &InternalSimple{}) panicked <- false }() diff --git a/staging/src/k8s.io/client-go/pkg/api/register.go b/staging/src/k8s.io/client-go/pkg/api/register.go index 23cfaabdbe1..5f261bdfb5b 100644 --- a/staging/src/k8s.io/client-go/pkg/api/register.go +++ b/staging/src/k8s.io/client-go/pkg/api/register.go @@ -50,10 +50,6 @@ const GroupName = "" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} -// Unversioned is group version for unversioned API objects -// TODO: this should be v1 probably -var Unversioned = schema.GroupVersion{Group: "", Version: "v1"} - // ParameterCodec handles versioning of objects that are converted to query parameters. var ParameterCodec = runtime.NewParameterCodec(Scheme) @@ -123,13 +119,5 @@ func addKnownTypes(scheme *runtime.Scheme) error { &ConfigMapList{}, ) - // Register Unversioned types under their own special group - scheme.AddUnversionedTypes(Unversioned, - &metav1.Status{}, - &metav1.APIVersions{}, - &metav1.APIGroupList{}, - &metav1.APIGroup{}, - &metav1.APIResourceList{}, - ) return nil }