diff --git a/cmd/openshift-node-config/openshift-node-config.go b/cmd/openshift-node-config/openshift-node-config.go index b32e4c9bbea7..8bf231d510fb 100644 --- a/cmd/openshift-node-config/openshift-node-config.go +++ b/cmd/openshift-node-config/openshift-node-config.go @@ -37,8 +37,8 @@ func main() { Kubelet command-line flags. `), RunE: func(cmd *cobra.Command, args []string) error { - configapi.AddToScheme(configapi.Scheme) - configapiv1.AddToScheme(configapi.Scheme) + configapi.InstallLegacy(configapi.Scheme) + configapiv1.InstallLegacy(configapi.Scheme) if len(configFile) == 0 { return fmt.Errorf("you must specify a --config file to read") diff --git a/pkg/api/install/tags_test.go b/pkg/api/install/tags_test.go index 14b4cfbdf627..43e3acb8e048 100644 --- a/pkg/api/install/tags_test.go +++ b/pkg/api/install/tags_test.go @@ -11,8 +11,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/sets" - configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" - configapiv1 "github.com/openshift/origin/pkg/cmd/server/apis/config/v1" + configapiinstall "github.com/openshift/origin/pkg/cmd/server/apis/config/install" ) func TestDescriptions(t *testing.T) { @@ -66,6 +65,7 @@ func TestInternalJsonTags(t *testing.T) { scheme := runtime.NewScheme() InstallInternalOpenShift(scheme) InstallInternalKube(scheme) + configapiinstall.InstallLegacyInternal(scheme) seen := map[reflect.Type]bool{} seenGroups := sets.String{} @@ -81,10 +81,6 @@ func TestInternalJsonTags(t *testing.T) { checkInternalJsonTags(apiType, &seen, t) } } - - for _, apiType := range configapi.Scheme.KnownTypes(configapi.SchemeGroupVersion) { - checkInternalJsonTags(apiType, &seen, t) - } } // internalTypesWithAllowedJsonTags is the list of special structs that have a particular need to have json tags on their @@ -130,6 +126,7 @@ func TestExternalJsonTags(t *testing.T) { scheme := runtime.NewScheme() InstallInternalOpenShift(scheme) InstallInternalKube(scheme) + configapiinstall.InstallLegacyInternal(scheme) seen := map[reflect.Type]bool{} @@ -138,11 +135,6 @@ func TestExternalJsonTags(t *testing.T) { checkExternalJsonTags(apiType, &seen, t) } } - - for _, apiType := range configapi.Scheme.KnownTypes(configapiv1.SchemeGroupVersion) { - checkExternalJsonTags(apiType, &seen, t) - } - } func checkExternalJsonTags(objType reflect.Type, seen *map[reflect.Type]bool, t *testing.T) { diff --git a/pkg/build/controller/build/apis/defaults/install/install.go b/pkg/build/controller/build/apis/defaults/install/install.go index 4eabdde7a45e..23c11b2f5d90 100644 --- a/pkg/build/controller/build/apis/defaults/install/install.go +++ b/pkg/build/controller/build/apis/defaults/install/install.go @@ -1,45 +1,14 @@ package install import ( - "github.com/golang/glog" - - "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/runtime" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" "github.com/openshift/origin/pkg/build/controller/build/apis/defaults" "github.com/openshift/origin/pkg/build/controller/build/apis/defaults/v1" - configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" ) -// availableVersions lists all known external versions for this group from most preferred to least preferred -var availableVersions = []schema.GroupVersion{v1.SchemeGroupVersion} - -func init() { - if err := enableVersions(availableVersions); err != nil { - panic(err) - } -} - -// TODO: enableVersions should be centralized rather than spread in each API -// group. -// We can combine registered.RegisterVersions, registered.EnableVersions and -// registered.RegisterGroup once we have moved enableVersions there. -func enableVersions(externalVersions []schema.GroupVersion) error { - addVersionsToScheme(externalVersions...) - return nil -} - -func addVersionsToScheme(externalVersions ...schema.GroupVersion) { - // add the internal version to Scheme - defaults.AddToScheme(configapi.Scheme) - // add the enabled external versions to Scheme - for _, v := range externalVersions { - switch v { - case v1.SchemeGroupVersion: - v1.AddToScheme(configapi.Scheme) - - default: - glog.Errorf("Version %s is not known, so it will not be added to the Scheme.", v) - continue - } - } +func InstallLegacyInternal(scheme *runtime.Scheme) { + utilruntime.Must(defaults.InstallLegacy(scheme)) + utilruntime.Must(v1.InstallLegacy(scheme)) } diff --git a/pkg/build/controller/build/apis/defaults/register.go b/pkg/build/controller/build/apis/defaults/register.go index b505a82df0ee..1567295d2947 100644 --- a/pkg/build/controller/build/apis/defaults/register.go +++ b/pkg/build/controller/build/apis/defaults/register.go @@ -20,7 +20,7 @@ func Resource(resource string) schema.GroupResource { var ( SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - AddToScheme = SchemeBuilder.AddToScheme + InstallLegacy = SchemeBuilder.AddToScheme ) // Adds the list of known types to api.Scheme. diff --git a/pkg/build/controller/build/apis/defaults/v1/register.go b/pkg/build/controller/build/apis/defaults/v1/register.go index f9752db27f28..cb3d5bc96f3b 100644 --- a/pkg/build/controller/build/apis/defaults/v1/register.go +++ b/pkg/build/controller/build/apis/defaults/v1/register.go @@ -1,6 +1,7 @@ package v1 import ( + "github.com/openshift/origin/pkg/build/controller/build/apis/defaults" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" ) @@ -9,8 +10,11 @@ import ( var SchemeGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} var ( - localSchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - AddToScheme = localSchemeBuilder.AddToScheme + localSchemeBuilder = runtime.NewSchemeBuilder( + addKnownTypes, + defaults.InstallLegacy, + ) + InstallLegacy = localSchemeBuilder.AddToScheme ) // Adds the list of known types to api.Scheme. diff --git a/pkg/build/controller/build/apis/overrides/install/install.go b/pkg/build/controller/build/apis/overrides/install/install.go index 5772cdcc1286..0d94375c4ad6 100644 --- a/pkg/build/controller/build/apis/overrides/install/install.go +++ b/pkg/build/controller/build/apis/overrides/install/install.go @@ -1,45 +1,14 @@ package install import ( - "github.com/golang/glog" - - "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/runtime" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" "github.com/openshift/origin/pkg/build/controller/build/apis/overrides" "github.com/openshift/origin/pkg/build/controller/build/apis/overrides/v1" - configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" ) -// availableVersions lists all known external versions for this group from most preferred to least preferred -var availableVersions = []schema.GroupVersion{v1.SchemeGroupVersion} - -func init() { - if err := enableVersions(availableVersions); err != nil { - panic(err) - } -} - -// TODO: enableVersions should be centralized rather than spread in each API -// group. -// We can combine registered.RegisterVersions, registered.EnableVersions and -// registered.RegisterGroup once we have moved enableVersions there. -func enableVersions(externalVersions []schema.GroupVersion) error { - addVersionsToScheme(externalVersions...) - return nil -} - -func addVersionsToScheme(externalVersions ...schema.GroupVersion) { - // add the internal version to Scheme - overrides.AddToScheme(configapi.Scheme) - // add the enabled external versions to Scheme - for _, v := range externalVersions { - switch v { - case v1.SchemeGroupVersion: - v1.AddToScheme(configapi.Scheme) - - default: - glog.Errorf("Version %s is not known, so it will not be added to the Scheme.", v) - continue - } - } +func InstallLegacyInternal(scheme *runtime.Scheme) { + utilruntime.Must(overrides.InstallLegacy(scheme)) + utilruntime.Must(v1.InstallLegacy(scheme)) } diff --git a/pkg/build/controller/build/apis/overrides/register.go b/pkg/build/controller/build/apis/overrides/register.go index 27e52da75fe2..d5d2499147ba 100644 --- a/pkg/build/controller/build/apis/overrides/register.go +++ b/pkg/build/controller/build/apis/overrides/register.go @@ -20,7 +20,7 @@ func Resource(resource string) schema.GroupResource { var ( SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - AddToScheme = SchemeBuilder.AddToScheme + InstallLegacy = SchemeBuilder.AddToScheme ) // Adds the list of known types to api.Scheme. diff --git a/pkg/build/controller/build/apis/overrides/v1/register.go b/pkg/build/controller/build/apis/overrides/v1/register.go index 604cfbab0a1b..96b5cd35503c 100644 --- a/pkg/build/controller/build/apis/overrides/v1/register.go +++ b/pkg/build/controller/build/apis/overrides/v1/register.go @@ -1,6 +1,7 @@ package v1 import ( + "github.com/openshift/origin/pkg/build/controller/build/apis/overrides" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" ) @@ -9,8 +10,11 @@ import ( var SchemeGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} var ( - SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - AddToScheme = SchemeBuilder.AddToScheme + SchemeBuilder = runtime.NewSchemeBuilder( + addKnownTypes, + overrides.InstallLegacy, + ) + InstallLegacy = SchemeBuilder.AddToScheme ) // Adds the list of known types to api.Scheme. diff --git a/pkg/build/controller/build/pluginconfig/config.go b/pkg/build/controller/build/pluginconfig/config.go index 2dfc6f546eab..261d021167c2 100644 --- a/pkg/build/controller/build/pluginconfig/config.go +++ b/pkg/build/controller/build/pluginconfig/config.go @@ -6,21 +6,12 @@ import ( "github.com/golang/glog" "k8s.io/apimachinery/pkg/runtime" - kapiserverinstall "k8s.io/apiserver/pkg/apis/apiserver/install" configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" "github.com/openshift/origin/pkg/cmd/server/apis/config/latest" configlatest "github.com/openshift/origin/pkg/cmd/server/apis/config/latest" ) -var ( - scheme = runtime.NewScheme() -) - -func init() { - kapiserverinstall.Install(scheme) -} - func getPluginConfig(cfg configapi.AdmissionPluginConfig) (string, error) { obj := cfg.Configuration if obj == nil { diff --git a/pkg/build/controller/build/pluginconfig/config_test.go b/pkg/build/controller/build/pluginconfig/config_test.go deleted file mode 100644 index 448e5b5f0a7a..000000000000 --- a/pkg/build/controller/build/pluginconfig/config_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package pluginconfig - -import ( - "reflect" - "testing" - - testtypes "github.com/openshift/origin/pkg/build/controller/build/pluginconfig/testing" - configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" - "github.com/openshift/origin/pkg/cmd/server/apis/config/latest" - configapiv1 "github.com/openshift/origin/pkg/cmd/server/apis/config/v1" - - // install server api - _ "github.com/openshift/origin/pkg/api/install" - "github.com/openshift/origin/pkg/api/legacy" - _ "github.com/openshift/origin/pkg/cmd/server/apis/config/install" -) - -func TestGetPluginConfig(t *testing.T) { - configapi.Scheme.AddKnownTypes(legacy.InternalGroupVersion, &testtypes.TestConfig{}) - configapi.Scheme.AddKnownTypeWithName(latest.Version.WithKind("TestConfig"), &testtypes.TestConfigV1{}) - - testConfig := &testtypes.TestConfig{ - Item1: "item1value", - Item2: []string{"element1", "element2"}, - } - - cfg := configapi.AdmissionPluginConfig{ - Location: "/path/to/my/config", - Configuration: testConfig, - } - fileName, err := getPluginConfig(cfg) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - resultConfig := &testtypes.TestConfig{} - if err = latest.ReadYAMLFileInto(fileName, resultConfig); err != nil { - t.Fatalf("error reading config file: %v", err) - } - if !reflect.DeepEqual(testConfig, resultConfig) { - t.Errorf("Unexpected config. Expected: %#v. Got: %#v", testConfig, resultConfig) - } -} - -func TestReadPluginConfig(t *testing.T) { - configapi.Scheme.AddKnownTypes(configapi.SchemeGroupVersion, &testtypes.TestConfig{}) - configapi.Scheme.AddKnownTypeWithName(configapiv1.SchemeGroupVersion.WithKind("TestConfig"), &testtypes.TestConfigV1{}) - configapi.Scheme.AddKnownTypes(configapi.SchemeGroupVersion, &testtypes.OtherTestConfig2{}) - configapi.Scheme.AddKnownTypeWithName(configapiv1.SchemeGroupVersion.WithKind("OtherTestConfig2"), &testtypes.OtherTestConfig2V2{}) - - config := &testtypes.TestConfig{} - - expected := &testtypes.TestConfig{ - Item1: "hello", - Item2: []string{"foo", "bar"}, - } - pluginCfg := map[string]*configapi.AdmissionPluginConfig{"testconfig": {Location: "", Configuration: expected}} - // The config should match the expected config object - err := ReadPluginConfig(pluginCfg, "testconfig", config) - if err != nil { - t.Fatalf("unexpected: %v", err) - } - if !reflect.DeepEqual(config, expected) { - t.Errorf("config does not equal expected: %#v", config) - } - - // Passing a nil cfg, should not get an error - pluginCfg = map[string]*configapi.AdmissionPluginConfig{} - err = ReadPluginConfig(pluginCfg, "testconfig", &testtypes.TestConfig{}) - if err != nil { - t.Fatalf("unexpected: %v", err) - } - - // Passing the wrong type of destination object should result in an error - config2 := &testtypes.OtherTestConfig2{} - pluginCfg = map[string]*configapi.AdmissionPluginConfig{"testconfig": {Location: "", Configuration: expected}} - err = ReadPluginConfig(pluginCfg, "testconfig", config2) - if err == nil { - t.Fatalf("expected error") - } -} diff --git a/pkg/build/controller/build/pluginconfig/testing/doc.go b/pkg/build/controller/build/pluginconfig/testing/doc.go deleted file mode 100644 index 1359f0128813..000000000000 --- a/pkg/build/controller/build/pluginconfig/testing/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// +k8s:deepcopy-gen=package - -// Package testing contains types for tests. -package testing diff --git a/pkg/build/controller/build/pluginconfig/testing/types.go b/pkg/build/controller/build/pluginconfig/testing/types.go deleted file mode 100644 index 166bacc0cb5b..000000000000 --- a/pkg/build/controller/build/pluginconfig/testing/types.go +++ /dev/null @@ -1,39 +0,0 @@ -package testing - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -type TestConfig struct { - metav1.TypeMeta `json:",inline"` - Item1 string `json:"item1"` - Item2 []string `json:"item2"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -type TestConfigV1 struct { - metav1.TypeMeta `json:",inline"` - Item1 string `json:"item1"` - Item2 []string `json:"item2"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -type OtherTestConfig2 struct { - metav1.TypeMeta - Thing string `json:"thing"` -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -type OtherTestConfig2V2 struct { - metav1.TypeMeta - Thing string `json:"thing"` -} - -func (obj *TestConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } -func (obj *TestConfigV1) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } -func (obj *OtherTestConfig2) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } -func (obj *OtherTestConfig2V2) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } diff --git a/pkg/build/controller/build/pluginconfig/testing/zz_generated.deepcopy.go b/pkg/build/controller/build/pluginconfig/testing/zz_generated.deepcopy.go deleted file mode 100644 index e77815169930..000000000000 --- a/pkg/build/controller/build/pluginconfig/testing/zz_generated.deepcopy.go +++ /dev/null @@ -1,119 +0,0 @@ -// +build !ignore_autogenerated - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package testing - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OtherTestConfig2) DeepCopyInto(out *OtherTestConfig2) { - *out = *in - out.TypeMeta = in.TypeMeta - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OtherTestConfig2. -func (in *OtherTestConfig2) DeepCopy() *OtherTestConfig2 { - if in == nil { - return nil - } - out := new(OtherTestConfig2) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *OtherTestConfig2) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OtherTestConfig2V2) DeepCopyInto(out *OtherTestConfig2V2) { - *out = *in - out.TypeMeta = in.TypeMeta - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OtherTestConfig2V2. -func (in *OtherTestConfig2V2) DeepCopy() *OtherTestConfig2V2 { - if in == nil { - return nil - } - out := new(OtherTestConfig2V2) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *OtherTestConfig2V2) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *TestConfig) DeepCopyInto(out *TestConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.Item2 != nil { - in, out := &in.Item2, &out.Item2 - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TestConfig. -func (in *TestConfig) DeepCopy() *TestConfig { - if in == nil { - return nil - } - out := new(TestConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *TestConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *TestConfigV1) DeepCopyInto(out *TestConfigV1) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.Item2 != nil { - in, out := &in.Item2, &out.Item2 - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TestConfigV1. -func (in *TestConfigV1) DeepCopy() *TestConfigV1 { - if in == nil { - return nil - } - out := new(TestConfigV1) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *TestConfigV1) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} diff --git a/pkg/cmd/server/admin/create_nodeconfig.go b/pkg/cmd/server/admin/create_nodeconfig.go index 1b43bd717515..1f25bc195af6 100644 --- a/pkg/cmd/server/admin/create_nodeconfig.go +++ b/pkg/cmd/server/admin/create_nodeconfig.go @@ -23,6 +23,7 @@ import ( "github.com/openshift/origin/pkg/cmd/flagtypes" configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" latestconfigapi "github.com/openshift/origin/pkg/cmd/server/apis/config/latest" + configv1 "github.com/openshift/origin/pkg/cmd/server/apis/config/v1" cmdutil "github.com/openshift/origin/pkg/cmd/util" "github.com/openshift/origin/pkg/cmd/util/variable" ) @@ -455,7 +456,7 @@ func (o CreateNodeConfigOptions) MakeNodeConfig(serverCertFile, serverKeyFile, n } // Roundtrip the config to v1 and back to ensure proper defaults are set. - ext, err := configapi.Scheme.ConvertToVersion(config, latestconfigapi.Version) + ext, err := configapi.Scheme.ConvertToVersion(config, configv1.SchemeGroupVersion) if err != nil { return err } @@ -484,7 +485,7 @@ func (o CreateNodeConfigOptions) MakeNodeJSON(nodeJSONFile string) error { node := &kapi.Node{} node.Name = o.NodeName - json, err := runtime.Encode(legacyscheme.Codecs.LegacyCodec(latestconfigapi.Version), node) + json, err := runtime.Encode(legacyscheme.Codecs.LegacyCodec(configv1.SchemeGroupVersion), node) if err != nil { return err } diff --git a/pkg/cmd/server/apis/config/install/install.go b/pkg/cmd/server/apis/config/install/install.go index 74376a97ba3f..81c3fed5d881 100644 --- a/pkg/cmd/server/apis/config/install/install.go +++ b/pkg/cmd/server/apis/config/install/install.go @@ -1,40 +1,33 @@ package install import ( - "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apiserver/pkg/apis/apiserver" apiserverv1alpha1 "k8s.io/apiserver/pkg/apis/apiserver/v1alpha1" "k8s.io/apiserver/pkg/apis/audit" auditv1alpha1 "k8s.io/apiserver/pkg/apis/audit/v1alpha1" auditv1beta1 "k8s.io/apiserver/pkg/apis/audit/v1beta1" + defaultsinstall "github.com/openshift/origin/pkg/build/controller/build/apis/defaults/install" + overridesinstall "github.com/openshift/origin/pkg/build/controller/build/apis/overrides/install" configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" configapiv1 "github.com/openshift/origin/pkg/cmd/server/apis/config/v1" - - _ "github.com/openshift/origin/pkg/build/controller/build/apis/defaults/install" - _ "github.com/openshift/origin/pkg/build/controller/build/apis/overrides/install" - _ "github.com/openshift/origin/pkg/image/admission/apis/imagepolicy/install" - _ "github.com/openshift/origin/pkg/ingress/admission/apis/ingressadmission/install" - _ "github.com/openshift/origin/pkg/project/admission/apis/requestlimit/install" - _ "github.com/openshift/origin/pkg/quota/admission/apis/clusterresourceoverride/install" - _ "github.com/openshift/origin/pkg/quota/admission/apis/runonceduration/install" - _ "github.com/openshift/origin/pkg/scheduler/admission/apis/podnodeconstraints/install" + imagepolicyinstall "github.com/openshift/origin/pkg/image/admission/apis/imagepolicy/install" + ingressadmissioninstall "github.com/openshift/origin/pkg/ingress/admission/apis/ingressadmission/install" + requestlimitinstall "github.com/openshift/origin/pkg/project/admission/apis/requestlimit/install" + clusterresourceoverrideinstall "github.com/openshift/origin/pkg/quota/admission/apis/clusterresourceoverride/install" + runoncedurationinstall "github.com/openshift/origin/pkg/quota/admission/apis/runonceduration/install" + podnodeconstraintsinstall "github.com/openshift/origin/pkg/scheduler/admission/apis/podnodeconstraints/install" ) -var accessor = meta.NewAccessor() - -// availableVersions lists all known external versions for this group from most preferred to least preferred -var availableVersions = []schema.GroupVersion{configapiv1.SchemeGroupVersion} - func init() { - AddToScheme(configapi.Scheme) + InstallLegacyInternal(configapi.Scheme) } -func AddToScheme(scheme *runtime.Scheme) { - configapi.AddToScheme(scheme) - configapiv1.AddToScheme(scheme) +func InstallLegacyInternal(scheme *runtime.Scheme) { + configapi.InstallLegacy(scheme) + configapiv1.InstallLegacy(scheme) + // we additionally need to enable audit versions, since we embed the audit // policy file inside master-config.yaml audit.AddToScheme(scheme) @@ -42,17 +35,17 @@ func AddToScheme(scheme *runtime.Scheme) { auditv1beta1.AddToScheme(scheme) apiserver.AddToScheme(scheme) apiserverv1alpha1.AddToScheme(scheme) -} - -func NewRESTMapper() meta.RESTMapper { - mapper := meta.NewDefaultRESTMapper(availableVersions) - // enumerate all supported versions, get the kinds, and register with the mapper how to address - // our resources. - for _, gv := range availableVersions { - for kind := range configapi.Scheme.KnownTypes(gv) { - mapper.Add(gv.WithKind(kind), meta.RESTScopeRoot) - } - } - return mapper + // add the other admission config types we have + requestlimitinstall.InstallInternal(scheme) + + // add the other admission config types we have to the core group if they are legacy types + defaultsinstall.InstallLegacyInternal(scheme) + overridesinstall.InstallLegacyInternal(scheme) + imagepolicyinstall.InstallLegacyInternal(scheme) + ingressadmissioninstall.InstallLegacyInternal(scheme) + requestlimitinstall.InstallLegacyInternal(scheme) + clusterresourceoverrideinstall.InstallLegacyInternal(scheme) + runoncedurationinstall.InstallLegacyInternal(scheme) + podnodeconstraintsinstall.InstallLegacyInternal(scheme) } diff --git a/pkg/cmd/server/apis/config/latest/helpers.go b/pkg/cmd/server/apis/config/latest/helpers.go index a072df0acf5d..4da84f25263d 100644 --- a/pkg/cmd/server/apis/config/latest/helpers.go +++ b/pkg/cmd/server/apis/config/latest/helpers.go @@ -16,6 +16,7 @@ import ( kyaml "k8s.io/apimachinery/pkg/util/yaml" configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" + configv1 "github.com/openshift/origin/pkg/cmd/server/apis/config/v1" ) func ReadSessionSecrets(filename string) (*configapi.SessionSecrets, error) { @@ -145,7 +146,7 @@ func getExternalZeroValue(obj runtime.Object) (runtime.Object, error) { if len(gvks) == 0 { // should never happen return nil, fmt.Errorf("no gvks found for %#v", obj) } - gvk := Version.WithKind(gvks[0].Kind) + gvk := configv1.SchemeGroupVersion.WithKind(gvks[0].Kind) return configapi.Scheme.New(gvk) } diff --git a/pkg/cmd/server/apis/config/latest/latest.go b/pkg/cmd/server/apis/config/latest/latest.go index f0edda424c2c..be359c83b885 100644 --- a/pkg/cmd/server/apis/config/latest/latest.go +++ b/pkg/cmd/server/apis/config/latest/latest.go @@ -9,19 +9,6 @@ import ( // HACK TO ELIMINATE CYCLE UNTIL WE KILL THIS PACKAGE -// Version is the string that represents the current external default version. -var Version = schema.GroupVersion{Group: "", Version: "v1"} - -// OldestVersion is the string that represents the oldest server version supported, -// for client code that wants to hardcode the lowest common denominator. -var OldestVersion = schema.GroupVersion{Group: "", Version: "v1"} - -// Versions is the list of versions that are recognized in code. The order provided -// may be assumed to be least feature rich to most feature rich, and clients may -// choose to prefer the latter items in the list over the former items when presented -// with a set of versions to choose. -var Versions = []schema.GroupVersion{{Group: "", Version: "v1"}} - var Codec = serializer.NewCodecFactory(configapi.Scheme).LegacyCodec( schema.GroupVersion{Group: "", Version: "v1"}, schema.GroupVersion{Group: "apiserver.k8s.io", Version: "v1alpha1"}, diff --git a/pkg/cmd/server/apis/config/register.go b/pkg/cmd/server/apis/config/register.go index c385a6f9cfcc..b5ab1a9b5603 100644 --- a/pkg/cmd/server/apis/config/register.go +++ b/pkg/cmd/server/apis/config/register.go @@ -28,7 +28,7 @@ func Resource(resource string) schema.GroupResource { var ( SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - AddToScheme = SchemeBuilder.AddToScheme + InstallLegacy = SchemeBuilder.AddToScheme ) // Adds the list of known types to api.Scheme. diff --git a/pkg/cmd/server/apis/config/v1/register.go b/pkg/cmd/server/apis/config/v1/register.go index a52006044e5a..3db80e2ae645 100644 --- a/pkg/cmd/server/apis/config/v1/register.go +++ b/pkg/cmd/server/apis/config/v1/register.go @@ -12,7 +12,7 @@ var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} var ( SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addConversionFuncs, addDefaultingFuncs) - AddToScheme = SchemeBuilder.AddToScheme + InstallLegacy = SchemeBuilder.AddToScheme ) // Adds the list of known types to api.Scheme. diff --git a/pkg/image/admission/apis/imagepolicy/install/install.go b/pkg/image/admission/apis/imagepolicy/install/install.go index 5b221dfe9a56..161626348513 100644 --- a/pkg/image/admission/apis/imagepolicy/install/install.go +++ b/pkg/image/admission/apis/imagepolicy/install/install.go @@ -1,40 +1,14 @@ package install import ( - "github.com/golang/glog" - "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/runtime" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" - configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" "github.com/openshift/origin/pkg/image/admission/apis/imagepolicy" "github.com/openshift/origin/pkg/image/admission/apis/imagepolicy/v1" ) -// availableVersions lists all known external versions for this group from most preferred to least preferred -var availableVersions = []schema.GroupVersion{v1.SchemeGroupVersion} - -func init() { - if err := enableVersions(availableVersions); err != nil { - panic(err) - } -} - -// TODO: enableVersions should be centralized rather than spread in each API group. -func enableVersions(externalVersions []schema.GroupVersion) error { - addVersionsToScheme(externalVersions...) - return nil -} - -func addVersionsToScheme(externalVersions ...schema.GroupVersion) { - // add the internal version to Scheme - imagepolicy.AddToScheme(configapi.Scheme) - // add the enabled external versions to Scheme - for _, v := range externalVersions { - switch v { - case v1.SchemeGroupVersion: - v1.AddToScheme(configapi.Scheme) - default: - glog.Errorf("Version %s is not known, so it will not be added to the Scheme.", v) - continue - } - } +func InstallLegacyInternal(scheme *runtime.Scheme) { + utilruntime.Must(imagepolicy.InstallLegacy(scheme)) + utilruntime.Must(v1.InstallLegacy(scheme)) } diff --git a/pkg/image/admission/apis/imagepolicy/register.go b/pkg/image/admission/apis/imagepolicy/register.go index 71fef770d3c9..5168e9895be4 100644 --- a/pkg/image/admission/apis/imagepolicy/register.go +++ b/pkg/image/admission/apis/imagepolicy/register.go @@ -9,7 +9,7 @@ var SchemeGroupVersion = schema.GroupVersion{Group: "", Version: runtime.APIVers var ( SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - AddToScheme = SchemeBuilder.AddToScheme + InstallLegacy = SchemeBuilder.AddToScheme ) func addKnownTypes(scheme *runtime.Scheme) error { diff --git a/pkg/image/admission/apis/imagepolicy/v1/register.go b/pkg/image/admission/apis/imagepolicy/v1/register.go index df800e78042e..36a791906174 100644 --- a/pkg/image/admission/apis/imagepolicy/v1/register.go +++ b/pkg/image/admission/apis/imagepolicy/v1/register.go @@ -12,8 +12,14 @@ import ( var SchemeGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} var ( - SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addConversionFuncs, addDefaultingFuncs) - AddToScheme = SchemeBuilder.AddToScheme + SchemeBuilder = runtime.NewSchemeBuilder( + addKnownTypes, + imagepolicy.InstallLegacy, + + addConversionFuncs, + addDefaultingFuncs, + ) + InstallLegacy = SchemeBuilder.AddToScheme ) // Adds the list of known types to api.Scheme. diff --git a/pkg/image/admission/imagepolicy/imagepolicy_test.go b/pkg/image/admission/imagepolicy/imagepolicy_test.go index fda1d36e4916..5e5054691263 100644 --- a/pkg/image/admission/imagepolicy/imagepolicy_test.go +++ b/pkg/image/admission/imagepolicy/imagepolicy_test.go @@ -22,9 +22,10 @@ import ( "github.com/openshift/api/image" buildapi "github.com/openshift/origin/pkg/build/apis/build" + configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" + configinstall "github.com/openshift/origin/pkg/cmd/server/apis/config/install" configlatest "github.com/openshift/origin/pkg/cmd/server/apis/config/latest" "github.com/openshift/origin/pkg/image/admission/apis/imagepolicy" - _ "github.com/openshift/origin/pkg/image/admission/apis/imagepolicy/install" "github.com/openshift/origin/pkg/image/admission/apis/imagepolicy/validation" "github.com/openshift/origin/pkg/image/admission/imagepolicy/rules" imageapi "github.com/openshift/origin/pkg/image/apis/image" @@ -37,6 +38,10 @@ const ( badSHA = "sha256:503c75e8121369581e5e5abe57b5a3f12db859052b217a8ea16eb86f4b5561a1" ) +func init() { + configinstall.InstallLegacyInternal(configapi.Scheme) +} + type resolveFunc func(ref *kapi.ObjectReference, defaultNamespace string, forceLocalResolve bool) (*rules.ImagePolicyAttributes, error) func (fn resolveFunc) ResolveObjectReference(ref *kapi.ObjectReference, defaultNamespace string, forceLocalResolve bool) (*rules.ImagePolicyAttributes, error) { diff --git a/pkg/ingress/admission/apis/ingressadmission/install/install.go b/pkg/ingress/admission/apis/ingressadmission/install/install.go index 63ec436ab08a..0c14b9604b04 100644 --- a/pkg/ingress/admission/apis/ingressadmission/install/install.go +++ b/pkg/ingress/admission/apis/ingressadmission/install/install.go @@ -1,45 +1,14 @@ package install import ( - "github.com/golang/glog" + "k8s.io/apimachinery/pkg/runtime" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - - configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" "github.com/openshift/origin/pkg/ingress/admission/apis/ingressadmission" "github.com/openshift/origin/pkg/ingress/admission/apis/ingressadmission/v1" ) -// availableVersions lists all known external versions for this group from most perferred to least preferred -var availableVersions = []schema.GroupVersion{v1.SchemeGroupVersion} - -func init() { - if err := enableVersions(availableVersions); err != nil { - panic(err) - } -} - -// TODO: enableVersions should be centralized rather than spread in each API -// group. -// We can combine registered.RegisterVersions, registered.EnableVersions and -// registered.RegisterGroup once we hae moved enableVersions there. -func enableVersions(externalVersions []schema.GroupVersion) error { - addVersionsToScheme(externalVersions...) - return nil -} - -func addVersionsToScheme(externalVersions ...schema.GroupVersion) { - // add the internal version to Scheme - ingressadmission.AddToScheme(configapi.Scheme) - // add the enabled external versions to Scheme - for _, v := range externalVersions { - switch v { - case v1.SchemeGroupVersion: - v1.AddToScheme(configapi.Scheme) - - default: - glog.Errorf("Version %s is not known, so it will not be added to the Scheme.", v) - continue - } - } +func InstallLegacyInternal(scheme *runtime.Scheme) { + utilruntime.Must(ingressadmission.InstallLegacy(scheme)) + utilruntime.Must(v1.InstallLegacy(scheme)) } diff --git a/pkg/ingress/admission/apis/ingressadmission/register.go b/pkg/ingress/admission/apis/ingressadmission/register.go index 728cd4264b49..2d8106182d00 100644 --- a/pkg/ingress/admission/apis/ingressadmission/register.go +++ b/pkg/ingress/admission/apis/ingressadmission/register.go @@ -20,7 +20,7 @@ func Resource(resource string) schema.GroupResource { var ( SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - AddToScheme = SchemeBuilder.AddToScheme + InstallLegacy = SchemeBuilder.AddToScheme ) func addKnownTypes(scheme *runtime.Scheme) error { diff --git a/pkg/ingress/admission/apis/ingressadmission/v1/defaults_test.go b/pkg/ingress/admission/apis/ingressadmission/v1/defaults_test.go index cf290b283276..cf1b247abc1a 100644 --- a/pkg/ingress/admission/apis/ingressadmission/v1/defaults_test.go +++ b/pkg/ingress/admission/apis/ingressadmission/v1/defaults_test.go @@ -1,32 +1,28 @@ -package v1_test +package v1 import ( "reflect" "testing" + "k8s.io/apimachinery/pkg/api/testing" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/diff" - - configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" - v1 "github.com/openshift/origin/pkg/cmd/server/apis/config/v1" - _ "github.com/openshift/origin/pkg/ingress/admission/apis/ingressadmission/install" - - ingressv1 "github.com/openshift/origin/pkg/ingress/admission/apis/ingressadmission/v1" ) func roundTrip(t *testing.T, obj runtime.Object) runtime.Object { - data, err := runtime.Encode(configapi.Codecs.LegacyCodec(v1.SchemeGroupVersion), obj) + scheme, codecs := apitesting.SchemeForOrDie(InstallLegacy) + data, err := runtime.Encode(codecs.LegacyCodec(SchemeGroupVersion), obj) if err != nil { t.Errorf("%v\n %#v", err, obj) return nil } - obj2, err := runtime.Decode(configapi.Codecs.UniversalDecoder(), data) + obj2, err := runtime.Decode(codecs.UniversalDecoder(), data) if err != nil { t.Errorf("%v\nData: %s\nSource: %#v", err, string(data), obj) return nil } obj3 := reflect.New(reflect.TypeOf(obj).Elem()).Interface().(runtime.Object) - err = configapi.Scheme.Convert(obj2, obj3, nil) + err = scheme.Convert(obj2, obj3, nil) if err != nil { t.Errorf("%v\nSourceL %#v", err, obj2) return nil @@ -36,12 +32,12 @@ func roundTrip(t *testing.T, obj runtime.Object) runtime.Object { func TestDefaults(t *testing.T) { tests := []struct { - original *ingressv1.IngressAdmissionConfig - expected *ingressv1.IngressAdmissionConfig + original *IngressAdmissionConfig + expected *IngressAdmissionConfig }{ { - original: &ingressv1.IngressAdmissionConfig{}, - expected: &ingressv1.IngressAdmissionConfig{ + original: &IngressAdmissionConfig{}, + expected: &IngressAdmissionConfig{ AllowHostnameChanges: false, }, }, @@ -51,7 +47,7 @@ func TestDefaults(t *testing.T) { original := test.original expected := test.expected obj2 := roundTrip(t, runtime.Object(original)) - got, ok := obj2.(*ingressv1.IngressAdmissionConfig) + got, ok := obj2.(*IngressAdmissionConfig) if !ok { t.Errorf("unexpected object: %v", got) t.FailNow() diff --git a/pkg/ingress/admission/apis/ingressadmission/v1/register.go b/pkg/ingress/admission/apis/ingressadmission/v1/register.go index e8dc39f3206f..274677da4e91 100644 --- a/pkg/ingress/admission/apis/ingressadmission/v1/register.go +++ b/pkg/ingress/admission/apis/ingressadmission/v1/register.go @@ -1,6 +1,7 @@ package v1 import ( + "github.com/openshift/origin/pkg/ingress/admission/apis/ingressadmission" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" ) @@ -9,8 +10,11 @@ import ( var SchemeGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} var ( - SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - AddToScheme = SchemeBuilder.AddToScheme + SchemeBuilder = runtime.NewSchemeBuilder( + addKnownTypes, + ingressadmission.InstallLegacy, + ) + InstallLegacy = SchemeBuilder.AddToScheme ) func addKnownTypes(scheme *runtime.Scheme) error { diff --git a/pkg/project/admission/apis/requestlimit/install/install.go b/pkg/project/admission/apis/requestlimit/install/install.go index 70a0b467c1a7..43e4ca0bb2fe 100644 --- a/pkg/project/admission/apis/requestlimit/install/install.go +++ b/pkg/project/admission/apis/requestlimit/install/install.go @@ -1,48 +1,19 @@ package install import ( - "github.com/golang/glog" + "k8s.io/apimachinery/pkg/runtime" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - - configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" "github.com/openshift/origin/pkg/project/admission/apis/requestlimit" "github.com/openshift/origin/pkg/project/admission/apis/requestlimit/v1" ) -// availableVersions lists all known external versions for this group from most preferred to least preferred -var availableVersions = []schema.GroupVersion{v1.SchemeGroupVersion, v1.LegacySchemeGroupVersion} - -func init() { - if err := enableVersions(availableVersions); err != nil { - panic(err) - } +func InstallInternal(scheme *runtime.Scheme) { + utilruntime.Must(requestlimit.InstallLegacy(scheme)) + utilruntime.Must(v1.Install(scheme)) } -// TODO: enableVersions should be centralized rather than spread in each API -// group. -// We can combine registered.RegisterVersions, registered.EnableVersions and -// registered.RegisterGroup once we have moved enableVersions there. -func enableVersions(externalVersions []schema.GroupVersion) error { - addVersionsToScheme(externalVersions...) - return nil -} - -func addVersionsToScheme(externalVersions ...schema.GroupVersion) { - // add the internal version to Scheme - requestlimit.AddToScheme(configapi.Scheme) - requestlimit.AddToSchemeInCoreGroup(configapi.Scheme) - // add the enabled external versions to Scheme - for _, v := range externalVersions { - switch v { - case v1.SchemeGroupVersion: - v1.AddToScheme(configapi.Scheme) - case v1.LegacySchemeGroupVersion: - v1.AddToSchemeInCoreGroup(configapi.Scheme) - - default: - glog.Errorf("Version %s is not known, so it will not be added to the Scheme.", v) - continue - } - } +func InstallLegacyInternal(scheme *runtime.Scheme) { + utilruntime.Must(requestlimit.InstallLegacy(scheme)) + utilruntime.Must(v1.InstallLegacy(scheme)) } diff --git a/pkg/project/admission/apis/requestlimit/register.go b/pkg/project/admission/apis/requestlimit/register.go index 42f2092db826..6358e246edaf 100644 --- a/pkg/project/admission/apis/requestlimit/register.go +++ b/pkg/project/admission/apis/requestlimit/register.go @@ -14,11 +14,11 @@ var ( SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} LegacySchemeGroupVersion = schema.GroupVersion{Group: LegacyGroupName, Version: runtime.APIVersionInternal} - LegacySchemeBuilder = runtime.NewSchemeBuilder(addLegacyKnownTypes) - AddToSchemeInCoreGroup = LegacySchemeBuilder.AddToScheme + LegacySchemeBuilder = runtime.NewSchemeBuilder(addLegacyKnownTypes) + InstallLegacy = LegacySchemeBuilder.AddToScheme SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - AddToScheme = SchemeBuilder.AddToScheme + Install = SchemeBuilder.AddToScheme ) // Adds the list of known types to api.Scheme. diff --git a/pkg/project/admission/apis/requestlimit/v1/register.go b/pkg/project/admission/apis/requestlimit/v1/register.go index 0a806d0dc12c..45b2e0ee3e27 100644 --- a/pkg/project/admission/apis/requestlimit/v1/register.go +++ b/pkg/project/admission/apis/requestlimit/v1/register.go @@ -1,6 +1,7 @@ package v1 import ( + "github.com/openshift/origin/pkg/project/admission/apis/requestlimit" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -15,11 +16,17 @@ var ( SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} LegacySchemeGroupVersion = schema.GroupVersion{Group: LegacyGroupName, Version: "v1"} - LegacySchemeBuilder = runtime.NewSchemeBuilder(addLegacyKnownTypes) - AddToSchemeInCoreGroup = LegacySchemeBuilder.AddToScheme + LegacySchemeBuilder = runtime.NewSchemeBuilder( + addLegacyKnownTypes, + requestlimit.InstallLegacy, + ) + InstallLegacy = LegacySchemeBuilder.AddToScheme - SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - AddToScheme = SchemeBuilder.AddToScheme + SchemeBuilder = runtime.NewSchemeBuilder( + addKnownTypes, + requestlimit.Install, + ) + Install = SchemeBuilder.AddToScheme ) // Adds the list of known types to api.Scheme. diff --git a/pkg/quota/admission/apis/clusterresourceoverride/install/install.go b/pkg/quota/admission/apis/clusterresourceoverride/install/install.go index 22c1d59764db..b64a1382a782 100644 --- a/pkg/quota/admission/apis/clusterresourceoverride/install/install.go +++ b/pkg/quota/admission/apis/clusterresourceoverride/install/install.go @@ -1,40 +1,14 @@ package install import ( - "github.com/golang/glog" - "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/runtime" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" - configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" "github.com/openshift/origin/pkg/quota/admission/apis/clusterresourceoverride" "github.com/openshift/origin/pkg/quota/admission/apis/clusterresourceoverride/v1" ) -// availableVersions lists all known external versions for this group from most preferred to least preferred -var availableVersions = []schema.GroupVersion{v1.SchemeGroupVersion} - -func init() { - if err := enableVersions(availableVersions); err != nil { - panic(err) - } -} - -// TODO: enableVersions should be centralized rather than spread in each API group. -func enableVersions(externalVersions []schema.GroupVersion) error { - addVersionsToScheme(externalVersions...) - return nil -} - -func addVersionsToScheme(externalVersions ...schema.GroupVersion) { - // add the internal version to Scheme - clusterresourceoverride.AddToScheme(configapi.Scheme) - // add the enabled external versions to Scheme - for _, v := range externalVersions { - switch v { - case v1.SchemeGroupVersion: - v1.AddToScheme(configapi.Scheme) - default: - glog.Errorf("Version %s is not known, so it will not be added to the Scheme.", v) - continue - } - } +func InstallLegacyInternal(scheme *runtime.Scheme) { + utilruntime.Must(clusterresourceoverride.InstallLegacy(scheme)) + utilruntime.Must(v1.InstallLegacy(scheme)) } diff --git a/pkg/quota/admission/apis/clusterresourceoverride/register.go b/pkg/quota/admission/apis/clusterresourceoverride/register.go index 9eb5c3329968..05e1b2b6feb6 100644 --- a/pkg/quota/admission/apis/clusterresourceoverride/register.go +++ b/pkg/quota/admission/apis/clusterresourceoverride/register.go @@ -9,7 +9,7 @@ var SchemeGroupVersion = schema.GroupVersion{Group: "", Version: runtime.APIVers var ( SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - AddToScheme = SchemeBuilder.AddToScheme + InstallLegacy = SchemeBuilder.AddToScheme ) // Adds the list of known types to api.Scheme. diff --git a/pkg/quota/admission/apis/clusterresourceoverride/v1/register.go b/pkg/quota/admission/apis/clusterresourceoverride/v1/register.go index 58ebc62eabef..14e3221ba2dc 100644 --- a/pkg/quota/admission/apis/clusterresourceoverride/v1/register.go +++ b/pkg/quota/admission/apis/clusterresourceoverride/v1/register.go @@ -1,6 +1,7 @@ package v1 import ( + "github.com/openshift/origin/pkg/quota/admission/apis/clusterresourceoverride" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" ) @@ -9,8 +10,11 @@ import ( var SchemeGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} var ( - SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - AddToScheme = SchemeBuilder.AddToScheme + SchemeBuilder = runtime.NewSchemeBuilder( + addKnownTypes, + clusterresourceoverride.InstallLegacy, + ) + InstallLegacy = SchemeBuilder.AddToScheme ) // Adds the list of known types to api.Scheme. diff --git a/pkg/quota/admission/apis/runonceduration/install/install.go b/pkg/quota/admission/apis/runonceduration/install/install.go index 84093cd487e2..18daa64a78b0 100644 --- a/pkg/quota/admission/apis/runonceduration/install/install.go +++ b/pkg/quota/admission/apis/runonceduration/install/install.go @@ -1,45 +1,14 @@ package install import ( - "github.com/golang/glog" + "k8s.io/apimachinery/pkg/runtime" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - - configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" "github.com/openshift/origin/pkg/quota/admission/apis/runonceduration" "github.com/openshift/origin/pkg/quota/admission/apis/runonceduration/v1" ) -// availableVersions lists all known external versions for this group from most preferred to least preferred -var availableVersions = []schema.GroupVersion{v1.SchemeGroupVersion} - -func init() { - if err := enableVersions(availableVersions); err != nil { - panic(err) - } -} - -// TODO: enableVersions should be centralized rather than spread in each API -// group. -// We can combine registered.RegisterVersions, registered.EnableVersions and -// registered.RegisterGroup once we have moved enableVersions there. -func enableVersions(externalVersions []schema.GroupVersion) error { - addVersionsToScheme(externalVersions...) - return nil -} - -func addVersionsToScheme(externalVersions ...schema.GroupVersion) { - // add the internal version to Scheme - runonceduration.AddToScheme(configapi.Scheme) - // add the enabled external versions to Scheme - for _, v := range externalVersions { - switch v { - case v1.SchemeGroupVersion: - v1.AddToScheme(configapi.Scheme) - - default: - glog.Errorf("Version %s is not known, so it will not be added to the Scheme.", v) - continue - } - } +func InstallLegacyInternal(scheme *runtime.Scheme) { + utilruntime.Must(runonceduration.InstallLegacy(scheme)) + utilruntime.Must(v1.InstallLegacy(scheme)) } diff --git a/pkg/quota/admission/apis/runonceduration/register.go b/pkg/quota/admission/apis/runonceduration/register.go index 54bfd4c083da..c0aacc241357 100644 --- a/pkg/quota/admission/apis/runonceduration/register.go +++ b/pkg/quota/admission/apis/runonceduration/register.go @@ -20,7 +20,7 @@ func Resource(resource string) schema.GroupResource { var ( SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - AddToScheme = SchemeBuilder.AddToScheme + InstallLegacy = SchemeBuilder.AddToScheme ) // Adds the list of known types to api.Scheme. diff --git a/pkg/quota/admission/apis/runonceduration/v1/register.go b/pkg/quota/admission/apis/runonceduration/v1/register.go index 40ca1bece06a..0625e7ef2f33 100644 --- a/pkg/quota/admission/apis/runonceduration/v1/register.go +++ b/pkg/quota/admission/apis/runonceduration/v1/register.go @@ -1,6 +1,7 @@ package v1 import ( + "github.com/openshift/origin/pkg/quota/admission/apis/runonceduration" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" ) @@ -9,8 +10,13 @@ import ( var SchemeGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} var ( - SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addConversionFuncs) - AddToScheme = SchemeBuilder.AddToScheme + SchemeBuilder = runtime.NewSchemeBuilder( + addKnownTypes, + runonceduration.InstallLegacy, + + addConversionFuncs, + ) + InstallLegacy = SchemeBuilder.AddToScheme ) // Adds the list of known types to api.Scheme. diff --git a/pkg/scheduler/admission/apis/podnodeconstraints/install/install.go b/pkg/scheduler/admission/apis/podnodeconstraints/install/install.go index acb4b1725a1b..56559c9fe778 100644 --- a/pkg/scheduler/admission/apis/podnodeconstraints/install/install.go +++ b/pkg/scheduler/admission/apis/podnodeconstraints/install/install.go @@ -1,45 +1,14 @@ package install import ( - "github.com/golang/glog" + "k8s.io/apimachinery/pkg/runtime" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - - configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" "github.com/openshift/origin/pkg/scheduler/admission/apis/podnodeconstraints" "github.com/openshift/origin/pkg/scheduler/admission/apis/podnodeconstraints/v1" ) -// availableVersions lists all known external versions for this group from most preferred to least preferred -var availableVersions = []schema.GroupVersion{v1.SchemeGroupVersion} - -func init() { - if err := enableVersions(availableVersions); err != nil { - panic(err) - } -} - -// TODO: enableVersions should be centralized rather than spread in each API -// group. -// We can combine registered.RegisterVersions, registered.EnableVersions and -// registered.RegisterGroup once we have moved enableVersions there. -func enableVersions(externalVersions []schema.GroupVersion) error { - addVersionsToScheme(externalVersions...) - return nil -} - -func addVersionsToScheme(externalVersions ...schema.GroupVersion) { - // add the internal version to Scheme - podnodeconstraints.AddToScheme(configapi.Scheme) - // add the enabled external versions to Scheme - for _, v := range externalVersions { - switch v { - case v1.SchemeGroupVersion: - v1.AddToScheme(configapi.Scheme) - - default: - glog.Errorf("Version %s is not known, so it will not be added to the Scheme.", v) - continue - } - } +func InstallLegacyInternal(scheme *runtime.Scheme) { + utilruntime.Must(podnodeconstraints.InstallLegacy(scheme)) + utilruntime.Must(v1.InstallLegacy(scheme)) } diff --git a/pkg/scheduler/admission/apis/podnodeconstraints/register.go b/pkg/scheduler/admission/apis/podnodeconstraints/register.go index bf0bd04b4c65..9d623def616b 100644 --- a/pkg/scheduler/admission/apis/podnodeconstraints/register.go +++ b/pkg/scheduler/admission/apis/podnodeconstraints/register.go @@ -20,7 +20,7 @@ func Resource(resource string) schema.GroupResource { var ( SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - AddToScheme = SchemeBuilder.AddToScheme + InstallLegacy = SchemeBuilder.AddToScheme ) func addKnownTypes(scheme *runtime.Scheme) error { diff --git a/pkg/scheduler/admission/apis/podnodeconstraints/v1/defaults_test.go b/pkg/scheduler/admission/apis/podnodeconstraints/v1/defaults_test.go index 08694f11740a..4e4d647106d7 100644 --- a/pkg/scheduler/admission/apis/podnodeconstraints/v1/defaults_test.go +++ b/pkg/scheduler/admission/apis/podnodeconstraints/v1/defaults_test.go @@ -1,31 +1,28 @@ -package v1_test +package v1 import ( "reflect" "testing" + "k8s.io/apimachinery/pkg/api/testing" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/diff" - - configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" - v1 "github.com/openshift/origin/pkg/cmd/server/apis/config/v1" - _ "github.com/openshift/origin/pkg/scheduler/admission/apis/podnodeconstraints/install" - podnodeconstraintsv1 "github.com/openshift/origin/pkg/scheduler/admission/apis/podnodeconstraints/v1" ) func roundTrip(t *testing.T, obj runtime.Object) runtime.Object { - data, err := runtime.Encode(configapi.Codecs.LegacyCodec(v1.SchemeGroupVersion), obj) + scheme, codecs := apitesting.SchemeForOrDie(InstallLegacy) + data, err := runtime.Encode(codecs.LegacyCodec(SchemeGroupVersion), obj) if err != nil { t.Errorf("%v\n %#v", err, obj) return nil } - obj2, err := runtime.Decode(configapi.Codecs.UniversalDecoder(), data) + obj2, err := runtime.Decode(codecs.UniversalDecoder(), data) if err != nil { t.Errorf("%v\nData: %s\nSource: %#v", err, string(data), obj) return nil } obj3 := reflect.New(reflect.TypeOf(obj).Elem()).Interface().(runtime.Object) - err = configapi.Scheme.Convert(obj2, obj3, nil) + err = scheme.Convert(obj2, obj3, nil) if err != nil { t.Errorf("%v\nSource: %#v", err, obj2) return nil @@ -35,12 +32,12 @@ func roundTrip(t *testing.T, obj runtime.Object) runtime.Object { func TestDefaults(t *testing.T) { tests := []struct { - original *podnodeconstraintsv1.PodNodeConstraintsConfig - expected *podnodeconstraintsv1.PodNodeConstraintsConfig + original *PodNodeConstraintsConfig + expected *PodNodeConstraintsConfig }{ { - original: &podnodeconstraintsv1.PodNodeConstraintsConfig{}, - expected: &podnodeconstraintsv1.PodNodeConstraintsConfig{ + original: &PodNodeConstraintsConfig{}, + expected: &PodNodeConstraintsConfig{ NodeSelectorLabelBlacklist: []string{"kubernetes.io/hostname"}, }, }, @@ -50,7 +47,7 @@ func TestDefaults(t *testing.T) { original := test.original expected := test.expected obj2 := roundTrip(t, runtime.Object(original)) - got, ok := obj2.(*podnodeconstraintsv1.PodNodeConstraintsConfig) + got, ok := obj2.(*PodNodeConstraintsConfig) if !ok { t.Errorf("unexpected object: %v", got) t.FailNow() diff --git a/pkg/scheduler/admission/apis/podnodeconstraints/v1/register.go b/pkg/scheduler/admission/apis/podnodeconstraints/v1/register.go index 2cfddf904495..880aaf5c1aee 100644 --- a/pkg/scheduler/admission/apis/podnodeconstraints/v1/register.go +++ b/pkg/scheduler/admission/apis/podnodeconstraints/v1/register.go @@ -1,6 +1,7 @@ package v1 import ( + "github.com/openshift/origin/pkg/scheduler/admission/apis/podnodeconstraints" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" ) @@ -9,8 +10,13 @@ import ( var SchemeGroupVersion = schema.GroupVersion{Group: "", Version: "v1"} var ( - SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs) - AddToScheme = SchemeBuilder.AddToScheme + SchemeBuilder = runtime.NewSchemeBuilder( + addKnownTypes, + podnodeconstraints.InstallLegacy, + + addDefaultingFuncs, + ) + InstallLegacy = SchemeBuilder.AddToScheme ) func addKnownTypes(scheme *runtime.Scheme) error { diff --git a/test/integration/clusterresourceoverride_admission_test.go b/test/integration/clusterresourceoverride_admission_test.go index fbdab668c9c3..beff89cfc5e4 100644 --- a/test/integration/clusterresourceoverride_admission_test.go +++ b/test/integration/clusterresourceoverride_admission_test.go @@ -9,14 +9,18 @@ import ( kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "github.com/openshift/origin/pkg/cmd/server/apis/config" + configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" + configinstall "github.com/openshift/origin/pkg/cmd/server/apis/config/install" "github.com/openshift/origin/pkg/cmd/server/bootstrappolicy" overrideapi "github.com/openshift/origin/pkg/quota/admission/apis/clusterresourceoverride" testutil "github.com/openshift/origin/test/util" testserver "github.com/openshift/origin/test/util/server" - - _ "github.com/openshift/origin/pkg/quota/admission/apis/clusterresourceoverride/install" ) +func init() { + configinstall.InstallLegacyInternal(configapi.Scheme) +} + func TestClusterResourceOverridePluginWithNoLimits(t *testing.T) { config := &overrideapi.ClusterResourceOverrideConfig{ LimitCPUToMemoryPercent: 100,