From f1fd638962dcfe1e7bd89ea525f0013a733eca10 Mon Sep 17 00:00:00 2001 From: Daniel Smith Date: Thu, 12 May 2016 17:07:50 -0700 Subject: [PATCH] fix register.go files up + add test import --- .../testgroup.k8s.io/install/install.go | 10 +- .../test_apis/testgroup.k8s.io/register.go | 8 +- .../test_apis/testgroup.k8s.io/v1/register.go | 8 +- federation/apis/core/conversion.go | 23 +-- federation/apis/core/defaults.go | 37 +++++ federation/apis/core/install/install.go | 32 +--- federation/apis/core/register.go | 17 +- federation/apis/core/v1/conversion.go | 9 +- federation/apis/core/v1/defaults.go | 4 +- federation/apis/core/v1/register.go | 13 +- federation/apis/federation/install/install.go | 10 +- federation/apis/federation/register.go | 11 +- .../apis/federation/v1beta1/conversion.go | 12 +- .../apis/federation/v1beta1/defaults.go | 3 +- .../apis/federation/v1beta1/register.go | 13 +- pkg/api/conversion.go | 15 +- pkg/api/defaults.go | 36 +++++ pkg/api/install/install.go | 108 +------------ pkg/api/register.go | 30 +++- pkg/api/v1/conversion.go | 151 +++++++++++++++--- pkg/api/v1/defaults.go | 4 +- pkg/api/v1/register.go | 13 +- pkg/apis/abac/latest/latest.go | 3 + pkg/apis/abac/register.go | 14 +- pkg/apis/abac/v0/conversion.go | 5 +- pkg/apis/abac/v0/register.go | 21 ++- pkg/apis/abac/v1beta1/register.go | 17 +- pkg/apis/apps/install/install.go | 10 +- pkg/apis/apps/register.go | 11 +- pkg/apis/apps/v1alpha1/conversion.go | 14 +- pkg/apis/apps/v1alpha1/defaults.go | 4 +- pkg/apis/apps/v1alpha1/register.go | 12 +- pkg/apis/authentication/install/install.go | 10 +- pkg/apis/authentication/register.go | 10 +- pkg/apis/authentication/v1beta1/conversion.go | 8 +- pkg/apis/authentication/v1beta1/defaults.go | 4 +- pkg/apis/authentication/v1beta1/register.go | 13 +- pkg/apis/authorization/install/install.go | 10 +- pkg/apis/authorization/register.go | 10 +- pkg/apis/authorization/v1beta1/conversion.go | 8 +- pkg/apis/authorization/v1beta1/defaults.go | 4 +- pkg/apis/authorization/v1beta1/register.go | 13 +- pkg/apis/autoscaling/install/install.go | 10 +- pkg/apis/autoscaling/register.go | 11 +- pkg/apis/autoscaling/v1/defaults.go | 4 +- pkg/apis/autoscaling/v1/register.go | 11 +- pkg/apis/batch/install/install.go | 15 +- pkg/apis/batch/register.go | 11 +- pkg/apis/batch/v1/conversion.go | 14 +- pkg/apis/batch/v1/defaults.go | 4 +- pkg/apis/batch/v1/register.go | 12 +- pkg/apis/batch/v2alpha1/conversion.go | 13 +- pkg/apis/batch/v2alpha1/defaults.go | 4 +- pkg/apis/batch/v2alpha1/register.go | 12 +- pkg/apis/certificates/install/install.go | 10 +- pkg/apis/certificates/register.go | 13 +- pkg/apis/certificates/v1alpha1/conversion.go | 3 +- pkg/apis/certificates/v1alpha1/register.go | 12 +- pkg/apis/componentconfig/install/install.go | 10 +- pkg/apis/componentconfig/register.go | 10 +- pkg/apis/componentconfig/v1alpha1/defaults.go | 4 +- pkg/apis/componentconfig/v1alpha1/register.go | 11 +- pkg/apis/extensions/install/install.go | 10 +- pkg/apis/extensions/register.go | 11 +- pkg/apis/extensions/v1beta1/conversion.go | 20 +-- pkg/apis/extensions/v1beta1/defaults.go | 4 +- pkg/apis/extensions/v1beta1/register.go | 12 +- pkg/apis/policy/install/install.go | 10 +- pkg/apis/policy/register.go | 11 +- pkg/apis/policy/v1alpha1/register.go | 14 +- pkg/apis/rbac/install/install.go | 10 +- pkg/apis/rbac/register.go | 11 +- pkg/apis/rbac/v1alpha1/register.go | 10 +- .../clientcmd/api/latest/latest.go | 20 ++- .../unversioned/clientcmd/api/register.go | 13 +- .../clientcmd/api/v1/conversion.go | 8 +- .../unversioned/clientcmd/api/v1/register.go | 12 +- pkg/kubectl/cmd/config/view.go | 2 +- pkg/runtime/scheme_builder.go | 23 ++- plugin/pkg/scheduler/api/register.go | 18 ++- plugin/pkg/scheduler/api/v1/register.go | 16 +- 81 files changed, 714 insertions(+), 483 deletions(-) create mode 100644 federation/apis/core/defaults.go create mode 100644 pkg/api/defaults.go diff --git a/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/install/install.go b/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/install/install.go index 018377980e0..eadc3fddad7 100644 --- a/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/install/install.go +++ b/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/install/install.go @@ -107,12 +107,18 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - testgroup.AddToScheme(api.Scheme) + if err := testgroup.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { switch v { case v1.SchemeGroupVersion: - v1.AddToScheme(api.Scheme) + if err := v1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/register.go b/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/register.go index 94f3914f566..e3ed2a2906d 100644 --- a/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/register.go +++ b/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/register.go @@ -24,10 +24,10 @@ import ( var SchemeGroupVersion = unversioned.GroupVersion{Group: "testgroup.k8s.io", Version: runtime.APIVersionInternal} -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. func addKnownTypes(scheme *runtime.Scheme) { diff --git a/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/v1/register.go b/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/v1/register.go index 88e175eef66..e693fa86ab8 100644 --- a/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/v1/register.go +++ b/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/v1/register.go @@ -25,10 +25,10 @@ import ( var SchemeGroupVersion = unversioned.GroupVersion{Group: "testgroup.k8s.io", Version: "v1"} -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. func addKnownTypes(scheme *runtime.Scheme) { diff --git a/federation/apis/core/conversion.go b/federation/apis/core/conversion.go index 4a972c464bd..b91d22933de 100644 --- a/federation/apis/core/conversion.go +++ b/federation/apis/core/conversion.go @@ -18,27 +18,12 @@ package core import ( "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/fields" - "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs( - func(obj *api.ListOptions) { - if obj.LabelSelector == nil { - obj.LabelSelector = labels.Everything() - } - if obj.FieldSelector == nil { - obj.FieldSelector = fields.Everything() - } - }, - ) -} - -func addConversionFuncs(scheme *runtime.Scheme) { +func addConversionFuncs(scheme *runtime.Scheme) error { // Add non-generated conversion functions - err := scheme.AddConversionFuncs( + return scheme.AddConversionFuncs( api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta, api.Convert_unversioned_ListMeta_To_unversioned_ListMeta, api.Convert_intstr_IntOrString_To_intstr_IntOrString, @@ -54,8 +39,4 @@ func addConversionFuncs(scheme *runtime.Scheme) { api.Convert_fields_Selector_To_string, api.Convert_resource_Quantity_To_resource_Quantity, ) - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } } diff --git a/federation/apis/core/defaults.go b/federation/apis/core/defaults.go new file mode 100644 index 00000000000..03a610f2c30 --- /dev/null +++ b/federation/apis/core/defaults.go @@ -0,0 +1,37 @@ +/* +Copyright 2016 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 core + +import ( + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/fields" + "k8s.io/kubernetes/pkg/labels" + "k8s.io/kubernetes/pkg/runtime" +) + +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( + func(obj *api.ListOptions) { + if obj.LabelSelector == nil { + obj.LabelSelector = labels.Everything() + } + if obj.FieldSelector == nil { + obj.FieldSelector = fields.Everything() + } + }, + ) +} diff --git a/federation/apis/core/install/install.go b/federation/apis/core/install/install.go index bae57dd1310..68a8daee0ca 100644 --- a/federation/apis/core/install/install.go +++ b/federation/apis/core/install/install.go @@ -26,10 +26,8 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/unversioned" - "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apimachinery" "k8s.io/kubernetes/pkg/apimachinery/registered" - "k8s.io/kubernetes/pkg/conversion" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/sets" ) @@ -125,7 +123,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - core.AddToScheme(core.Scheme) + if err := core.AddToScheme(core.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -134,27 +135,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case core_v1.SchemeGroupVersion: - core_v1.AddToScheme(core.Scheme) + if err := core_v1.AddToScheme(core.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } - - // This is a "fast-path" that avoids reflection for common types. It focuses on the objects that are - // converted the most in the cluster. - // TODO: generate one of these for every external API group - this is to prove the impact - core.Scheme.AddGenericConversionFunc(func(objA, objB interface{}, s conversion.Scope) (bool, error) { - switch a := objA.(type) { - case *v1.Service: - switch b := objB.(type) { - case *api.Service: - return true, v1.Convert_v1_Service_To_api_Service(a, b, s) - } - case *api.Service: - switch b := objB.(type) { - case *v1.Service: - return true, v1.Convert_api_Service_To_v1_Service(a, b, s) - } - - } - return false, nil - }) } diff --git a/federation/apis/core/register.go b/federation/apis/core/register.go index 657815abc11..0aef5f8f351 100644 --- a/federation/apis/core/register.go +++ b/federation/apis/core/register.go @@ -52,9 +52,14 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - if err := Scheme.AddIgnoredConversionType(&unversioned.TypeMeta{}, &unversioned.TypeMeta{}); err != nil { - panic(err) +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + if err := scheme.AddIgnoredConversionType(&unversioned.TypeMeta{}, &unversioned.TypeMeta{}); err != nil { + return err } scheme.AddKnownTypes(SchemeGroupVersion, &api.ServiceList{}, @@ -68,7 +73,7 @@ func AddToScheme(scheme *runtime.Scheme) { ) // Register Unversioned types under their own special group - Scheme.AddUnversionedTypes(Unversioned, + scheme.AddUnversionedTypes(Unversioned, &unversioned.ExportOptions{}, &unversioned.Status{}, &unversioned.APIVersions{}, @@ -76,7 +81,5 @@ func AddToScheme(scheme *runtime.Scheme) { &unversioned.APIGroup{}, &unversioned.APIResourceList{}, ) - - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) + return nil } diff --git a/federation/apis/core/v1/conversion.go b/federation/apis/core/v1/conversion.go index 549ce830dd9..db122e7a662 100644 --- a/federation/apis/core/v1/conversion.go +++ b/federation/apis/core/v1/conversion.go @@ -23,7 +23,7 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addConversionFuncs(scheme *runtime.Scheme) { +func addConversionFuncs(scheme *runtime.Scheme) error { // Add non-generated conversion functions err := scheme.AddConversionFuncs( v1.Convert_v1_DeleteOptions_To_api_DeleteOptions, @@ -60,8 +60,7 @@ func addConversionFuncs(scheme *runtime.Scheme) { v1.Convert_api_ServiceStatus_To_v1_ServiceStatus, ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } // Add field label conversions for kinds having selectable nothing but ObjectMeta fields. @@ -79,8 +78,8 @@ func addConversionFuncs(scheme *runtime.Scheme) { } }) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } } + return nil } diff --git a/federation/apis/core/v1/defaults.go b/federation/apis/core/v1/defaults.go index 20d92e30767..8722e5664e5 100644 --- a/federation/apis/core/v1/defaults.go +++ b/federation/apis/core/v1/defaults.go @@ -21,8 +21,8 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs( +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( v1.SetDefaults_Secret, v1.SetDefaults_ServiceSpec, v1.SetDefaults_NamespaceStatus, diff --git a/federation/apis/core/v1/register.go b/federation/apis/core/v1/register.go index 28040880808..da54b9c39cc 100644 --- a/federation/apis/core/v1/register.go +++ b/federation/apis/core/v1/register.go @@ -29,15 +29,13 @@ const GroupName = "" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"} -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) - addConversionFuncs(scheme) - addDefaultingFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addConversionFuncs, addDefaultingFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &v1.Service{}, &v1.Namespace{}, @@ -54,4 +52,5 @@ func addKnownTypes(scheme *runtime.Scheme) { // Add the watch version that applies versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/federation/apis/federation/install/install.go b/federation/apis/federation/install/install.go index cedafe03ab4..edd850fa274 100644 --- a/federation/apis/federation/install/install.go +++ b/federation/apis/federation/install/install.go @@ -114,7 +114,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - federation.AddToScheme(api.Scheme) + if err := federation.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -123,7 +126,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1beta1.SchemeGroupVersion: - v1beta1.AddToScheme(api.Scheme) + if err := v1beta1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/federation/apis/federation/register.go b/federation/apis/federation/register.go index ce906cb42a2..4e19b94013b 100644 --- a/federation/apis/federation/register.go +++ b/federation/apis/federation/register.go @@ -38,18 +38,19 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -// Adds the list of known types to api.Scheme. -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Cluster{}, &ClusterList{}, &api.ListOptions{}, &api.DeleteOptions{}, ) + return nil } func (obj *Cluster) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/federation/apis/federation/v1beta1/conversion.go b/federation/apis/federation/v1beta1/conversion.go index f7ca2372aa6..5881109c6a7 100644 --- a/federation/apis/federation/v1beta1/conversion.go +++ b/federation/apis/federation/v1beta1/conversion.go @@ -19,12 +19,11 @@ package v1beta1 import ( "fmt" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/runtime" ) -func addConversionFuncs(scheme *runtime.Scheme) { - err := api.Scheme.AddFieldLabelConversionFunc(SchemeGroupVersion.String(), "Cluster", +func addConversionFuncs(scheme *runtime.Scheme) error { + return scheme.AddFieldLabelConversionFunc(SchemeGroupVersion.String(), "Cluster", func(label, value string) (string, string, error) { switch label { case "metadata.name": @@ -32,9 +31,6 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label not supported: %s", label) } - }) - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } + }, + ) } diff --git a/federation/apis/federation/v1beta1/defaults.go b/federation/apis/federation/v1beta1/defaults.go index 54aef235ef0..57047120484 100644 --- a/federation/apis/federation/v1beta1/defaults.go +++ b/federation/apis/federation/v1beta1/defaults.go @@ -20,5 +20,6 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return nil } diff --git a/federation/apis/federation/v1beta1/register.go b/federation/apis/federation/v1beta1/register.go index 7d7195ca1c5..8fe059b140c 100644 --- a/federation/apis/federation/v1beta1/register.go +++ b/federation/apis/federation/v1beta1/register.go @@ -29,14 +29,12 @@ const GroupName = "federation" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta1"} -// Adds the list of known types to api.Scheme. -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Cluster{}, &ClusterList{}, @@ -44,6 +42,7 @@ func addKnownTypes(scheme *runtime.Scheme) { &v1.DeleteOptions{}, ) versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } func (obj *Cluster) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/pkg/api/conversion.go b/pkg/api/conversion.go index 8ea2d6ed186..4a9f50b9ecb 100644 --- a/pkg/api/conversion.go +++ b/pkg/api/conversion.go @@ -24,23 +24,14 @@ import ( "k8s.io/kubernetes/pkg/conversion" "k8s.io/kubernetes/pkg/fields" "k8s.io/kubernetes/pkg/labels" + "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/intstr" utillabels "k8s.io/kubernetes/pkg/util/labels" "k8s.io/kubernetes/pkg/util/validation/field" ) -func init() { - Scheme.AddDefaultingFuncs( - func(obj *ListOptions) { - if obj.LabelSelector == nil { - obj.LabelSelector = labels.Everything() - } - if obj.FieldSelector == nil { - obj.FieldSelector = fields.Everything() - } - }, - ) - Scheme.AddConversionFuncs( +func addConversionFuncs(scheme *runtime.Scheme) error { + return scheme.AddConversionFuncs( Convert_unversioned_TypeMeta_To_unversioned_TypeMeta, Convert_unversioned_ListMeta_To_unversioned_ListMeta, diff --git a/pkg/api/defaults.go b/pkg/api/defaults.go new file mode 100644 index 00000000000..a2b01b7fd66 --- /dev/null +++ b/pkg/api/defaults.go @@ -0,0 +1,36 @@ +/* +Copyright 2016 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 api + +import ( + "k8s.io/kubernetes/pkg/fields" + "k8s.io/kubernetes/pkg/labels" + "k8s.io/kubernetes/pkg/runtime" +) + +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( + func(obj *ListOptions) { + if obj.LabelSelector == nil { + obj.LabelSelector = labels.Everything() + } + if obj.FieldSelector == nil { + obj.FieldSelector = fields.Everything() + } + }, + ) +} diff --git a/pkg/api/install/install.go b/pkg/api/install/install.go index 937920d28a8..0cc911e7392 100644 --- a/pkg/api/install/install.go +++ b/pkg/api/install/install.go @@ -29,10 +29,8 @@ import ( "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apimachinery" "k8s.io/kubernetes/pkg/apimachinery/registered" - "k8s.io/kubernetes/pkg/conversion" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/sets" - "k8s.io/kubernetes/pkg/watch/versioned" ) const importPrefix = "k8s.io/kubernetes/pkg/api" @@ -140,7 +138,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - api.AddToScheme(api.Scheme) + if err := api.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -149,103 +150,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1.SchemeGroupVersion: - v1.AddToScheme(api.Scheme) + if err := v1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } - - // This is a "fast-path" that avoids reflection for common types. It focuses on the objects that are - // converted the most in the cluster. - // TODO: generate one of these for every external API group - this is to prove the impact - api.Scheme.AddGenericConversionFunc(func(objA, objB interface{}, s conversion.Scope) (bool, error) { - switch a := objA.(type) { - case *v1.Pod: - switch b := objB.(type) { - case *api.Pod: - return true, v1.Convert_v1_Pod_To_api_Pod(a, b, s) - } - case *api.Pod: - switch b := objB.(type) { - case *v1.Pod: - return true, v1.Convert_api_Pod_To_v1_Pod(a, b, s) - } - - case *v1.Event: - switch b := objB.(type) { - case *api.Event: - return true, v1.Convert_v1_Event_To_api_Event(a, b, s) - } - case *api.Event: - switch b := objB.(type) { - case *v1.Event: - return true, v1.Convert_api_Event_To_v1_Event(a, b, s) - } - - case *v1.ReplicationController: - switch b := objB.(type) { - case *api.ReplicationController: - return true, v1.Convert_v1_ReplicationController_To_api_ReplicationController(a, b, s) - } - case *api.ReplicationController: - switch b := objB.(type) { - case *v1.ReplicationController: - return true, v1.Convert_api_ReplicationController_To_v1_ReplicationController(a, b, s) - } - - case *v1.Node: - switch b := objB.(type) { - case *api.Node: - return true, v1.Convert_v1_Node_To_api_Node(a, b, s) - } - case *api.Node: - switch b := objB.(type) { - case *v1.Node: - return true, v1.Convert_api_Node_To_v1_Node(a, b, s) - } - - case *v1.Namespace: - switch b := objB.(type) { - case *api.Namespace: - return true, v1.Convert_v1_Namespace_To_api_Namespace(a, b, s) - } - case *api.Namespace: - switch b := objB.(type) { - case *v1.Namespace: - return true, v1.Convert_api_Namespace_To_v1_Namespace(a, b, s) - } - - case *v1.Service: - switch b := objB.(type) { - case *api.Service: - return true, v1.Convert_v1_Service_To_api_Service(a, b, s) - } - case *api.Service: - switch b := objB.(type) { - case *v1.Service: - return true, v1.Convert_api_Service_To_v1_Service(a, b, s) - } - - case *v1.Endpoints: - switch b := objB.(type) { - case *api.Endpoints: - return true, v1.Convert_v1_Endpoints_To_api_Endpoints(a, b, s) - } - case *api.Endpoints: - switch b := objB.(type) { - case *v1.Endpoints: - return true, v1.Convert_api_Endpoints_To_v1_Endpoints(a, b, s) - } - - case *versioned.Event: - switch b := objB.(type) { - case *versioned.InternalEvent: - return true, versioned.Convert_versioned_Event_to_versioned_InternalEvent(a, b, s) - } - case *versioned.InternalEvent: - switch b := objB.(type) { - case *versioned.Event: - return true, versioned.Convert_versioned_InternalEvent_to_versioned_Event(a, b, s) - } - } - return false, nil - }) } diff --git a/pkg/api/register.go b/pkg/api/register.go index 213c36113e4..72bd6b0909f 100644 --- a/pkg/api/register.go +++ b/pkg/api/register.go @@ -23,6 +23,10 @@ import ( ) // Scheme is the default instance of runtime.Scheme to which types in the Kubernetes API are already registered. +// NOTE: If you are copying this file to start a new api group, STOP! Copy the +// extensions group instead. This Scheme is special and should appear ONLY in +// the api group, unless you really know what you're doing. +// TODO(lavalamp): make the above error impossible. var Scheme = runtime.NewScheme() // Codecs provides access to encoding and decoding for the scheme @@ -51,10 +55,29 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - if err := Scheme.AddIgnoredConversionType(&unversioned.TypeMeta{}, &unversioned.TypeMeta{}); err != nil { +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) + +func init() { + // TODO(lavalamp): move this call to scheme builder above. Can't + // remove it from here because lots of people inapropriately rely on it + // (specifically the unversioned time conversion). Can't have it in + // both places because then it gets double registered. Consequence of + // current state is that it only ever gets registered in the main + // api.Scheme, even though everyone that uses anything from unversioned + // needs these. + if err := addConversionFuncs(Scheme); err != nil { + // Programmer error. panic(err) } +} + +func addKnownTypes(scheme *runtime.Scheme) error { + if err := scheme.AddIgnoredConversionType(&unversioned.TypeMeta{}, &unversioned.TypeMeta{}); err != nil { + return err + } scheme.AddKnownTypes(SchemeGroupVersion, &Pod{}, &PodList{}, @@ -104,7 +127,7 @@ func AddToScheme(scheme *runtime.Scheme) { ) // Register Unversioned types under their own special group - Scheme.AddUnversionedTypes(Unversioned, + scheme.AddUnversionedTypes(Unversioned, &unversioned.ExportOptions{}, &unversioned.Status{}, &unversioned.APIVersions{}, @@ -112,4 +135,5 @@ func AddToScheme(scheme *runtime.Scheme) { &unversioned.APIGroup{}, &unversioned.APIResourceList{}, ) + return nil } diff --git a/pkg/api/v1/conversion.go b/pkg/api/v1/conversion.go index f180b3348d7..e820e0c95e8 100644 --- a/pkg/api/v1/conversion.go +++ b/pkg/api/v1/conversion.go @@ -26,6 +26,7 @@ import ( "k8s.io/kubernetes/pkg/conversion" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/validation/field" + "k8s.io/kubernetes/pkg/watch/versioned" ) const ( @@ -39,7 +40,106 @@ const ( NonConvertibleAnnotationPrefix = "kubernetes.io/non-convertible" ) -func addConversionFuncs(scheme *runtime.Scheme) { +// This is a "fast-path" that avoids reflection for common types. It focuses on the objects that are +// converted the most in the cluster. +// TODO: generate one of these for every external API group - this is to prove the impact +func addFastPathConversionFuncs(scheme *runtime.Scheme) error { + scheme.AddGenericConversionFunc(func(objA, objB interface{}, s conversion.Scope) (bool, error) { + switch a := objA.(type) { + case *Pod: + switch b := objB.(type) { + case *api.Pod: + return true, Convert_v1_Pod_To_api_Pod(a, b, s) + } + case *api.Pod: + switch b := objB.(type) { + case *Pod: + return true, Convert_api_Pod_To_v1_Pod(a, b, s) + } + + case *Event: + switch b := objB.(type) { + case *api.Event: + return true, Convert_v1_Event_To_api_Event(a, b, s) + } + case *api.Event: + switch b := objB.(type) { + case *Event: + return true, Convert_api_Event_To_v1_Event(a, b, s) + } + + case *ReplicationController: + switch b := objB.(type) { + case *api.ReplicationController: + return true, Convert_v1_ReplicationController_To_api_ReplicationController(a, b, s) + } + case *api.ReplicationController: + switch b := objB.(type) { + case *ReplicationController: + return true, Convert_api_ReplicationController_To_v1_ReplicationController(a, b, s) + } + + case *Node: + switch b := objB.(type) { + case *api.Node: + return true, Convert_v1_Node_To_api_Node(a, b, s) + } + case *api.Node: + switch b := objB.(type) { + case *Node: + return true, Convert_api_Node_To_v1_Node(a, b, s) + } + + case *Namespace: + switch b := objB.(type) { + case *api.Namespace: + return true, Convert_v1_Namespace_To_api_Namespace(a, b, s) + } + case *api.Namespace: + switch b := objB.(type) { + case *Namespace: + return true, Convert_api_Namespace_To_v1_Namespace(a, b, s) + } + + case *Service: + switch b := objB.(type) { + case *api.Service: + return true, Convert_v1_Service_To_api_Service(a, b, s) + } + case *api.Service: + switch b := objB.(type) { + case *Service: + return true, Convert_api_Service_To_v1_Service(a, b, s) + } + + case *Endpoints: + switch b := objB.(type) { + case *api.Endpoints: + return true, Convert_v1_Endpoints_To_api_Endpoints(a, b, s) + } + case *api.Endpoints: + switch b := objB.(type) { + case *Endpoints: + return true, Convert_api_Endpoints_To_v1_Endpoints(a, b, s) + } + + case *versioned.Event: + switch b := objB.(type) { + case *versioned.InternalEvent: + return true, versioned.Convert_versioned_Event_to_versioned_InternalEvent(a, b, s) + } + case *versioned.InternalEvent: + switch b := objB.(type) { + case *versioned.Event: + return true, versioned.Convert_versioned_InternalEvent_to_versioned_Event(a, b, s) + } + } + return false, nil + }) + return nil +} + +func addConversionFuncs(scheme *runtime.Scheme) error { // Add non-generated conversion functions err := scheme.AddConversionFuncs( Convert_api_Pod_To_v1_Pod, @@ -60,8 +160,7 @@ func addConversionFuncs(scheme *runtime.Scheme) { Convert_extensions_ReplicaSetStatus_to_v1_ReplicationControllerStatus, ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } // Add field label conversions for kinds having selectable nothing but ObjectMeta fields. @@ -82,10 +181,10 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label %q not supported for %q", label, kind) } - }) + }, + ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } } @@ -108,10 +207,10 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label not supported: %s", label) } - }) + }, + ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } err = api.Scheme.AddFieldLabelConversionFunc("v1", "Node", func(label, value string) (string, string, error) { @@ -123,10 +222,10 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label not supported: %s", label) } - }) + }, + ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } err = api.Scheme.AddFieldLabelConversionFunc("v1", "ReplicationController", func(label, value string) (string, string, error) { @@ -140,8 +239,7 @@ func addConversionFuncs(scheme *runtime.Scheme) { } }) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } err = api.Scheme.AddFieldLabelConversionFunc("v1", "Event", func(label, value string) (string, string, error) { @@ -162,10 +260,10 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label not supported: %s", label) } - }) + }, + ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } err = api.Scheme.AddFieldLabelConversionFunc("v1", "Namespace", func(label, value string) (string, string, error) { @@ -176,10 +274,10 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label not supported: %s", label) } - }) + }, + ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } err = api.Scheme.AddFieldLabelConversionFunc("v1", "PersistentVolume", func(label, value string) (string, string, error) { @@ -189,10 +287,10 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label not supported: %s", label) } - }) + }, + ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } err = api.Scheme.AddFieldLabelConversionFunc("v1", "Secret", func(label, value string) (string, string, error) { @@ -204,11 +302,12 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label not supported: %s", label) } - }) + }, + ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } + return nil } func Convert_v1_ReplicationController_to_extensions_ReplicaSet(in *ReplicationController, out *extensions.ReplicaSet, s conversion.Scope) error { diff --git a/pkg/api/v1/defaults.go b/pkg/api/v1/defaults.go index 5d6323fb4fe..2a79ede82d7 100644 --- a/pkg/api/v1/defaults.go +++ b/pkg/api/v1/defaults.go @@ -23,8 +23,8 @@ import ( "k8s.io/kubernetes/pkg/util/parsers" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs( +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( SetDefaults_PodExecOptions, SetDefaults_PodAttachOptions, SetDefaults_ReplicationController, diff --git a/pkg/api/v1/register.go b/pkg/api/v1/register.go index 8c625b87805..f02ea8297f0 100644 --- a/pkg/api/v1/register.go +++ b/pkg/api/v1/register.go @@ -28,15 +28,13 @@ const GroupName = "" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"} -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) - addConversionFuncs(scheme) - addDefaultingFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs, addFastPathConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Pod{}, &PodList{}, @@ -91,4 +89,5 @@ func addKnownTypes(scheme *runtime.Scheme) { // Add the watch version that applies versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/pkg/apis/abac/latest/latest.go b/pkg/apis/abac/latest/latest.go index d3c00c416f3..318898696c6 100644 --- a/pkg/apis/abac/latest/latest.go +++ b/pkg/apis/abac/latest/latest.go @@ -21,3 +21,6 @@ import ( _ "k8s.io/kubernetes/pkg/apis/abac/v0" _ "k8s.io/kubernetes/pkg/apis/abac/v1beta1" ) + +// TODO: this file is totally wrong, it should look like other latest files. +// lavalamp is in the middle of fixing this code, so wait for the new way of doing things.. diff --git a/pkg/apis/abac/register.go b/pkg/apis/abac/register.go index 49a4c756194..a980135f950 100644 --- a/pkg/apis/abac/register.go +++ b/pkg/apis/abac/register.go @@ -26,15 +26,27 @@ import ( const Group = "abac.authorization.kubernetes.io" // Scheme is the default instance of runtime.Scheme to which types in the abac API group are registered. +// TODO: remove this, abac should not have its own scheme. var Scheme = runtime.NewScheme() // Codecs provides access to encoding and decoding for the scheme var Codecs = serializer.NewCodecFactory(Scheme) func init() { - Scheme.AddKnownTypes(unversioned.GroupVersion{Group: Group, Version: runtime.APIVersionInternal}, + // TODO: delete this, abac should not have its own scheme. + addKnownTypes(Scheme) +} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(unversioned.GroupVersion{Group: Group, Version: runtime.APIVersionInternal}, &Policy{}, ) + return nil } func (obj *Policy) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/pkg/apis/abac/v0/conversion.go b/pkg/apis/abac/v0/conversion.go index 7e28ad66cf0..2d17f05c22b 100644 --- a/pkg/apis/abac/v0/conversion.go +++ b/pkg/apis/abac/v0/conversion.go @@ -19,10 +19,11 @@ package v0 import ( api "k8s.io/kubernetes/pkg/apis/abac" "k8s.io/kubernetes/pkg/conversion" + "k8s.io/kubernetes/pkg/runtime" ) -func init() { - api.Scheme.AddConversionFuncs( +func addConversionFuncs(scheme *runtime.Scheme) error { + return scheme.AddConversionFuncs( func(in *Policy, out *api.Policy, s conversion.Scope) error { // Begin by copying all fields out.Spec.User = in.User diff --git a/pkg/apis/abac/v0/register.go b/pkg/apis/abac/v0/register.go index 26fc59003d3..09b9b16939e 100644 --- a/pkg/apis/abac/v0/register.go +++ b/pkg/apis/abac/v0/register.go @@ -19,15 +19,34 @@ package v0 import ( "k8s.io/kubernetes/pkg/api/unversioned" api "k8s.io/kubernetes/pkg/apis/abac" + "k8s.io/kubernetes/pkg/runtime" ) // GroupVersion is the API group and version for abac v0 var GroupVersion = unversioned.GroupVersion{Group: api.Group, Version: "v0"} func init() { - api.Scheme.AddKnownTypes(GroupVersion, + // TODO: Delete this init function, abac should not have its own scheme. + if err := addKnownTypes(api.Scheme); err != nil { + // Programmer error. + panic(err) + } + if err := addConversionFuncs(api.Scheme); err != nil { + // Programmer error. + panic(err) + } +} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, &Policy{}, ) + return nil } func (obj *Policy) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/pkg/apis/abac/v1beta1/register.go b/pkg/apis/abac/v1beta1/register.go index f79265f9ffc..e3497b75e96 100644 --- a/pkg/apis/abac/v1beta1/register.go +++ b/pkg/apis/abac/v1beta1/register.go @@ -19,15 +19,30 @@ package v1beta1 import ( "k8s.io/kubernetes/pkg/api/unversioned" api "k8s.io/kubernetes/pkg/apis/abac" + "k8s.io/kubernetes/pkg/runtime" ) // GroupVersion is the API group and version for abac v1beta1 var GroupVersion = unversioned.GroupVersion{Group: api.Group, Version: "v1beta1"} func init() { - api.Scheme.AddKnownTypes(GroupVersion, + // TODO: delete this, abac should not have its own scheme. + if err := addKnownTypes(api.Scheme); err != nil { + // Programmer error. + panic(err) + } +} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, &Policy{}, ) + return nil } func (obj *Policy) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/pkg/apis/apps/install/install.go b/pkg/apis/apps/install/install.go index 346740e44af..b7139828fc8 100644 --- a/pkg/apis/apps/install/install.go +++ b/pkg/apis/apps/install/install.go @@ -110,7 +110,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - apps.AddToScheme(api.Scheme) + if err := apps.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -119,7 +122,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1alpha1.SchemeGroupVersion: - v1alpha1.AddToScheme(api.Scheme) + if err := v1alpha1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/pkg/apis/apps/register.go b/pkg/apis/apps/register.go index 90acc123157..e920decfa66 100644 --- a/pkg/apis/apps/register.go +++ b/pkg/apis/apps/register.go @@ -22,10 +22,10 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // GroupName is the group name use in this package const GroupName = "apps" @@ -44,11 +44,12 @@ func Resource(resource string) unversioned.GroupResource { } // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { // TODO this will get cleaned up with the scheme types are fixed scheme.AddKnownTypes(SchemeGroupVersion, &PetSet{}, &PetSetList{}, &api.ListOptions{}, ) + return nil } diff --git a/pkg/apis/apps/v1alpha1/conversion.go b/pkg/apis/apps/v1alpha1/conversion.go index b2fb1be72f6..5cecd950975 100644 --- a/pkg/apis/apps/v1alpha1/conversion.go +++ b/pkg/apis/apps/v1alpha1/conversion.go @@ -27,7 +27,7 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addConversionFuncs(scheme *runtime.Scheme) { +func addConversionFuncs(scheme *runtime.Scheme) error { // Add non-generated conversion functions to handle the *int32 -> int // conversion. A pointer is useful in the versioned type so we can default // it, but a plain int32 is more convenient in the internal type. These @@ -37,11 +37,10 @@ func addConversionFuncs(scheme *runtime.Scheme) { Convert_apps_PetSetSpec_To_v1alpha1_PetSetSpec, ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } - err = api.Scheme.AddFieldLabelConversionFunc("apps/v1alpha1", "PetSet", + return api.Scheme.AddFieldLabelConversionFunc("apps/v1alpha1", "PetSet", func(label, value string) (string, string, error) { switch label { case "metadata.name", "metadata.namespace", "status.successful": @@ -49,11 +48,8 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label not supported: %s", label) } - }) - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } + }, + ) } func Convert_v1alpha1_PetSetSpec_To_apps_PetSetSpec(in *PetSetSpec, out *apps.PetSetSpec, s conversion.Scope) error { diff --git a/pkg/apis/apps/v1alpha1/defaults.go b/pkg/apis/apps/v1alpha1/defaults.go index e578e8c947e..63a02c9c9b6 100644 --- a/pkg/apis/apps/v1alpha1/defaults.go +++ b/pkg/apis/apps/v1alpha1/defaults.go @@ -21,8 +21,8 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs( +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( SetDefaults_PetSet, ) } diff --git a/pkg/apis/apps/v1alpha1/register.go b/pkg/apis/apps/v1alpha1/register.go index 9fd138c4a27..90f9bd1c24b 100644 --- a/pkg/apis/apps/v1alpha1/register.go +++ b/pkg/apis/apps/v1alpha1/register.go @@ -29,14 +29,13 @@ const GroupName = "apps" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1alpha1"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &PetSet{}, &PetSetList{}, @@ -44,6 +43,7 @@ func addKnownTypes(scheme *runtime.Scheme) { &v1.DeleteOptions{}, ) versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } func (obj *PetSet) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/pkg/apis/authentication/install/install.go b/pkg/apis/authentication/install/install.go index b052438c9a5..7ad9d3496eb 100644 --- a/pkg/apis/authentication/install/install.go +++ b/pkg/apis/authentication/install/install.go @@ -89,7 +89,10 @@ func enableVersions(externalVersions []unversioned.GroupVersion) error { func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - authentication.AddToScheme(api.Scheme) + if err := authentication.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -98,7 +101,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1beta1.SchemeGroupVersion: - v1beta1.AddToScheme(api.Scheme) + if err := v1beta1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/pkg/apis/authentication/register.go b/pkg/apis/authentication/register.go index b544a9d1198..dfe40b20c24 100644 --- a/pkg/apis/authentication/register.go +++ b/pkg/apis/authentication/register.go @@ -38,11 +38,12 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &api.ListOptions{}, &api.DeleteOptions{}, @@ -50,4 +51,5 @@ func addKnownTypes(scheme *runtime.Scheme) { &TokenReview{}, ) + return nil } diff --git a/pkg/apis/authentication/v1beta1/conversion.go b/pkg/apis/authentication/v1beta1/conversion.go index e360ee8a20c..a0b7051c97e 100644 --- a/pkg/apis/authentication/v1beta1/conversion.go +++ b/pkg/apis/authentication/v1beta1/conversion.go @@ -20,11 +20,7 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addConversionFuncs(scheme *runtime.Scheme) { +func addConversionFuncs(scheme *runtime.Scheme) error { // Add non-generated conversion functions - err := scheme.AddConversionFuncs() - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } + return scheme.AddConversionFuncs() } diff --git a/pkg/apis/authentication/v1beta1/defaults.go b/pkg/apis/authentication/v1beta1/defaults.go index 83794ff7b1b..bcd5e07d9c5 100644 --- a/pkg/apis/authentication/v1beta1/defaults.go +++ b/pkg/apis/authentication/v1beta1/defaults.go @@ -20,6 +20,6 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs() +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs() } diff --git a/pkg/apis/authentication/v1beta1/register.go b/pkg/apis/authentication/v1beta1/register.go index 86f7ec292d0..53488da1fa1 100644 --- a/pkg/apis/authentication/v1beta1/register.go +++ b/pkg/apis/authentication/v1beta1/register.go @@ -28,15 +28,13 @@ const GroupName = "authentication.k8s.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta1"} -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &v1.ListOptions{}, &v1.DeleteOptions{}, @@ -44,4 +42,5 @@ func addKnownTypes(scheme *runtime.Scheme) { &TokenReview{}, ) + return nil } diff --git a/pkg/apis/authorization/install/install.go b/pkg/apis/authorization/install/install.go index 78998155987..2c474fde473 100644 --- a/pkg/apis/authorization/install/install.go +++ b/pkg/apis/authorization/install/install.go @@ -89,7 +89,10 @@ func enableVersions(externalVersions []unversioned.GroupVersion) error { func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - authorization.AddToScheme(api.Scheme) + if err := authorization.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -98,7 +101,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1beta1.SchemeGroupVersion: - v1beta1.AddToScheme(api.Scheme) + if err := v1beta1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/pkg/apis/authorization/register.go b/pkg/apis/authorization/register.go index b1cfa491bc9..1c5f9066bc5 100644 --- a/pkg/apis/authorization/register.go +++ b/pkg/apis/authorization/register.go @@ -37,14 +37,16 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &SelfSubjectAccessReview{}, &SubjectAccessReview{}, &LocalSubjectAccessReview{}, ) + return nil } diff --git a/pkg/apis/authorization/v1beta1/conversion.go b/pkg/apis/authorization/v1beta1/conversion.go index cd03e61b079..fa887912577 100644 --- a/pkg/apis/authorization/v1beta1/conversion.go +++ b/pkg/apis/authorization/v1beta1/conversion.go @@ -20,11 +20,7 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addConversionFuncs(scheme *runtime.Scheme) { +func addConversionFuncs(scheme *runtime.Scheme) error { // Add non-generated conversion functions - err := scheme.AddConversionFuncs() - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } + return scheme.AddConversionFuncs() } diff --git a/pkg/apis/authorization/v1beta1/defaults.go b/pkg/apis/authorization/v1beta1/defaults.go index f9dda995e3c..57dd337dac0 100644 --- a/pkg/apis/authorization/v1beta1/defaults.go +++ b/pkg/apis/authorization/v1beta1/defaults.go @@ -20,6 +20,6 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs() +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs() } diff --git a/pkg/apis/authorization/v1beta1/register.go b/pkg/apis/authorization/v1beta1/register.go index c54d20d6dba..1b072d6152e 100644 --- a/pkg/apis/authorization/v1beta1/register.go +++ b/pkg/apis/authorization/v1beta1/register.go @@ -29,15 +29,13 @@ const GroupName = "authorization.k8s.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta1"} -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &v1.ListOptions{}, &v1.DeleteOptions{}, @@ -48,6 +46,7 @@ func addKnownTypes(scheme *runtime.Scheme) { ) versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } func (obj *LocalSubjectAccessReview) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/pkg/apis/autoscaling/install/install.go b/pkg/apis/autoscaling/install/install.go index be236ff0e43..7cb61126b7c 100644 --- a/pkg/apis/autoscaling/install/install.go +++ b/pkg/apis/autoscaling/install/install.go @@ -114,7 +114,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - autoscaling.AddToScheme(api.Scheme) + if err := autoscaling.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -123,7 +126,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1.SchemeGroupVersion: - v1.AddToScheme(api.Scheme) + if err := v1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/pkg/apis/autoscaling/register.go b/pkg/apis/autoscaling/register.go index ee0d3c75bd8..7be0e64e8c1 100644 --- a/pkg/apis/autoscaling/register.go +++ b/pkg/apis/autoscaling/register.go @@ -38,17 +38,18 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Scale{}, &HorizontalPodAutoscaler{}, &HorizontalPodAutoscalerList{}, &api.ListOptions{}, ) + return nil } diff --git a/pkg/apis/autoscaling/v1/defaults.go b/pkg/apis/autoscaling/v1/defaults.go index aacf552fca8..e374add3ba3 100644 --- a/pkg/apis/autoscaling/v1/defaults.go +++ b/pkg/apis/autoscaling/v1/defaults.go @@ -20,8 +20,8 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs( +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( SetDefaults_HorizontalPodAutoscaler, ) } diff --git a/pkg/apis/autoscaling/v1/register.go b/pkg/apis/autoscaling/v1/register.go index 93d9535e4a2..d7b7df928f3 100644 --- a/pkg/apis/autoscaling/v1/register.go +++ b/pkg/apis/autoscaling/v1/register.go @@ -29,13 +29,13 @@ const GroupName = "autoscaling" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - addDefaultingFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &HorizontalPodAutoscaler{}, &HorizontalPodAutoscalerList{}, @@ -44,4 +44,5 @@ func addKnownTypes(scheme *runtime.Scheme) { &v1.DeleteOptions{}, ) versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/pkg/apis/batch/install/install.go b/pkg/apis/batch/install/install.go index 22f92b708c8..9d327b175d9 100644 --- a/pkg/apis/batch/install/install.go +++ b/pkg/apis/batch/install/install.go @@ -120,7 +120,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - batch.AddToScheme(api.Scheme) + if err := batch.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -129,9 +132,15 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1.SchemeGroupVersion: - v1.AddToScheme(api.Scheme) + if err := v1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } case v2alpha1.SchemeGroupVersion: - v2alpha1.AddToScheme(api.Scheme) + if err := v2alpha1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/pkg/apis/batch/register.go b/pkg/apis/batch/register.go index 641df5f3911..9718a51d540 100644 --- a/pkg/apis/batch/register.go +++ b/pkg/apis/batch/register.go @@ -38,13 +38,13 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Job{}, &JobList{}, @@ -53,4 +53,5 @@ func addKnownTypes(scheme *runtime.Scheme) { &ScheduledJobList{}, &api.ListOptions{}, ) + return nil } diff --git a/pkg/apis/batch/v1/conversion.go b/pkg/apis/batch/v1/conversion.go index 8846af1ed5e..01dfe02970b 100644 --- a/pkg/apis/batch/v1/conversion.go +++ b/pkg/apis/batch/v1/conversion.go @@ -27,18 +27,17 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addConversionFuncs(scheme *runtime.Scheme) { +func addConversionFuncs(scheme *runtime.Scheme) error { // Add non-generated conversion functions err := scheme.AddConversionFuncs( Convert_batch_JobSpec_To_v1_JobSpec, Convert_v1_JobSpec_To_batch_JobSpec, ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } - err = api.Scheme.AddFieldLabelConversionFunc("batch/v1", "Job", + return api.Scheme.AddFieldLabelConversionFunc("batch/v1", "Job", func(label, value string) (string, string, error) { switch label { case "metadata.name", "metadata.namespace", "status.successful": @@ -46,11 +45,8 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label not supported: %s", label) } - }) - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } + }, + ) } func Convert_batch_JobSpec_To_v1_JobSpec(in *batch.JobSpec, out *JobSpec, s conversion.Scope) error { diff --git a/pkg/apis/batch/v1/defaults.go b/pkg/apis/batch/v1/defaults.go index 571d2c524fd..5b029d09a0c 100644 --- a/pkg/apis/batch/v1/defaults.go +++ b/pkg/apis/batch/v1/defaults.go @@ -20,8 +20,8 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs( +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( SetDefaults_Job, ) } diff --git a/pkg/apis/batch/v1/register.go b/pkg/apis/batch/v1/register.go index 3631c02d12a..aa97b0eafbf 100644 --- a/pkg/apis/batch/v1/register.go +++ b/pkg/apis/batch/v1/register.go @@ -29,14 +29,13 @@ const GroupName = "batch" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Job{}, &JobList{}, @@ -44,4 +43,5 @@ func addKnownTypes(scheme *runtime.Scheme) { &v1.DeleteOptions{}, ) versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/pkg/apis/batch/v2alpha1/conversion.go b/pkg/apis/batch/v2alpha1/conversion.go index 2d5710a2315..0ac589de889 100644 --- a/pkg/apis/batch/v2alpha1/conversion.go +++ b/pkg/apis/batch/v2alpha1/conversion.go @@ -28,15 +28,14 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addConversionFuncs(scheme *runtime.Scheme) { +func addConversionFuncs(scheme *runtime.Scheme) error { // Add non-generated conversion functions err := scheme.AddConversionFuncs( Convert_batch_JobSpec_To_v2alpha1_JobSpec, Convert_v2alpha1_JobSpec_To_batch_JobSpec, ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } // Add field label conversions for kinds having selectable nothing but ObjectMeta fields. @@ -50,11 +49,11 @@ func addConversionFuncs(scheme *runtime.Scheme) { return "", "", fmt.Errorf("field label not supported: %s", label) } }) + if err != nil { + return err + } } - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } + return nil } func Convert_batch_JobSpec_To_v2alpha1_JobSpec(in *batch.JobSpec, out *JobSpec, s conversion.Scope) error { diff --git a/pkg/apis/batch/v2alpha1/defaults.go b/pkg/apis/batch/v2alpha1/defaults.go index 42f820074b8..9a594f16fd5 100644 --- a/pkg/apis/batch/v2alpha1/defaults.go +++ b/pkg/apis/batch/v2alpha1/defaults.go @@ -20,8 +20,8 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs( +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( SetDefaults_Job, SetDefaults_ScheduledJob, ) diff --git a/pkg/apis/batch/v2alpha1/register.go b/pkg/apis/batch/v2alpha1/register.go index 54f0d6290a1..07bd276f20c 100644 --- a/pkg/apis/batch/v2alpha1/register.go +++ b/pkg/apis/batch/v2alpha1/register.go @@ -29,14 +29,13 @@ const GroupName = "batch" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v2alpha1"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Job{}, &JobList{}, @@ -47,4 +46,5 @@ func addKnownTypes(scheme *runtime.Scheme) { &v1.DeleteOptions{}, ) versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/pkg/apis/certificates/install/install.go b/pkg/apis/certificates/install/install.go index cf54da430e5..7fb22de4116 100644 --- a/pkg/apis/certificates/install/install.go +++ b/pkg/apis/certificates/install/install.go @@ -116,7 +116,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - certificates.AddToScheme(api.Scheme) + if err := certificates.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -125,7 +128,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1alpha1.SchemeGroupVersion: - v1alpha1.AddToScheme(api.Scheme) + if err := v1alpha1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/pkg/apis/certificates/register.go b/pkg/apis/certificates/register.go index d232b3c8617..1b24cc754b2 100644 --- a/pkg/apis/certificates/register.go +++ b/pkg/apis/certificates/register.go @@ -22,6 +22,11 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + // GroupName is the group name use in this package const GroupName = "certificates" @@ -38,19 +43,15 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} - // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &CertificateSigningRequest{}, &CertificateSigningRequestList{}, &api.ListOptions{}, &api.DeleteOptions{}, ) + return nil } func (obj *CertificateSigningRequest) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/pkg/apis/certificates/v1alpha1/conversion.go b/pkg/apis/certificates/v1alpha1/conversion.go index 0b933b25990..ba2f3c37235 100644 --- a/pkg/apis/certificates/v1alpha1/conversion.go +++ b/pkg/apis/certificates/v1alpha1/conversion.go @@ -18,6 +18,7 @@ package v1alpha1 import "k8s.io/kubernetes/pkg/runtime" -func addConversionFuncs(scheme *runtime.Scheme) { +func addConversionFuncs(scheme *runtime.Scheme) error { // Add non-generated conversion functions here. Currently there are none. + return nil } diff --git a/pkg/apis/certificates/v1alpha1/register.go b/pkg/apis/certificates/v1alpha1/register.go index 7b841c0b548..da2180c9bbe 100644 --- a/pkg/apis/certificates/v1alpha1/register.go +++ b/pkg/apis/certificates/v1alpha1/register.go @@ -39,14 +39,13 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - // addDefaultingFuncs(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &CertificateSigningRequest{}, &CertificateSigningRequestList{}, @@ -56,6 +55,7 @@ func addKnownTypes(scheme *runtime.Scheme) { // Add the watch version that applies versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } func (obj *CertificateSigningRequest) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/pkg/apis/componentconfig/install/install.go b/pkg/apis/componentconfig/install/install.go index 1a8b0cd1266..ea591afadf5 100644 --- a/pkg/apis/componentconfig/install/install.go +++ b/pkg/apis/componentconfig/install/install.go @@ -114,7 +114,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - componentconfig.AddToScheme(api.Scheme) + if err := componentconfig.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -123,7 +126,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1alpha1.SchemeGroupVersion: - v1alpha1.AddToScheme(api.Scheme) + if err := v1alpha1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/pkg/apis/componentconfig/register.go b/pkg/apis/componentconfig/register.go index f27bf1390ff..199f5b5d7c6 100644 --- a/pkg/apis/componentconfig/register.go +++ b/pkg/apis/componentconfig/register.go @@ -21,9 +21,10 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // GroupName is the group name use in this package const GroupName = "componentconfig" @@ -41,13 +42,14 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { // TODO this will get cleaned up with the scheme types are fixed scheme.AddKnownTypes(SchemeGroupVersion, &KubeProxyConfiguration{}, &KubeSchedulerConfiguration{}, &KubeletConfiguration{}, ) + return nil } func (obj *KubeProxyConfiguration) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/pkg/apis/componentconfig/v1alpha1/defaults.go b/pkg/apis/componentconfig/v1alpha1/defaults.go index 16feb2ea1a4..a0e7ad0fc12 100644 --- a/pkg/apis/componentconfig/v1alpha1/defaults.go +++ b/pkg/apis/componentconfig/v1alpha1/defaults.go @@ -47,8 +47,8 @@ const ( var zeroDuration = unversioned.Duration{} -func addDefaultingFuncs(scheme *kruntime.Scheme) { - scheme.AddDefaultingFuncs( +func addDefaultingFuncs(scheme *kruntime.Scheme) error { + return scheme.AddDefaultingFuncs( SetDefaults_KubeProxyConfiguration, SetDefaults_KubeSchedulerConfiguration, SetDefaults_LeaderElectionConfiguration, diff --git a/pkg/apis/componentconfig/v1alpha1/register.go b/pkg/apis/componentconfig/v1alpha1/register.go index adf968c8319..7017d9e98b3 100644 --- a/pkg/apis/componentconfig/v1alpha1/register.go +++ b/pkg/apis/componentconfig/v1alpha1/register.go @@ -27,17 +27,18 @@ const GroupName = "componentconfig" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1alpha1"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - addDefaultingFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &KubeProxyConfiguration{}, &KubeSchedulerConfiguration{}, &KubeletConfiguration{}, ) + return nil } func (obj *KubeProxyConfiguration) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/pkg/apis/extensions/install/install.go b/pkg/apis/extensions/install/install.go index 5fe3abbd72e..50bbf7fdff4 100644 --- a/pkg/apis/extensions/install/install.go +++ b/pkg/apis/extensions/install/install.go @@ -118,7 +118,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - extensions.AddToScheme(api.Scheme) + if err := extensions.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -127,7 +130,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1beta1.SchemeGroupVersion: - v1beta1.AddToScheme(api.Scheme) + if err := v1beta1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/pkg/apis/extensions/register.go b/pkg/apis/extensions/register.go index 480a38d9792..f12335b97c2 100644 --- a/pkg/apis/extensions/register.go +++ b/pkg/apis/extensions/register.go @@ -40,13 +40,13 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { // TODO this gets cleaned up when the types are fixed scheme.AddKnownTypes(SchemeGroupVersion, &Deployment{}, @@ -78,4 +78,5 @@ func addKnownTypes(scheme *runtime.Scheme) { &StorageClass{}, &StorageClassList{}, ) + return nil } diff --git a/pkg/apis/extensions/v1beta1/conversion.go b/pkg/apis/extensions/v1beta1/conversion.go index d685ebfee55..b73549b9e96 100644 --- a/pkg/apis/extensions/v1beta1/conversion.go +++ b/pkg/apis/extensions/v1beta1/conversion.go @@ -30,7 +30,7 @@ import ( "k8s.io/kubernetes/pkg/util/intstr" ) -func addConversionFuncs(scheme *runtime.Scheme) { +func addConversionFuncs(scheme *runtime.Scheme) error { // Add non-generated conversion functions err := scheme.AddConversionFuncs( Convert_extensions_ScaleStatus_To_v1beta1_ScaleStatus, @@ -53,8 +53,7 @@ func addConversionFuncs(scheme *runtime.Scheme) { Convert_v1beta1_JobSpec_To_batch_JobSpec, ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } // Add field label conversions for kinds having selectable nothing but ObjectMeta fields. @@ -67,14 +66,14 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label %q not supported for %q", label, kind) } - }) + }, + ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } } - err = api.Scheme.AddFieldLabelConversionFunc("extensions/v1beta1", "Job", + return api.Scheme.AddFieldLabelConversionFunc("extensions/v1beta1", "Job", func(label, value string) (string, string, error) { switch label { case "metadata.name", "metadata.namespace", "status.successful": @@ -82,11 +81,8 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label not supported: %s", label) } - }) - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } + }, + ) } func Convert_extensions_ScaleStatus_To_v1beta1_ScaleStatus(in *extensions.ScaleStatus, out *ScaleStatus, s conversion.Scope) error { diff --git a/pkg/apis/extensions/v1beta1/defaults.go b/pkg/apis/extensions/v1beta1/defaults.go index ab6a202c370..0708b11e1a3 100644 --- a/pkg/apis/extensions/v1beta1/defaults.go +++ b/pkg/apis/extensions/v1beta1/defaults.go @@ -22,8 +22,8 @@ import ( "k8s.io/kubernetes/pkg/util/intstr" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs( +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( SetDefaults_DaemonSet, SetDefaults_Deployment, SetDefaults_Job, diff --git a/pkg/apis/extensions/v1beta1/register.go b/pkg/apis/extensions/v1beta1/register.go index 0dce6f07ce6..bc67a7f2128 100644 --- a/pkg/apis/extensions/v1beta1/register.go +++ b/pkg/apis/extensions/v1beta1/register.go @@ -29,14 +29,13 @@ const GroupName = "extensions" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta1"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Deployment{}, &DeploymentList{}, @@ -68,4 +67,5 @@ func addKnownTypes(scheme *runtime.Scheme) { ) // Add the watch version that applies versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/pkg/apis/policy/install/install.go b/pkg/apis/policy/install/install.go index 90489a74414..4ac0ccbdc51 100644 --- a/pkg/apis/policy/install/install.go +++ b/pkg/apis/policy/install/install.go @@ -114,7 +114,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - policy.AddToScheme(api.Scheme) + if err := policy.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -123,7 +126,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1alpha1.SchemeGroupVersion: - v1alpha1.AddToScheme(api.Scheme) + if err := v1alpha1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/pkg/apis/policy/register.go b/pkg/apis/policy/register.go index e61c82b287c..0b219dff702 100644 --- a/pkg/apis/policy/register.go +++ b/pkg/apis/policy/register.go @@ -37,16 +37,17 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { // TODO this gets cleaned up when the types are fixed scheme.AddKnownTypes(SchemeGroupVersion, &PodDisruptionBudget{}, &PodDisruptionBudgetList{}, ) + return nil } diff --git a/pkg/apis/policy/v1alpha1/register.go b/pkg/apis/policy/v1alpha1/register.go index 6a82e3f9ce1..9cba49d20bc 100644 --- a/pkg/apis/policy/v1alpha1/register.go +++ b/pkg/apis/policy/v1alpha1/register.go @@ -29,16 +29,13 @@ const GroupName = "policy" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1alpha1"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - /* - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) - */ -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &PodDisruptionBudget{}, &PodDisruptionBudgetList{}, @@ -47,4 +44,5 @@ func addKnownTypes(scheme *runtime.Scheme) { ) // Add the watch version that applies versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/pkg/apis/rbac/install/install.go b/pkg/apis/rbac/install/install.go index 0f6dc91b9bb..bfa9eea3ff2 100644 --- a/pkg/apis/rbac/install/install.go +++ b/pkg/apis/rbac/install/install.go @@ -115,7 +115,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - rbac.AddToScheme(api.Scheme) + if err := rbac.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -124,7 +127,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1alpha1.SchemeGroupVersion: - v1alpha1.AddToScheme(api.Scheme) + if err := v1alpha1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/pkg/apis/rbac/register.go b/pkg/apis/rbac/register.go index 5d89656e5a1..101156b98df 100644 --- a/pkg/apis/rbac/register.go +++ b/pkg/apis/rbac/register.go @@ -38,13 +38,13 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Role{}, &RoleBinding{}, @@ -61,4 +61,5 @@ func addKnownTypes(scheme *runtime.Scheme) { &api.ExportOptions{}, ) versioned.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/pkg/apis/rbac/v1alpha1/register.go b/pkg/apis/rbac/v1alpha1/register.go index cff47206bbd..f3a6b5b7624 100644 --- a/pkg/apis/rbac/v1alpha1/register.go +++ b/pkg/apis/rbac/v1alpha1/register.go @@ -27,12 +27,13 @@ import ( // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: rbac.GroupName, Version: "v1alpha1"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Role{}, &RoleBinding{}, @@ -49,4 +50,5 @@ func addKnownTypes(scheme *runtime.Scheme) { &v1.ExportOptions{}, ) versioned.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/pkg/client/unversioned/clientcmd/api/latest/latest.go b/pkg/client/unversioned/clientcmd/api/latest/latest.go index 0b9a4270c0e..b77509cb563 100644 --- a/pkg/client/unversioned/clientcmd/api/latest/latest.go +++ b/pkg/client/unversioned/clientcmd/api/latest/latest.go @@ -19,7 +19,7 @@ package latest import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api" - _ "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1" + "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime/serializer/json" "k8s.io/kubernetes/pkg/runtime/serializer/versioning" @@ -40,12 +40,24 @@ const OldestVersion = "v1" // with a set of versions to choose. var Versions = []string{"v1"} -var Codec runtime.Codec +var ( + Codec runtime.Codec + Scheme *runtime.Scheme +) func init() { - yamlSerializer := json.NewYAMLSerializer(json.DefaultMetaFactory, api.Scheme, api.Scheme) + Scheme = runtime.NewScheme() + if err := api.AddToScheme(Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } + if err := v1.AddToScheme(Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } + yamlSerializer := json.NewYAMLSerializer(json.DefaultMetaFactory, Scheme, Scheme) Codec = versioning.NewCodecForScheme( - api.Scheme, + Scheme, yamlSerializer, yamlSerializer, []unversioned.GroupVersion{{Version: Version}}, diff --git a/pkg/client/unversioned/clientcmd/api/register.go b/pkg/client/unversioned/clientcmd/api/register.go index 5426e7fef40..9c4c0f1db4f 100644 --- a/pkg/client/unversioned/clientcmd/api/register.go +++ b/pkg/client/unversioned/clientcmd/api/register.go @@ -21,17 +21,20 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -// Scheme is the default instance of runtime.Scheme to which types in the Kubernetes API are already registered. -var Scheme = runtime.NewScheme() - // SchemeGroupVersion is group version used to register these objects // TODO this should be in the "kubeconfig" group var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: runtime.APIVersionInternal} -func init() { - Scheme.AddKnownTypes(SchemeGroupVersion, +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, &Config{}, ) + return nil } func (obj *Config) GetObjectKind() unversioned.ObjectKind { return obj } diff --git a/pkg/client/unversioned/clientcmd/api/v1/conversion.go b/pkg/client/unversioned/clientcmd/api/v1/conversion.go index e22e5f81ec7..f21072e35d7 100644 --- a/pkg/client/unversioned/clientcmd/api/v1/conversion.go +++ b/pkg/client/unversioned/clientcmd/api/v1/conversion.go @@ -24,8 +24,8 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func init() { - err := api.Scheme.AddConversionFuncs( +func addConversionFuncs(scheme *runtime.Scheme) error { + return scheme.AddConversionFuncs( func(in *Cluster, out *api.Cluster, s conversion.Scope) error { return s.DefaultConvert(in, out, conversion.IgnoreMissingFields) }, @@ -224,8 +224,4 @@ func init() { return nil }, ) - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } } diff --git a/pkg/client/unversioned/clientcmd/api/v1/register.go b/pkg/client/unversioned/clientcmd/api/v1/register.go index dcdb533c0d3..015901d2a1a 100644 --- a/pkg/client/unversioned/clientcmd/api/v1/register.go +++ b/pkg/client/unversioned/clientcmd/api/v1/register.go @@ -18,17 +18,23 @@ package v1 import ( "k8s.io/kubernetes/pkg/api/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api" + "k8s.io/kubernetes/pkg/runtime" ) // SchemeGroupVersion is group version used to register these objects // TODO this should be in the "kubeconfig" group var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"} -func init() { - api.Scheme.AddKnownTypes(SchemeGroupVersion, +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, &Config{}, ) + return nil } func (obj *Config) GetObjectKind() unversioned.ObjectKind { return obj } diff --git a/pkg/kubectl/cmd/config/view.go b/pkg/kubectl/cmd/config/view.go index 2400c32a73b..e613d3785d9 100644 --- a/pkg/kubectl/cmd/config/view.go +++ b/pkg/kubectl/cmd/config/view.go @@ -79,7 +79,7 @@ func NewCmdConfigView(out io.Writer, ConfigAccess clientcmd.ConfigAccess) *cobra cmdutil.CheckErr(err) version, err := cmdutil.OutputVersion(cmd, &latest.ExternalVersion) cmdutil.CheckErr(err) - printer = kubectl.NewVersionedPrinter(printer, clientcmdapi.Scheme, version) + printer = kubectl.NewVersionedPrinter(printer, latest.Scheme, version) cmdutil.CheckErr(options.Run(out, printer)) }, diff --git a/pkg/runtime/scheme_builder.go b/pkg/runtime/scheme_builder.go index 3685d4195e4..944db48182b 100644 --- a/pkg/runtime/scheme_builder.go +++ b/pkg/runtime/scheme_builder.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 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. @@ -20,18 +20,29 @@ package runtime // code to compile without explicitly referencing generated types. You should // declare one in each package that will have generated deep copy or conversion // functions. -type SchemeBuilder []func(*Scheme) +type SchemeBuilder []func(*Scheme) error -// AddToScheme applies all the stored functions to the scheme. -func (sb *SchemeBuilder) AddToScheme(s *Scheme) { +// AddToScheme applies all the stored functions to the scheme. A non-nil error +// indicates that one function failed and the attempt was abandoned. +func (sb *SchemeBuilder) AddToScheme(s *Scheme) error { for _, f := range *sb { - f(s) + if err := f(s); err != nil { + return err + } } + return nil } // Register adds a scheme setup function to the list. -func (sb *SchemeBuilder) Register(funcs ...func(*Scheme)) { +func (sb *SchemeBuilder) Register(funcs ...func(*Scheme) error) { for _, f := range funcs { *sb = append(*sb, f) } } + +// NewSchemeBuilder calls Register for you. +func NewSchemeBuilder(funcs ...func(*Scheme) error) SchemeBuilder { + var sb SchemeBuilder + sb.Register(funcs...) + return sb +} diff --git a/plugin/pkg/scheduler/api/register.go b/plugin/pkg/scheduler/api/register.go index 2cb08fba7ed..11d81009f5a 100644 --- a/plugin/pkg/scheduler/api/register.go +++ b/plugin/pkg/scheduler/api/register.go @@ -22,19 +22,33 @@ import ( ) // Scheme is the default instance of runtime.Scheme to which types in the Kubernetes API are already registered. +// TODO: remove this, scheduler should not have its own scheme. var Scheme = runtime.NewScheme() // SchemeGroupVersion is group version used to register these objects // TODO this should be in the "scheduler" group var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: runtime.APIVersionInternal} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + func init() { - if err := Scheme.AddIgnoredConversionType(&unversioned.TypeMeta{}, &unversioned.TypeMeta{}); err != nil { + if err := addKnownTypes(Scheme); err != nil { + // Programmer error. panic(err) } - Scheme.AddKnownTypes(SchemeGroupVersion, +} + +func addKnownTypes(scheme *runtime.Scheme) error { + if err := scheme.AddIgnoredConversionType(&unversioned.TypeMeta{}, &unversioned.TypeMeta{}); err != nil { + return err + } + scheme.AddKnownTypes(SchemeGroupVersion, &Policy{}, ) + return nil } func (obj *Policy) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/plugin/pkg/scheduler/api/v1/register.go b/plugin/pkg/scheduler/api/v1/register.go index 2c4507270ca..b01b5bd07dd 100644 --- a/plugin/pkg/scheduler/api/v1/register.go +++ b/plugin/pkg/scheduler/api/v1/register.go @@ -18,6 +18,7 @@ package v1 import ( "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/plugin/pkg/scheduler/api" ) @@ -26,9 +27,22 @@ import ( var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"} func init() { - api.Scheme.AddKnownTypes(SchemeGroupVersion, + if err := addKnownTypes(api.Scheme); err != nil { + // Programmer error. + panic(err) + } +} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, &Policy{}, ) + return nil } func (obj *Policy) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }