Browse code

API registration changes

deads2k authored on 2016/01/29 06:06:13
Showing 70 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,16 @@
0
+package install
1
+
2
+import (
3
+	_ "github.com/openshift/origin/pkg/authorization/api/install"
4
+	_ "github.com/openshift/origin/pkg/build/api/install"
5
+	_ "github.com/openshift/origin/pkg/cmd/server/api/install"
6
+	_ "github.com/openshift/origin/pkg/deploy/api/install"
7
+	_ "github.com/openshift/origin/pkg/image/api/install"
8
+	_ "github.com/openshift/origin/pkg/oauth/api/install"
9
+	_ "github.com/openshift/origin/pkg/project/admission/requestlimit/install"
10
+	_ "github.com/openshift/origin/pkg/project/api/install"
11
+	_ "github.com/openshift/origin/pkg/route/api/install"
12
+	_ "github.com/openshift/origin/pkg/sdn/api/install"
13
+	_ "github.com/openshift/origin/pkg/template/api/install"
14
+	_ "github.com/openshift/origin/pkg/user/api/install"
15
+)
... ...
@@ -1,9 +1,7 @@
1 1
 package api
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6
-	"k8s.io/kubernetes/pkg/runtime"
7 5
 
8 6
 	_ "github.com/openshift/origin/pkg/authorization/api"
9 7
 	_ "github.com/openshift/origin/pkg/build/api"
... ...
@@ -17,12 +15,10 @@ import (
17 17
 	_ "github.com/openshift/origin/pkg/user/api"
18 18
 )
19 19
 
20
-// SchemeGroupVersion is group version used to register these objects
21
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: ""}
20
+const GroupName = ""
22 21
 
23
-// Codec is the identity codec for this package - it can only convert itself
24
-// to itself.
25
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
22
+// SchemeGroupVersion is group version used to register these objects
23
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: ""}
26 24
 
27 25
 // Kind takes an unqualified kind and returns back a Group qualified GroupKind
28 26
 func Kind(kind string) unversioned.GroupKind {
... ...
@@ -33,7 +29,3 @@ func Kind(kind string) unversioned.GroupKind {
33 33
 func Resource(resource string) unversioned.GroupResource {
34 34
 	return SchemeGroupVersion.WithResource(resource).GroupResource()
35 35
 }
36
-
37
-func init() {
38
-	api.Scheme.AddKnownTypes(SchemeGroupVersion)
39
-}
... ...
@@ -1,9 +1,7 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6
-	"k8s.io/kubernetes/pkg/runtime"
7 5
 
8 6
 	_ "github.com/openshift/origin/pkg/authorization/api/v1"
9 7
 	_ "github.com/openshift/origin/pkg/build/api/v1"
... ...
@@ -19,10 +17,3 @@ import (
19 19
 
20 20
 // SchemeGroupVersion is group version used to register these objects
21 21
 var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
22
-
23
-// Codec encodes internal objects to the v1 scheme
24
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
25
-
26
-func init() {
27
-	api.Scheme.AddKnownTypes(SchemeGroupVersion)
28
-}
... ...
@@ -1,9 +1,7 @@
1 1
 package v1beta3
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6
-	"k8s.io/kubernetes/pkg/runtime"
7 5
 
8 6
 	_ "github.com/openshift/origin/pkg/authorization/api/v1beta3"
9 7
 	_ "github.com/openshift/origin/pkg/build/api/v1beta3"
... ...
@@ -19,10 +17,3 @@ import (
19 19
 
20 20
 // SchemeGroupVersion is group version used to register these objects
21 21
 var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1beta3"}
22
-
23
-// Codec encodes internal objects to the v1beta3 scheme
24
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
25
-
26
-func init() {
27
-	api.Scheme.AddKnownTypes(SchemeGroupVersion)
28
-}
... ...
@@ -8,7 +8,7 @@ import (
8 8
 
9 9
 	kapi "k8s.io/kubernetes/pkg/api"
10 10
 	"k8s.io/kubernetes/pkg/api/validation"
11
-	"k8s.io/kubernetes/pkg/controller/serviceaccount"
11
+	"k8s.io/kubernetes/pkg/serviceaccount"
12 12
 	"k8s.io/kubernetes/pkg/util/sets"
13 13
 
14 14
 	// uservalidation "github.com/openshift/origin/pkg/user/api/validation"
15 15
new file mode 100644
... ...
@@ -0,0 +1,136 @@
0
+/*
1
+Copyright 2015 The Kubernetes Authors All rights reserved.
2
+
3
+Licensed under the Apache License, Version 2.0 (the "License");
4
+you may not use this file except in compliance with the License.
5
+You may obtain a copy of the License at
6
+
7
+    http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+Unless required by applicable law or agreed to in writing, software
10
+distributed under the License is distributed on an "AS IS" BASIS,
11
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+See the License for the specific language governing permissions and
13
+limitations under the License.
14
+*/
15
+
16
+// Package install installs the experimental API group, making it available as
17
+// an option to all of the API encoding/decoding machinery.
18
+package install
19
+
20
+import (
21
+	"fmt"
22
+
23
+	"github.com/golang/glog"
24
+
25
+	kapi "k8s.io/kubernetes/pkg/api"
26
+	"k8s.io/kubernetes/pkg/api/meta"
27
+	"k8s.io/kubernetes/pkg/api/unversioned"
28
+	"k8s.io/kubernetes/pkg/apimachinery"
29
+	"k8s.io/kubernetes/pkg/apimachinery/registered"
30
+	"k8s.io/kubernetes/pkg/runtime"
31
+	"k8s.io/kubernetes/pkg/util/sets"
32
+
33
+	"github.com/openshift/origin/pkg/authorization/api"
34
+	"github.com/openshift/origin/pkg/authorization/api/v1"
35
+	"github.com/openshift/origin/pkg/authorization/api/v1beta3"
36
+)
37
+
38
+const importPrefix = "github.com/openshift/origin/pkg/authorization/api"
39
+
40
+var accessor = meta.NewAccessor()
41
+
42
+// availableVersions lists all known external versions for this group from most preferred to least preferred
43
+var availableVersions = []unversioned.GroupVersion{v1.SchemeGroupVersion, v1beta3.SchemeGroupVersion}
44
+
45
+func init() {
46
+	registered.RegisterVersions(availableVersions)
47
+	externalVersions := []unversioned.GroupVersion{}
48
+	for _, v := range availableVersions {
49
+		if registered.IsAllowedVersion(v) {
50
+			externalVersions = append(externalVersions, v)
51
+		}
52
+	}
53
+	if len(externalVersions) == 0 {
54
+		glog.Infof("No version is registered for group %v", api.GroupName)
55
+		return
56
+	}
57
+
58
+	if err := registered.EnableVersions(externalVersions...); err != nil {
59
+		panic(err)
60
+	}
61
+	if err := enableVersions(externalVersions); err != nil {
62
+		panic(err)
63
+	}
64
+}
65
+
66
+// TODO: enableVersions should be centralized rather than spread in each API
67
+// group.
68
+// We can combine registered.RegisterVersions, registered.EnableVersions and
69
+// registered.RegisterGroup once we have moved enableVersions there.
70
+func enableVersions(externalVersions []unversioned.GroupVersion) error {
71
+	addVersionsToScheme(externalVersions...)
72
+	preferredExternalVersion := externalVersions[0]
73
+
74
+	groupMeta := apimachinery.GroupMeta{
75
+		GroupVersion:  preferredExternalVersion,
76
+		GroupVersions: externalVersions,
77
+		RESTMapper:    newRESTMapper(externalVersions),
78
+		SelfLinker:    runtime.SelfLinker(accessor),
79
+		InterfacesFor: interfacesFor,
80
+	}
81
+
82
+	if err := registered.RegisterGroup(groupMeta); err != nil {
83
+		return err
84
+	}
85
+	kapi.RegisterRESTMapper(groupMeta.RESTMapper)
86
+	return nil
87
+}
88
+
89
+func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) {
90
+	// add the internal version to Scheme
91
+	api.AddToScheme(kapi.Scheme)
92
+	// add the enabled external versions to Scheme
93
+	for _, v := range externalVersions {
94
+		if !registered.IsEnabledVersion(v) {
95
+			glog.Errorf("Version %s is not enabled, so it will not be added to the Scheme.", v)
96
+			continue
97
+		}
98
+		switch v {
99
+		case v1.SchemeGroupVersion:
100
+			v1.AddToScheme(kapi.Scheme)
101
+		case v1beta3.SchemeGroupVersion:
102
+			v1beta3.AddToScheme(kapi.Scheme)
103
+
104
+		default:
105
+			glog.Errorf("Version %s is not known, so it will not be added to the Scheme.", v)
106
+			continue
107
+		}
108
+	}
109
+}
110
+
111
+func newRESTMapper(externalVersions []unversioned.GroupVersion) meta.RESTMapper {
112
+	rootScoped := sets.NewString("ClusterRole", "ClusterRoleBinding", "ClusterPolicy", "ClusterPolicyBinding")
113
+	ignoredKinds := sets.NewString()
114
+	return kapi.NewDefaultRESTMapper(externalVersions, interfacesFor, importPrefix, ignoredKinds, rootScoped)
115
+}
116
+
117
+func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, error) {
118
+	switch version {
119
+	case v1.SchemeGroupVersion:
120
+		return &meta.VersionInterfaces{
121
+			ObjectConvertor:  kapi.Scheme,
122
+			MetadataAccessor: accessor,
123
+		}, nil
124
+
125
+	case v1beta3.SchemeGroupVersion:
126
+		return &meta.VersionInterfaces{
127
+			ObjectConvertor:  kapi.Scheme,
128
+			MetadataAccessor: accessor,
129
+		}, nil
130
+
131
+	default:
132
+		g, _ := registered.Group(api.GroupName)
133
+		return nil, fmt.Errorf("unsupported storage version: %s (valid: %v)", version, g.GroupVersions)
134
+	}
135
+}
... ...
@@ -1,12 +1,14 @@
1 1
 package api
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
5
+	"k8s.io/kubernetes/pkg/runtime"
6 6
 )
7 7
 
8
+const GroupName = ""
9
+
8 10
 // SchemeGroupVersion is group version used to register these objects
9
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: ""}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: ""}
10 12
 
11 13
 // Kind takes an unqualified kind and returns back a Group qualified GroupKind
12 14
 func Kind(kind string) unversioned.GroupKind {
... ...
@@ -18,8 +20,14 @@ func Resource(resource string) unversioned.GroupResource {
18 18
 	return SchemeGroupVersion.WithResource(resource).GroupResource()
19 19
 }
20 20
 
21
-func init() {
22
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
21
+func AddToScheme(scheme *runtime.Scheme) {
22
+	// Add the API to Scheme.
23
+	addKnownTypes(scheme)
24
+}
25
+
26
+// Adds the list of known types to api.Scheme.
27
+func addKnownTypes(scheme *runtime.Scheme) {
28
+	scheme.AddKnownTypes(SchemeGroupVersion,
23 29
 		&Role{},
24 30
 		&RoleBinding{},
25 31
 		&Policy{},
... ...
@@ -48,28 +56,28 @@ func init() {
48 48
 	)
49 49
 }
50 50
 
51
-func (*ClusterRole) IsAnAPIObject()              {}
52
-func (*ClusterPolicy) IsAnAPIObject()            {}
53
-func (*ClusterPolicyBinding) IsAnAPIObject()     {}
54
-func (*ClusterRoleBinding) IsAnAPIObject()       {}
55
-func (*ClusterPolicyList) IsAnAPIObject()        {}
56
-func (*ClusterPolicyBindingList) IsAnAPIObject() {}
57
-func (*ClusterRoleBindingList) IsAnAPIObject()   {}
58
-func (*ClusterRoleList) IsAnAPIObject()          {}
51
+func (obj *ClusterRoleList) GetObjectKind() unversioned.ObjectKind          { return &obj.TypeMeta }
52
+func (obj *ClusterRoleBindingList) GetObjectKind() unversioned.ObjectKind   { return &obj.TypeMeta }
53
+func (obj *ClusterPolicyBindingList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
54
+func (obj *ClusterPolicyList) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
55
+func (obj *ClusterPolicyBinding) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
56
+func (obj *ClusterPolicy) GetObjectKind() unversioned.ObjectKind            { return &obj.TypeMeta }
57
+func (obj *ClusterRoleBinding) GetObjectKind() unversioned.ObjectKind       { return &obj.TypeMeta }
58
+func (obj *ClusterRole) GetObjectKind() unversioned.ObjectKind              { return &obj.TypeMeta }
59 59
 
60
-func (*Role) IsAnAPIObject()              {}
61
-func (*Policy) IsAnAPIObject()            {}
62
-func (*PolicyBinding) IsAnAPIObject()     {}
63
-func (*RoleBinding) IsAnAPIObject()       {}
64
-func (*PolicyList) IsAnAPIObject()        {}
65
-func (*PolicyBindingList) IsAnAPIObject() {}
66
-func (*RoleBindingList) IsAnAPIObject()   {}
67
-func (*RoleList) IsAnAPIObject()          {}
60
+func (obj *IsPersonalSubjectAccessReview) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
61
+func (obj *SubjectAccessReviewResponse) GetObjectKind() unversioned.ObjectKind   { return &obj.TypeMeta }
62
+func (obj *ResourceAccessReviewResponse) GetObjectKind() unversioned.ObjectKind  { return &obj.TypeMeta }
63
+func (obj *LocalSubjectAccessReview) GetObjectKind() unversioned.ObjectKind      { return &obj.TypeMeta }
64
+func (obj *LocalResourceAccessReview) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
65
+func (obj *SubjectAccessReview) GetObjectKind() unversioned.ObjectKind           { return &obj.TypeMeta }
66
+func (obj *ResourceAccessReview) GetObjectKind() unversioned.ObjectKind          { return &obj.TypeMeta }
68 67
 
69
-func (*ResourceAccessReview) IsAnAPIObject()          {}
70
-func (*SubjectAccessReview) IsAnAPIObject()           {}
71
-func (*LocalResourceAccessReview) IsAnAPIObject()     {}
72
-func (*LocalSubjectAccessReview) IsAnAPIObject()      {}
73
-func (*ResourceAccessReviewResponse) IsAnAPIObject()  {}
74
-func (*SubjectAccessReviewResponse) IsAnAPIObject()   {}
75
-func (*IsPersonalSubjectAccessReview) IsAnAPIObject() {}
68
+func (obj *RoleList) GetObjectKind() unversioned.ObjectKind          { return &obj.TypeMeta }
69
+func (obj *RoleBindingList) GetObjectKind() unversioned.ObjectKind   { return &obj.TypeMeta }
70
+func (obj *PolicyBindingList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
71
+func (obj *PolicyList) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
72
+func (obj *PolicyBinding) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
73
+func (obj *Policy) GetObjectKind() unversioned.ObjectKind            { return &obj.TypeMeta }
74
+func (obj *RoleBinding) GetObjectKind() unversioned.ObjectKind       { return &obj.TypeMeta }
75
+func (obj *Role) GetObjectKind() unversioned.ObjectKind              { return &obj.TypeMeta }
... ...
@@ -121,7 +121,7 @@ type PolicyRule struct {
121 121
 	Verbs sets.String
122 122
 	// AttributeRestrictions will vary depending on what the Authorizer/AuthorizationAttributeBuilder pair supports.
123 123
 	// If the Authorizer does not recognize how to handle the AttributeRestrictions, the Authorizer should report an error.
124
-	AttributeRestrictions kruntime.EmbeddedObject
124
+	AttributeRestrictions kruntime.Object
125 125
 	// APIGroups is the name of the APIGroup that contains the resources.  If this field is empty, then both kubernetes and origin API groups are assumed.
126 126
 	// That means that if an action is requested against one of the enumerated resources in either the kubernetes or the origin API group, the request
127 127
 	// will be allowed
... ...
@@ -268,7 +268,7 @@ type AuthorizationAttributes struct {
268 268
 	// ResourceName is the name of the resource being requested for a "get" or deleted for a "delete"
269 269
 	ResourceName string
270 270
 	// Content is the actual content of the request for create and update
271
-	Content kruntime.EmbeddedObject
271
+	Content kruntime.Object
272 272
 }
273 273
 
274 274
 // PolicyList is a collection of Policies
... ...
@@ -3,8 +3,8 @@ package v1
3 3
 import (
4 4
 	"sort"
5 5
 
6
-	"k8s.io/kubernetes/pkg/api"
7 6
 	"k8s.io/kubernetes/pkg/conversion"
7
+	"k8s.io/kubernetes/pkg/runtime"
8 8
 	"k8s.io/kubernetes/pkg/util/sets"
9 9
 
10 10
 	oapi "github.com/openshift/origin/pkg/api"
... ...
@@ -269,8 +269,8 @@ func convert_api_ClusterPolicyBinding_To_v1_ClusterPolicyBinding(in *newer.Clust
269 269
 	return s.DefaultConvert(in, out, conversion.IgnoreMissingFields)
270 270
 }
271 271
 
272
-func init() {
273
-	err := api.Scheme.AddConversionFuncs(
272
+func addConversionFuncs(scheme *runtime.Scheme) {
273
+	err := scheme.AddConversionFuncs(
274 274
 		func(in *[]NamedRole, out *map[string]*newer.Role, s conversion.Scope) error {
275 275
 			for _, curr := range *in {
276 276
 				newRole := &newer.Role{}
... ...
@@ -428,37 +428,37 @@ func init() {
428 428
 		panic(err)
429 429
 	}
430 430
 
431
-	if err := api.Scheme.AddFieldLabelConversionFunc("v1", "ClusterPolicy",
431
+	if err := scheme.AddFieldLabelConversionFunc("v1", "ClusterPolicy",
432 432
 		oapi.GetFieldLabelConversionFunc(newer.ClusterPolicyToSelectableFields(&newer.ClusterPolicy{}), nil),
433 433
 	); err != nil {
434 434
 		panic(err)
435 435
 	}
436 436
 
437
-	if err := api.Scheme.AddFieldLabelConversionFunc("v1", "ClusterPolicyBinding",
437
+	if err := scheme.AddFieldLabelConversionFunc("v1", "ClusterPolicyBinding",
438 438
 		oapi.GetFieldLabelConversionFunc(newer.ClusterPolicyBindingToSelectableFields(&newer.ClusterPolicyBinding{}), nil),
439 439
 	); err != nil {
440 440
 		panic(err)
441 441
 	}
442 442
 
443
-	if err := api.Scheme.AddFieldLabelConversionFunc("v1", "Policy",
443
+	if err := scheme.AddFieldLabelConversionFunc("v1", "Policy",
444 444
 		oapi.GetFieldLabelConversionFunc(newer.PolicyToSelectableFields(&newer.Policy{}), nil),
445 445
 	); err != nil {
446 446
 		panic(err)
447 447
 	}
448 448
 
449
-	if err := api.Scheme.AddFieldLabelConversionFunc("v1", "PolicyBinding",
449
+	if err := scheme.AddFieldLabelConversionFunc("v1", "PolicyBinding",
450 450
 		oapi.GetFieldLabelConversionFunc(newer.PolicyBindingToSelectableFields(&newer.PolicyBinding{}), nil),
451 451
 	); err != nil {
452 452
 		panic(err)
453 453
 	}
454 454
 
455
-	if err := api.Scheme.AddFieldLabelConversionFunc("v1", "Role",
455
+	if err := scheme.AddFieldLabelConversionFunc("v1", "Role",
456 456
 		oapi.GetFieldLabelConversionFunc(newer.RoleToSelectableFields(&newer.Role{}), nil),
457 457
 	); err != nil {
458 458
 		panic(err)
459 459
 	}
460 460
 
461
-	if err := api.Scheme.AddFieldLabelConversionFunc("v1", "RoleBinding",
461
+	if err := scheme.AddFieldLabelConversionFunc("v1", "RoleBinding",
462 462
 		oapi.GetFieldLabelConversionFunc(newer.RoleBindingToSelectableFields(&newer.RoleBinding{}), nil),
463 463
 	); err != nil {
464 464
 		panic(err)
... ...
@@ -1,19 +1,23 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"}
11 12
 
12
-// Codec encodes internal objects to the v1 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+	addConversionFuncs(scheme)
16
+}
14 17
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
18
+// Adds the list of known types to api.Scheme.
19
+func addKnownTypes(scheme *runtime.Scheme) {
20
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 21
 		&Role{},
18 22
 		&RoleBinding{},
19 23
 		&Policy{},
... ...
@@ -42,28 +46,28 @@ func init() {
42 42
 	)
43 43
 }
44 44
 
45
-func (*ClusterRole) IsAnAPIObject()              {}
46
-func (*ClusterPolicy) IsAnAPIObject()            {}
47
-func (*ClusterPolicyBinding) IsAnAPIObject()     {}
48
-func (*ClusterRoleBinding) IsAnAPIObject()       {}
49
-func (*ClusterPolicyList) IsAnAPIObject()        {}
50
-func (*ClusterPolicyBindingList) IsAnAPIObject() {}
51
-func (*ClusterRoleBindingList) IsAnAPIObject()   {}
52
-func (*ClusterRoleList) IsAnAPIObject()          {}
45
+func (obj *ClusterRoleList) GetObjectKind() unversioned.ObjectKind          { return &obj.TypeMeta }
46
+func (obj *ClusterRoleBindingList) GetObjectKind() unversioned.ObjectKind   { return &obj.TypeMeta }
47
+func (obj *ClusterPolicyBindingList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
48
+func (obj *ClusterPolicyList) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
49
+func (obj *ClusterPolicyBinding) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
50
+func (obj *ClusterPolicy) GetObjectKind() unversioned.ObjectKind            { return &obj.TypeMeta }
51
+func (obj *ClusterRoleBinding) GetObjectKind() unversioned.ObjectKind       { return &obj.TypeMeta }
52
+func (obj *ClusterRole) GetObjectKind() unversioned.ObjectKind              { return &obj.TypeMeta }
53 53
 
54
-func (*Role) IsAnAPIObject()              {}
55
-func (*Policy) IsAnAPIObject()            {}
56
-func (*PolicyBinding) IsAnAPIObject()     {}
57
-func (*RoleBinding) IsAnAPIObject()       {}
58
-func (*PolicyList) IsAnAPIObject()        {}
59
-func (*PolicyBindingList) IsAnAPIObject() {}
60
-func (*RoleBindingList) IsAnAPIObject()   {}
61
-func (*RoleList) IsAnAPIObject()          {}
54
+func (obj *IsPersonalSubjectAccessReview) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
55
+func (obj *SubjectAccessReviewResponse) GetObjectKind() unversioned.ObjectKind   { return &obj.TypeMeta }
56
+func (obj *ResourceAccessReviewResponse) GetObjectKind() unversioned.ObjectKind  { return &obj.TypeMeta }
57
+func (obj *LocalSubjectAccessReview) GetObjectKind() unversioned.ObjectKind      { return &obj.TypeMeta }
58
+func (obj *LocalResourceAccessReview) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
59
+func (obj *SubjectAccessReview) GetObjectKind() unversioned.ObjectKind           { return &obj.TypeMeta }
60
+func (obj *ResourceAccessReview) GetObjectKind() unversioned.ObjectKind          { return &obj.TypeMeta }
62 61
 
63
-func (*ResourceAccessReview) IsAnAPIObject()          {}
64
-func (*SubjectAccessReview) IsAnAPIObject()           {}
65
-func (*LocalResourceAccessReview) IsAnAPIObject()     {}
66
-func (*LocalSubjectAccessReview) IsAnAPIObject()      {}
67
-func (*ResourceAccessReviewResponse) IsAnAPIObject()  {}
68
-func (*SubjectAccessReviewResponse) IsAnAPIObject()   {}
69
-func (*IsPersonalSubjectAccessReview) IsAnAPIObject() {}
62
+func (obj *RoleList) GetObjectKind() unversioned.ObjectKind          { return &obj.TypeMeta }
63
+func (obj *RoleBindingList) GetObjectKind() unversioned.ObjectKind   { return &obj.TypeMeta }
64
+func (obj *PolicyBindingList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
65
+func (obj *PolicyList) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
66
+func (obj *PolicyBinding) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
67
+func (obj *Policy) GetObjectKind() unversioned.ObjectKind            { return &obj.TypeMeta }
68
+func (obj *RoleBinding) GetObjectKind() unversioned.ObjectKind       { return &obj.TypeMeta }
69
+func (obj *Role) GetObjectKind() unversioned.ObjectKind              { return &obj.TypeMeta }
... ...
@@ -3,8 +3,8 @@ package v1beta3
3 3
 import (
4 4
 	"sort"
5 5
 
6
-	"k8s.io/kubernetes/pkg/api"
7 6
 	"k8s.io/kubernetes/pkg/conversion"
7
+	"k8s.io/kubernetes/pkg/runtime"
8 8
 	"k8s.io/kubernetes/pkg/util/sets"
9 9
 
10 10
 	newer "github.com/openshift/origin/pkg/authorization/api"
... ...
@@ -269,8 +269,8 @@ func convert_api_ClusterPolicyBinding_To_v1beta3_ClusterPolicyBinding(in *newer.
269 269
 	return s.DefaultConvert(in, out, conversion.IgnoreMissingFields)
270 270
 }
271 271
 
272
-func init() {
273
-	err := api.Scheme.AddConversionFuncs(
272
+func addConversionFuncs(scheme *runtime.Scheme) {
273
+	err := scheme.AddConversionFuncs(
274 274
 		convert_v1beta3_SubjectAccessReview_To_api_SubjectAccessReview,
275 275
 		convert_api_SubjectAccessReview_To_v1beta3_SubjectAccessReview,
276 276
 		convert_v1beta3_LocalSubjectAccessReview_To_api_LocalSubjectAccessReview,
... ...
@@ -1,19 +1,23 @@
1 1
 package v1beta3
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1beta3"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta3"}
11 12
 
12
-// Codec encodes internal objects to the v1beta3 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+	addConversionFuncs(scheme)
16
+}
14 17
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
18
+// Adds the list of known types to api.Scheme.
19
+func addKnownTypes(scheme *runtime.Scheme) {
20
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 21
 		&Role{},
18 22
 		&RoleBinding{},
19 23
 		&Policy{},
... ...
@@ -42,28 +46,28 @@ func init() {
42 42
 	)
43 43
 }
44 44
 
45
-func (*ClusterRole) IsAnAPIObject()              {}
46
-func (*ClusterPolicy) IsAnAPIObject()            {}
47
-func (*ClusterPolicyBinding) IsAnAPIObject()     {}
48
-func (*ClusterRoleBinding) IsAnAPIObject()       {}
49
-func (*ClusterPolicyList) IsAnAPIObject()        {}
50
-func (*ClusterPolicyBindingList) IsAnAPIObject() {}
51
-func (*ClusterRoleBindingList) IsAnAPIObject()   {}
52
-func (*ClusterRoleList) IsAnAPIObject()          {}
45
+func (obj *ClusterRoleList) GetObjectKind() unversioned.ObjectKind          { return &obj.TypeMeta }
46
+func (obj *ClusterRoleBindingList) GetObjectKind() unversioned.ObjectKind   { return &obj.TypeMeta }
47
+func (obj *ClusterPolicyBindingList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
48
+func (obj *ClusterPolicyList) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
49
+func (obj *ClusterPolicyBinding) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
50
+func (obj *ClusterPolicy) GetObjectKind() unversioned.ObjectKind            { return &obj.TypeMeta }
51
+func (obj *ClusterRoleBinding) GetObjectKind() unversioned.ObjectKind       { return &obj.TypeMeta }
52
+func (obj *ClusterRole) GetObjectKind() unversioned.ObjectKind              { return &obj.TypeMeta }
53 53
 
54
-func (*Role) IsAnAPIObject()              {}
55
-func (*Policy) IsAnAPIObject()            {}
56
-func (*PolicyBinding) IsAnAPIObject()     {}
57
-func (*RoleBinding) IsAnAPIObject()       {}
58
-func (*PolicyList) IsAnAPIObject()        {}
59
-func (*PolicyBindingList) IsAnAPIObject() {}
60
-func (*RoleBindingList) IsAnAPIObject()   {}
61
-func (*RoleList) IsAnAPIObject()          {}
54
+func (obj *IsPersonalSubjectAccessReview) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
55
+func (obj *SubjectAccessReviewResponse) GetObjectKind() unversioned.ObjectKind   { return &obj.TypeMeta }
56
+func (obj *ResourceAccessReviewResponse) GetObjectKind() unversioned.ObjectKind  { return &obj.TypeMeta }
57
+func (obj *LocalSubjectAccessReview) GetObjectKind() unversioned.ObjectKind      { return &obj.TypeMeta }
58
+func (obj *LocalResourceAccessReview) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
59
+func (obj *SubjectAccessReview) GetObjectKind() unversioned.ObjectKind           { return &obj.TypeMeta }
60
+func (obj *ResourceAccessReview) GetObjectKind() unversioned.ObjectKind          { return &obj.TypeMeta }
62 61
 
63
-func (*ResourceAccessReview) IsAnAPIObject()          {}
64
-func (*SubjectAccessReview) IsAnAPIObject()           {}
65
-func (*LocalResourceAccessReview) IsAnAPIObject()     {}
66
-func (*LocalSubjectAccessReview) IsAnAPIObject()      {}
67
-func (*ResourceAccessReviewResponse) IsAnAPIObject()  {}
68
-func (*SubjectAccessReviewResponse) IsAnAPIObject()   {}
69
-func (*IsPersonalSubjectAccessReview) IsAnAPIObject() {}
62
+func (obj *RoleList) GetObjectKind() unversioned.ObjectKind          { return &obj.TypeMeta }
63
+func (obj *RoleBindingList) GetObjectKind() unversioned.ObjectKind   { return &obj.TypeMeta }
64
+func (obj *PolicyBindingList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
65
+func (obj *PolicyList) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
66
+func (obj *PolicyBinding) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
67
+func (obj *Policy) GetObjectKind() unversioned.ObjectKind            { return &obj.TypeMeta }
68
+func (obj *RoleBinding) GetObjectKind() unversioned.ObjectKind       { return &obj.TypeMeta }
69
+func (obj *Role) GetObjectKind() unversioned.ObjectKind              { return &obj.TypeMeta }
... ...
@@ -1,12 +1,14 @@
1 1
 package api
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
5
+	"k8s.io/kubernetes/pkg/runtime"
6 6
 )
7 7
 
8
+const GroupName = ""
9
+
8 10
 // SchemeGroupVersion is group version used to register these objects
9
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: ""}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: ""}
10 12
 
11 13
 // Kind takes an unqualified kind and returns back a Group qualified GroupKind
12 14
 func Kind(kind string) unversioned.GroupKind {
... ...
@@ -18,8 +20,14 @@ func Resource(resource string) unversioned.GroupResource {
18 18
 	return SchemeGroupVersion.WithResource(resource).GroupResource()
19 19
 }
20 20
 
21
-func init() {
22
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
21
+func AddToScheme(scheme *runtime.Scheme) {
22
+	// Add the API to Scheme.
23
+	addKnownTypes(scheme)
24
+}
25
+
26
+// Adds the list of known types to api.Scheme.
27
+func addKnownTypes(scheme *runtime.Scheme) {
28
+	scheme.AddKnownTypes(SchemeGroupVersion,
23 29
 		&Build{},
24 30
 		&BuildList{},
25 31
 		&BuildConfig{},
... ...
@@ -31,11 +39,11 @@ func init() {
31 31
 	)
32 32
 }
33 33
 
34
-func (*Build) IsAnAPIObject()                     {}
35
-func (*BuildList) IsAnAPIObject()                 {}
36
-func (*BuildConfig) IsAnAPIObject()               {}
37
-func (*BuildConfigList) IsAnAPIObject()           {}
38
-func (*BuildLog) IsAnAPIObject()                  {}
39
-func (*BuildRequest) IsAnAPIObject()              {}
40
-func (*BuildLogOptions) IsAnAPIObject()           {}
41
-func (*BinaryBuildRequestOptions) IsAnAPIObject() {}
34
+func (obj *Build) GetObjectKind() unversioned.ObjectKind                     { return &obj.TypeMeta }
35
+func (obj *BuildList) GetObjectKind() unversioned.ObjectKind                 { return &obj.TypeMeta }
36
+func (obj *BuildConfig) GetObjectKind() unversioned.ObjectKind               { return &obj.TypeMeta }
37
+func (obj *BuildConfigList) GetObjectKind() unversioned.ObjectKind           { return &obj.TypeMeta }
38
+func (obj *BuildLog) GetObjectKind() unversioned.ObjectKind                  { return &obj.TypeMeta }
39
+func (obj *BuildRequest) GetObjectKind() unversioned.ObjectKind              { return &obj.TypeMeta }
40
+func (obj *BuildLogOptions) GetObjectKind() unversioned.ObjectKind           { return &obj.TypeMeta }
41
+func (obj *BinaryBuildRequestOptions) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
... ...
@@ -1,8 +1,8 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	kapi "k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/conversion"
5
+	"k8s.io/kubernetes/pkg/runtime"
6 6
 
7 7
 	oapi "github.com/openshift/origin/pkg/api"
8 8
 	newer "github.com/openshift/origin/pkg/build/api"
... ...
@@ -176,8 +176,8 @@ func convert_v1_BuildStrategy_To_api_BuildStrategy(in *BuildStrategy, out *newer
176 176
 	return nil
177 177
 }
178 178
 
179
-func init() {
180
-	err := kapi.Scheme.AddDefaultingFuncs(
179
+func addConversionFuncs(scheme *runtime.Scheme) {
180
+	err := scheme.AddDefaultingFuncs(
181 181
 		func(strategy *BuildStrategy) {
182 182
 			if (strategy != nil) && (strategy.Type == DockerBuildStrategyType) {
183 183
 				//  initialize DockerStrategy to a default state if it's not set.
... ...
@@ -211,7 +211,7 @@ func init() {
211 211
 		panic(err)
212 212
 	}
213 213
 
214
-	kapi.Scheme.AddConversionFuncs(
214
+	scheme.AddConversionFuncs(
215 215
 		convert_v1_SourceBuildStrategy_To_api_SourceBuildStrategy,
216 216
 		convert_api_SourceBuildStrategy_To_v1_SourceBuildStrategy,
217 217
 		convert_v1_DockerBuildStrategy_To_api_DockerBuildStrategy,
... ...
@@ -230,13 +230,13 @@ func init() {
230 230
 		convert_api_BuildStrategy_To_v1_BuildStrategy,
231 231
 	)
232 232
 
233
-	if err := kapi.Scheme.AddFieldLabelConversionFunc("v1", "Build",
233
+	if err := scheme.AddFieldLabelConversionFunc("v1", "Build",
234 234
 		oapi.GetFieldLabelConversionFunc(newer.BuildToSelectableFields(&newer.Build{}), map[string]string{"name": "metadata.name"}),
235 235
 	); err != nil {
236 236
 		panic(err)
237 237
 	}
238 238
 
239
-	if err := kapi.Scheme.AddFieldLabelConversionFunc("v1", "BuildConfig",
239
+	if err := scheme.AddFieldLabelConversionFunc("v1", "BuildConfig",
240 240
 		oapi.GetFieldLabelConversionFunc(newer.BuildConfigToSelectableFields(&newer.BuildConfig{}), map[string]string{"name": "metadata.name"}),
241 241
 	); err != nil {
242 242
 		panic(err)
... ...
@@ -1,19 +1,23 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"}
11 12
 
12
-// Codec encodes internal objects to the v1 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+	addConversionFuncs(scheme)
16
+}
14 17
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
18
+// Adds the list of known types to api.Scheme.
19
+func addKnownTypes(scheme *runtime.Scheme) {
20
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 21
 		&Build{},
18 22
 		&BuildList{},
19 23
 		&BuildConfig{},
... ...
@@ -25,11 +29,11 @@ func init() {
25 25
 	)
26 26
 }
27 27
 
28
-func (*Build) IsAnAPIObject()                     {}
29
-func (*BuildList) IsAnAPIObject()                 {}
30
-func (*BuildConfig) IsAnAPIObject()               {}
31
-func (*BuildConfigList) IsAnAPIObject()           {}
32
-func (*BuildLog) IsAnAPIObject()                  {}
33
-func (*BuildRequest) IsAnAPIObject()              {}
34
-func (*BuildLogOptions) IsAnAPIObject()           {}
35
-func (*BinaryBuildRequestOptions) IsAnAPIObject() {}
28
+func (obj *Build) GetObjectKind() unversioned.ObjectKind                     { return &obj.TypeMeta }
29
+func (obj *BuildList) GetObjectKind() unversioned.ObjectKind                 { return &obj.TypeMeta }
30
+func (obj *BuildConfig) GetObjectKind() unversioned.ObjectKind               { return &obj.TypeMeta }
31
+func (obj *BuildConfigList) GetObjectKind() unversioned.ObjectKind           { return &obj.TypeMeta }
32
+func (obj *BuildLog) GetObjectKind() unversioned.ObjectKind                  { return &obj.TypeMeta }
33
+func (obj *BuildRequest) GetObjectKind() unversioned.ObjectKind              { return &obj.TypeMeta }
34
+func (obj *BuildLogOptions) GetObjectKind() unversioned.ObjectKind           { return &obj.TypeMeta }
35
+func (obj *BinaryBuildRequestOptions) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
... ...
@@ -3,8 +3,8 @@ package v1beta3
3 3
 import (
4 4
 	"fmt"
5 5
 
6
-	kapi "k8s.io/kubernetes/pkg/api"
7 6
 	"k8s.io/kubernetes/pkg/conversion"
7
+	"k8s.io/kubernetes/pkg/runtime"
8 8
 
9 9
 	newer "github.com/openshift/origin/pkg/build/api"
10 10
 	imageapi "github.com/openshift/origin/pkg/image/api"
... ...
@@ -183,8 +183,9 @@ func convert_api_BuildStrategy_To_v1beta3_BuildStrategy(in *newer.BuildStrategy,
183 183
 	}
184 184
 	return nil
185 185
 }
186
-func init() {
187
-	err := kapi.Scheme.AddDefaultingFuncs(
186
+
187
+func addConversionFuncs(scheme *runtime.Scheme) {
188
+	err := scheme.AddDefaultingFuncs(
188 189
 		func(strategy *BuildStrategy) {
189 190
 			if (strategy != nil) && (strategy.Type == DockerBuildStrategyType) {
190 191
 				//  initialize DockerStrategy to a default state if it's not set.
... ...
@@ -218,7 +219,7 @@ func init() {
218 218
 		panic(err)
219 219
 	}
220 220
 
221
-	kapi.Scheme.AddConversionFuncs(
221
+	scheme.AddConversionFuncs(
222 222
 		convert_v1beta3_SourceBuildStrategy_To_api_SourceBuildStrategy,
223 223
 		convert_api_SourceBuildStrategy_To_v1beta3_SourceBuildStrategy,
224 224
 		convert_v1beta3_DockerBuildStrategy_To_api_DockerBuildStrategy,
... ...
@@ -238,7 +239,7 @@ func init() {
238 238
 	)
239 239
 
240 240
 	// Add field conversion funcs.
241
-	err = kapi.Scheme.AddFieldLabelConversionFunc("v1beta3", "Build",
241
+	err = scheme.AddFieldLabelConversionFunc("v1beta3", "Build",
242 242
 		func(label, value string) (string, string, error) {
243 243
 			switch label {
244 244
 			case "name":
... ...
@@ -255,7 +256,7 @@ func init() {
255 255
 		// If one of the conversion functions is malformed, detect it immediately.
256 256
 		panic(err)
257 257
 	}
258
-	err = kapi.Scheme.AddFieldLabelConversionFunc("v1beta3", "BuildConfig",
258
+	err = scheme.AddFieldLabelConversionFunc("v1beta3", "BuildConfig",
259 259
 		func(label, value string) (string, string, error) {
260 260
 			switch label {
261 261
 			case "name":
... ...
@@ -1,19 +1,23 @@
1 1
 package v1beta3
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1beta3"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta3"}
11 12
 
12
-// Codec encodes internal objects to the v1beta3 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+	addConversionFuncs(scheme)
16
+}
14 17
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
18
+// Adds the list of known types to api.Scheme.
19
+func addKnownTypes(scheme *runtime.Scheme) {
20
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 21
 		&Build{},
18 22
 		&BuildList{},
19 23
 		&BuildConfig{},
... ...
@@ -25,11 +29,11 @@ func init() {
25 25
 	)
26 26
 }
27 27
 
28
-func (*Build) IsAnAPIObject()                     {}
29
-func (*BuildList) IsAnAPIObject()                 {}
30
-func (*BuildConfig) IsAnAPIObject()               {}
31
-func (*BuildConfigList) IsAnAPIObject()           {}
32
-func (*BuildLog) IsAnAPIObject()                  {}
33
-func (*BuildRequest) IsAnAPIObject()              {}
34
-func (*BuildLogOptions) IsAnAPIObject()           {}
35
-func (*BinaryBuildRequestOptions) IsAnAPIObject() {}
28
+func (obj *Build) GetObjectKind() unversioned.ObjectKind                     { return &obj.TypeMeta }
29
+func (obj *BuildList) GetObjectKind() unversioned.ObjectKind                 { return &obj.TypeMeta }
30
+func (obj *BuildConfig) GetObjectKind() unversioned.ObjectKind               { return &obj.TypeMeta }
31
+func (obj *BuildConfigList) GetObjectKind() unversioned.ObjectKind           { return &obj.TypeMeta }
32
+func (obj *BuildLog) GetObjectKind() unversioned.ObjectKind                  { return &obj.TypeMeta }
33
+func (obj *BuildRequest) GetObjectKind() unversioned.ObjectKind              { return &obj.TypeMeta }
34
+func (obj *BuildLogOptions) GetObjectKind() unversioned.ObjectKind           { return &obj.TypeMeta }
35
+func (obj *BinaryBuildRequestOptions) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
... ...
@@ -167,7 +167,7 @@ func GetMasterFileReferences(config *MasterConfig) []*string {
167 167
 		}
168 168
 
169 169
 		for _, identityProvider := range config.OAuthConfig.IdentityProviders {
170
-			switch provider := identityProvider.Provider.Object.(type) {
170
+			switch provider := identityProvider.Provider.(type) {
171 171
 			case (*RequestHeaderIdentityProvider):
172 172
 				refs = append(refs, &provider.ClientCA)
173 173
 
... ...
@@ -405,7 +405,7 @@ func getOAuthClientCertCAs(options MasterConfig) ([]*x509.Certificate, error) {
405 405
 	if options.OAuthConfig != nil {
406 406
 		for _, identityProvider := range options.OAuthConfig.IdentityProviders {
407 407
 
408
-			switch provider := identityProvider.Provider.Object.(type) {
408
+			switch provider := identityProvider.Provider.(type) {
409 409
 			case (*RequestHeaderIdentityProvider):
410 410
 				caFile := provider.ClientCA
411 411
 				if len(caFile) == 0 {
... ...
@@ -451,7 +451,7 @@ func GetKubeletClientConfig(options MasterConfig) *kubeletclient.KubeletClientCo
451 451
 }
452 452
 
453 453
 func IsPasswordAuthenticator(provider IdentityProvider) bool {
454
-	switch provider.Provider.Object.(type) {
454
+	switch provider.Provider.(type) {
455 455
 	case
456 456
 		(*BasicAuthPasswordIdentityProvider),
457 457
 		(*AllowAllPasswordIdentityProvider),
... ...
@@ -488,7 +488,7 @@ func IsIdentityProviderType(provider runtime.EmbeddedObject) bool {
488 488
 }
489 489
 
490 490
 func IsOAuthIdentityProvider(provider IdentityProvider) bool {
491
-	switch provider.Provider.Object.(type) {
491
+	switch provider.Provider.(type) {
492 492
 	case
493 493
 		(*OpenIDIdentityProvider),
494 494
 		(*GitHubIdentityProvider),
... ...
@@ -23,13 +23,18 @@ func Resource(resource string) unversioned.GroupResource {
23 23
 	return SchemeGroupVersion.WithResource(resource).GroupResource()
24 24
 }
25 25
 
26
-func init() {
27
-	Scheme.AddKnownTypes(SchemeGroupVersion,
26
+func AddToScheme(scheme *runtime.Scheme) {
27
+	// Add the API to Scheme.
28
+	addKnownTypes(scheme)
29
+}
30
+
31
+// Adds the list of known types to api.Scheme.
32
+func addKnownTypes(scheme *runtime.Scheme) {
33
+	scheme.AddKnownTypes(SchemeGroupVersion,
28 34
 		&MasterConfig{},
29 35
 		&NodeConfig{},
30 36
 		&SessionSecrets{},
31 37
 
32
-		&IdentityProvider{},
33 38
 		&BasicAuthPasswordIdentityProvider{},
34 39
 		&AllowAllPasswordIdentityProvider{},
35 40
 		&DenyAllPasswordIdentityProvider{},
... ...
@@ -41,30 +46,35 @@ func init() {
41 41
 		&GitLabIdentityProvider{},
42 42
 		&GoogleIdentityProvider{},
43 43
 		&OpenIDIdentityProvider{},
44
-		&GrantConfig{},
45
-		&AdmissionPluginConfig{},
46 44
 
47 45
 		&LDAPSyncConfig{},
48 46
 	)
49 47
 }
50 48
 
51
-func (*IdentityProvider) IsAnAPIObject()                  {}
52
-func (*BasicAuthPasswordIdentityProvider) IsAnAPIObject() {}
53
-func (*AllowAllPasswordIdentityProvider) IsAnAPIObject()  {}
54
-func (*DenyAllPasswordIdentityProvider) IsAnAPIObject()   {}
55
-func (*HTPasswdPasswordIdentityProvider) IsAnAPIObject()  {}
56
-func (*LDAPPasswordIdentityProvider) IsAnAPIObject()      {}
57
-func (*KeystonePasswordIdentityProvider) IsAnAPIObject()  {}
58
-func (*RequestHeaderIdentityProvider) IsAnAPIObject()     {}
59
-func (*GitHubIdentityProvider) IsAnAPIObject()            {}
60
-func (*GitLabIdentityProvider) IsAnAPIObject()            {}
61
-func (*GoogleIdentityProvider) IsAnAPIObject()            {}
62
-func (*OpenIDIdentityProvider) IsAnAPIObject()            {}
63
-func (*GrantConfig) IsAnAPIObject()                       {}
64
-func (*AdmissionPluginConfig) IsAnAPIObject()             {}
49
+func (obj *LDAPSyncConfig) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
65 50
 
66
-func (*MasterConfig) IsAnAPIObject()   {}
67
-func (*NodeConfig) IsAnAPIObject()     {}
68
-func (*SessionSecrets) IsAnAPIObject() {}
51
+func (obj *OpenIDIdentityProvider) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
52
+func (obj *GoogleIdentityProvider) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
53
+func (obj *GitLabIdentityProvider) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
54
+func (obj *GitHubIdentityProvider) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
55
+func (obj *RequestHeaderIdentityProvider) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
56
+func (obj *KeystonePasswordIdentityProvider) GetObjectKind() unversioned.ObjectKind {
57
+	return &obj.TypeMeta
58
+}
59
+func (obj *LDAPPasswordIdentityProvider) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
60
+func (obj *HTPasswdPasswordIdentityProvider) GetObjectKind() unversioned.ObjectKind {
61
+	return &obj.TypeMeta
62
+}
63
+func (obj *DenyAllPasswordIdentityProvider) GetObjectKind() unversioned.ObjectKind {
64
+	return &obj.TypeMeta
65
+}
66
+func (obj *AllowAllPasswordIdentityProvider) GetObjectKind() unversioned.ObjectKind {
67
+	return &obj.TypeMeta
68
+}
69
+func (obj *BasicAuthPasswordIdentityProvider) GetObjectKind() unversioned.ObjectKind {
70
+	return &obj.TypeMeta
71
+}
69 72
 
70
-func (*LDAPSyncConfig) IsAnAPIObject() {}
73
+func (obj *SessionSecrets) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
74
+func (obj *NodeConfig) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
75
+func (obj *MasterConfig) GetObjectKind() unversioned.ObjectKind   { return &obj.TypeMeta }
... ...
@@ -4,12 +4,11 @@ import (
4 4
 	"k8s.io/kubernetes/pkg/conversion"
5 5
 	"k8s.io/kubernetes/pkg/util/sets"
6 6
 
7
-	internal "github.com/openshift/origin/pkg/cmd/server/api"
8 7
 	"github.com/openshift/origin/pkg/cmd/server/bootstrappolicy"
9 8
 )
10 9
 
11
-func init() {
12
-	err := internal.Scheme.AddDefaultingFuncs(
10
+func addConversionFuncs(scheme *runtime.Scheme) {
11
+	err := scheme.AddDefaultingFuncs(
13 12
 		func(obj *MasterConfig) {
14 13
 			if len(obj.APILevels) == 0 {
15 14
 				obj.APILevels = internal.DefaultOpenShiftAPILevels
... ...
@@ -153,7 +152,7 @@ func init() {
153 153
 		// If one of the conversion functions is malformed, detect it immediately.
154 154
 		panic(err)
155 155
 	}
156
-	err = internal.Scheme.AddConversionFuncs(
156
+	err = scheme.AddConversionFuncs(
157 157
 		func(in *NodeConfig, out *internal.NodeConfig, s conversion.Scope) error {
158 158
 			return s.DefaultConvert(in, out, conversion.IgnoreMissingFields)
159 159
 		},
... ...
@@ -7,19 +7,23 @@ import (
7 7
 	"github.com/openshift/origin/pkg/cmd/server/api"
8 8
 )
9 9
 
10
+const GroupName = ""
11
+
10 12
 // SchemeGroupVersion is group version used to register these objects
11
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
13
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"}
12 14
 
13
-// Codec encodes internal objects to the v1 scheme
14
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
15
+func AddToScheme(scheme *runtime.Scheme) {
16
+	addKnownTypes(scheme)
17
+	addConversionFuncs(scheme)
18
+}
15 19
 
16
-func init() {
17
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
20
+// Adds the list of known types to api.Scheme.
21
+func addKnownTypes(scheme *runtime.Scheme) {
22
+	scheme.AddKnownTypes(SchemeGroupVersion,
18 23
 		&MasterConfig{},
19 24
 		&NodeConfig{},
20 25
 		&SessionSecrets{},
21 26
 
22
-		&IdentityProvider{},
23 27
 		&BasicAuthPasswordIdentityProvider{},
24 28
 		&AllowAllPasswordIdentityProvider{},
25 29
 		&DenyAllPasswordIdentityProvider{},
... ...
@@ -31,30 +35,35 @@ func init() {
31 31
 		&GitLabIdentityProvider{},
32 32
 		&GoogleIdentityProvider{},
33 33
 		&OpenIDIdentityProvider{},
34
-		&GrantConfig{},
35
-		&AdmissionPluginConfig{},
36 34
 
37 35
 		&LDAPSyncConfig{},
38 36
 	)
39 37
 }
40 38
 
41
-func (*LDAPSyncConfig) IsAnAPIObject() {}
42
-
43
-func (*IdentityProvider) IsAnAPIObject()                  {}
44
-func (*BasicAuthPasswordIdentityProvider) IsAnAPIObject() {}
45
-func (*AllowAllPasswordIdentityProvider) IsAnAPIObject()  {}
46
-func (*DenyAllPasswordIdentityProvider) IsAnAPIObject()   {}
47
-func (*HTPasswdPasswordIdentityProvider) IsAnAPIObject()  {}
48
-func (*LDAPPasswordIdentityProvider) IsAnAPIObject()      {}
49
-func (*KeystonePasswordIdentityProvider) IsAnAPIObject()  {}
50
-func (*RequestHeaderIdentityProvider) IsAnAPIObject()     {}
51
-func (*GitHubIdentityProvider) IsAnAPIObject()            {}
52
-func (*GitLabIdentityProvider) IsAnAPIObject()            {}
53
-func (*GoogleIdentityProvider) IsAnAPIObject()            {}
54
-func (*OpenIDIdentityProvider) IsAnAPIObject()            {}
55
-func (*GrantConfig) IsAnAPIObject()                       {}
56
-func (*AdmissionPluginConfig) IsAnAPIObject()             {}
57
-
58
-func (*MasterConfig) IsAnAPIObject()   {}
59
-func (*NodeConfig) IsAnAPIObject()     {}
60
-func (*SessionSecrets) IsAnAPIObject() {}
39
+func (obj *LDAPSyncConfig) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
40
+
41
+func (obj *OpenIDIdentityProvider) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
42
+func (obj *GoogleIdentityProvider) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
43
+func (obj *GitLabIdentityProvider) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
44
+func (obj *GitHubIdentityProvider) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
45
+func (obj *RequestHeaderIdentityProvider) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
46
+func (obj *KeystonePasswordIdentityProvider) GetObjectKind() unversioned.ObjectKind {
47
+	return &obj.TypeMeta
48
+}
49
+func (obj *LDAPPasswordIdentityProvider) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
50
+func (obj *HTPasswdPasswordIdentityProvider) GetObjectKind() unversioned.ObjectKind {
51
+	return &obj.TypeMeta
52
+}
53
+func (obj *DenyAllPasswordIdentityProvider) GetObjectKind() unversioned.ObjectKind {
54
+	return &obj.TypeMeta
55
+}
56
+func (obj *AllowAllPasswordIdentityProvider) GetObjectKind() unversioned.ObjectKind {
57
+	return &obj.TypeMeta
58
+}
59
+func (obj *BasicAuthPasswordIdentityProvider) GetObjectKind() unversioned.ObjectKind {
60
+	return &obj.TypeMeta
61
+}
62
+
63
+func (obj *SessionSecrets) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
64
+func (obj *NodeConfig) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
65
+func (obj *MasterConfig) GetObjectKind() unversioned.ObjectKind   { return &obj.TypeMeta }
... ...
@@ -13,6 +13,7 @@ import (
13 13
 	"github.com/emicklei/go-restful"
14 14
 	"github.com/golang/glog"
15 15
 
16
+	"github.com/openshift/origin/pkg/api"
16 17
 	"github.com/openshift/origin/pkg/api/latest"
17 18
 	"github.com/openshift/origin/pkg/assets"
18 19
 	"github.com/openshift/origin/pkg/assets/java"
... ...
@@ -21,9 +22,10 @@ import (
21 21
 	cmdutil "github.com/openshift/origin/pkg/cmd/util"
22 22
 	oversion "github.com/openshift/origin/pkg/version"
23 23
 
24
-	"k8s.io/kubernetes/pkg/api"
24
+	kapi "k8s.io/kubernetes/pkg/api"
25 25
 	"k8s.io/kubernetes/pkg/api/meta"
26 26
 	"k8s.io/kubernetes/pkg/api/unversioned"
27
+	"k8s.io/kubernetes/pkg/apimachinery/registered"
27 28
 	"k8s.io/kubernetes/pkg/util"
28 29
 	"k8s.io/kubernetes/pkg/util/sets"
29 30
 	kversion "k8s.io/kubernetes/pkg/version"
... ...
@@ -162,23 +164,23 @@ func (c *AssetConfig) addHandlers(mux *http.ServeMux) error {
162 162
 	k8sResources := sets.NewString()
163 163
 
164 164
 	versions := []unversioned.GroupVersion{}
165
-	versions = append(versions, latest.Versions...)
166
-	versions = append(versions, klatest.ExternalVersions...)
165
+	versions = append(versions, registered.GroupOrDie(api.GroupName).GroupVersions...)
166
+	versions = append(versions, registered.GroupOrDie(kapi.GroupName).GroupVersions...)
167 167
 	deadOriginVersions := sets.NewString(configapi.DeadOpenShiftAPILevels...)
168 168
 	deadKubernetesVersions := sets.NewString(configapi.DeadKubernetesAPILevels...)
169 169
 	for _, version := range versions {
170
-		for kind := range api.Scheme.KnownTypes(version) {
170
+		for kind := range kapi.Scheme.KnownTypes(version) {
171 171
 			if strings.HasSuffix(kind, "List") {
172 172
 				continue
173 173
 			}
174
-			resource, _ := meta.KindToResource(kind, false)
174
+			resource, _ := meta.KindToResource(version.WithKind(kind), false)
175 175
 			if latest.OriginKind(version.WithKind(kind)) {
176 176
 				if !deadOriginVersions.Has(version.String()) {
177
-					originResources.Insert(resource)
177
+					originResources.Insert(resource.Resource)
178 178
 				}
179 179
 			} else {
180 180
 				if !deadKubernetesVersions.Has(version.String()) {
181
-					k8sResources.Insert(resource)
181
+					k8sResources.Insert(resource.Resource)
182 182
 				}
183 183
 			}
184 184
 		}
... ...
@@ -1,12 +1,14 @@
1 1
 package api
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
5
+	"k8s.io/kubernetes/pkg/runtime"
6 6
 )
7 7
 
8
+const GroupName = ""
9
+
8 10
 // SchemeGroupVersion is group version used to register these objects
9
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: ""}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: ""}
10 12
 
11 13
 // Kind takes an unqualified kind and returns back a Group qualified GroupKind
12 14
 func Kind(kind string) unversioned.GroupKind {
... ...
@@ -18,8 +20,14 @@ func Resource(resource string) unversioned.GroupResource {
18 18
 	return SchemeGroupVersion.WithResource(resource).GroupResource()
19 19
 }
20 20
 
21
-func init() {
22
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
21
+func AddToScheme(scheme *runtime.Scheme) {
22
+	// Add the API to Scheme.
23
+	addKnownTypes(scheme)
24
+}
25
+
26
+// Adds the list of known types to api.Scheme.
27
+func addKnownTypes(scheme *runtime.Scheme) {
28
+	scheme.AddKnownTypes(SchemeGroupVersion,
23 29
 		&DeploymentConfig{},
24 30
 		&DeploymentConfigList{},
25 31
 		&DeploymentConfigRollback{},
... ...
@@ -28,8 +36,8 @@ func init() {
28 28
 	)
29 29
 }
30 30
 
31
-func (*DeploymentConfig) IsAnAPIObject()         {}
32
-func (*DeploymentConfigList) IsAnAPIObject()     {}
33
-func (*DeploymentConfigRollback) IsAnAPIObject() {}
34
-func (*DeploymentLog) IsAnAPIObject()            {}
35
-func (*DeploymentLogOptions) IsAnAPIObject()     {}
31
+func (obj *DeploymentConfig) GetObjectKind() unversioned.ObjectKind         { return &obj.TypeMeta }
32
+func (obj *DeploymentConfigList) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
33
+func (obj *DeploymentConfigRollback) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
34
+func (obj *DeploymentLog) GetObjectKind() unversioned.ObjectKind            { return &obj.TypeMeta }
35
+func (obj *DeploymentLogOptions) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
... ...
@@ -5,8 +5,8 @@ import (
5 5
 	"math"
6 6
 	"strings"
7 7
 
8
-	"k8s.io/kubernetes/pkg/api"
9 8
 	"k8s.io/kubernetes/pkg/conversion"
9
+	"k8s.io/kubernetes/pkg/runtime"
10 10
 	"k8s.io/kubernetes/pkg/util/intstr"
11 11
 
12 12
 	oapi "github.com/openshift/origin/pkg/api"
... ...
@@ -124,8 +124,8 @@ func convert_api_RollingDeploymentStrategyParams_To_v1_RollingDeploymentStrategy
124 124
 	return nil
125 125
 }
126 126
 
127
-func init() {
128
-	err := api.Scheme.AddConversionFuncs(
127
+func addConversionFuncs(scheme *runtime.Scheme) {
128
+	err := scheme.AddConversionFuncs(
129 129
 		convert_v1_DeploymentTriggerImageChangeParams_To_api_DeploymentTriggerImageChangeParams,
130 130
 		convert_api_DeploymentTriggerImageChangeParams_To_v1_DeploymentTriggerImageChangeParams,
131 131
 
... ...
@@ -136,7 +136,7 @@ func init() {
136 136
 		panic(err)
137 137
 	}
138 138
 
139
-	if err := api.Scheme.AddFieldLabelConversionFunc("v1", "DeploymentConfig",
139
+	if err := scheme.AddFieldLabelConversionFunc("v1", "DeploymentConfig",
140 140
 		oapi.GetFieldLabelConversionFunc(newer.DeploymentConfigToSelectableFields(&newer.DeploymentConfig{}), nil),
141 141
 	); err != nil {
142 142
 		panic(err)
... ...
@@ -1,18 +1,18 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
4
+	"k8s.io/kubernetes/pkg/runtime"
5 5
 	"k8s.io/kubernetes/pkg/util/intstr"
6 6
 
7 7
 	deployapi "github.com/openshift/origin/pkg/deploy/api"
8 8
 )
9 9
 
10
-func init() {
10
+func addDefaultingFuncs(scheme *runtime.Scheme) {
11 11
 	mkintp := func(i int64) *int64 {
12 12
 		return &i
13 13
 	}
14 14
 
15
-	err := api.Scheme.AddDefaultingFuncs(
15
+	err := scheme.AddDefaultingFuncs(
16 16
 		func(obj *DeploymentConfigSpec) {
17 17
 			if obj.Triggers == nil {
18 18
 				obj.Triggers = []DeploymentTriggerPolicy{
... ...
@@ -1,19 +1,24 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"}
11 12
 
12
-// Codec encodes internal objects to the v1 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+	addDefaultingFuncs(scheme)
16
+	addConversionFuncs(scheme)
17
+}
14 18
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
19
+// Adds the list of known types to api.Scheme.
20
+func addKnownTypes(scheme *runtime.Scheme) {
21
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 22
 		&DeploymentConfig{},
18 23
 		&DeploymentConfigList{},
19 24
 		&DeploymentConfigRollback{},
... ...
@@ -22,8 +27,8 @@ func init() {
22 22
 	)
23 23
 }
24 24
 
25
-func (*DeploymentConfig) IsAnAPIObject()         {}
26
-func (*DeploymentConfigList) IsAnAPIObject()     {}
27
-func (*DeploymentConfigRollback) IsAnAPIObject() {}
28
-func (*DeploymentLog) IsAnAPIObject()            {}
29
-func (*DeploymentLogOptions) IsAnAPIObject()     {}
25
+func (obj *DeploymentConfig) GetObjectKind() unversioned.ObjectKind         { return &obj.TypeMeta }
26
+func (obj *DeploymentConfigList) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
27
+func (obj *DeploymentConfigRollback) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
28
+func (obj *DeploymentLog) GetObjectKind() unversioned.ObjectKind            { return &obj.TypeMeta }
29
+func (obj *DeploymentLogOptions) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
... ...
@@ -5,8 +5,8 @@ import (
5 5
 	"math"
6 6
 	"strings"
7 7
 
8
-	"k8s.io/kubernetes/pkg/api"
9 8
 	"k8s.io/kubernetes/pkg/conversion"
9
+	"k8s.io/kubernetes/pkg/runtime"
10 10
 	"k8s.io/kubernetes/pkg/util/intstr"
11 11
 
12 12
 	newer "github.com/openshift/origin/pkg/deploy/api"
... ...
@@ -123,8 +123,8 @@ func convert_api_RollingDeploymentStrategyParams_To_v1beta3_RollingDeploymentStr
123 123
 	return nil
124 124
 }
125 125
 
126
-func init() {
127
-	err := api.Scheme.AddConversionFuncs(
126
+func addConversionFuncs(scheme *runtime.Scheme) {
127
+	err := scheme.AddConversionFuncs(
128 128
 		convert_v1beta3_DeploymentTriggerImageChangeParams_To_api_DeploymentTriggerImageChangeParams,
129 129
 		convert_api_DeploymentTriggerImageChangeParams_To_v1beta3_DeploymentTriggerImageChangeParams,
130 130
 
... ...
@@ -1,18 +1,18 @@
1 1
 package v1beta3
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
4
+	"k8s.io/kubernetes/pkg/runtime"
5 5
 	"k8s.io/kubernetes/pkg/util/intstr"
6 6
 
7 7
 	deployapi "github.com/openshift/origin/pkg/deploy/api"
8 8
 )
9 9
 
10
-func init() {
10
+func addDefaultingFuncs(scheme *runtime.Scheme) {
11 11
 	mkintp := func(i int64) *int64 {
12 12
 		return &i
13 13
 	}
14 14
 
15
-	err := api.Scheme.AddDefaultingFuncs(
15
+	err := scheme.AddDefaultingFuncs(
16 16
 		func(obj *DeploymentConfigSpec) {
17 17
 			if obj.Triggers == nil {
18 18
 				obj.Triggers = []DeploymentTriggerPolicy{
... ...
@@ -1,19 +1,24 @@
1 1
 package v1beta3
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1beta3"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta3"}
11 12
 
12
-// Codec encodes internal objects to the v1beta3 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+	addDefaultingFuncs(scheme)
16
+	addConversionFuncs(scheme)
17
+}
14 18
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
19
+// Adds the list of known types to api.Scheme.
20
+func addKnownTypes(scheme *runtime.Scheme) {
21
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 22
 		&DeploymentConfig{},
18 23
 		&DeploymentConfigList{},
19 24
 		&DeploymentConfigRollback{},
... ...
@@ -22,8 +27,8 @@ func init() {
22 22
 	)
23 23
 }
24 24
 
25
-func (*DeploymentConfig) IsAnAPIObject()         {}
26
-func (*DeploymentConfigList) IsAnAPIObject()     {}
27
-func (*DeploymentConfigRollback) IsAnAPIObject() {}
28
-func (*DeploymentLog) IsAnAPIObject()            {}
29
-func (*DeploymentLogOptions) IsAnAPIObject()     {}
25
+func (obj *DeploymentConfig) GetObjectKind() unversioned.ObjectKind         { return &obj.TypeMeta }
26
+func (obj *DeploymentConfigList) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
27
+func (obj *DeploymentConfigRollback) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
28
+func (obj *DeploymentLog) GetObjectKind() unversioned.ObjectKind            { return &obj.TypeMeta }
29
+func (obj *DeploymentLogOptions) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
... ...
@@ -1,21 +1,24 @@
1 1
 package docker10
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "1.0"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "1.0"}
11 12
 
12
-// Codec encodes internal objects to the v1 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+}
14 16
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
17
+// Adds the list of known types to api.Scheme.
18
+func addKnownTypes(scheme *runtime.Scheme) {
19
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 20
 		&DockerImage{},
18 21
 	)
19 22
 }
20 23
 
21
-func (*DockerImage) IsAnAPIObject() {}
24
+func (obj *DockerImage) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
... ...
@@ -3,15 +3,15 @@ package dockerpre012
3 3
 import (
4 4
 	"github.com/fsouza/go-dockerclient"
5 5
 
6
-	kapi "k8s.io/kubernetes/pkg/api"
7 6
 	"k8s.io/kubernetes/pkg/api/unversioned"
8 7
 	"k8s.io/kubernetes/pkg/conversion"
8
+	"k8s.io/kubernetes/pkg/runtime"
9 9
 
10 10
 	newer "github.com/openshift/origin/pkg/image/api"
11 11
 )
12 12
 
13
-func init() {
14
-	err := kapi.Scheme.AddConversionFuncs(
13
+func addConversionFuncs(scheme *runtime.Scheme) {
14
+	err := scheme.AddConversionFuncs(
15 15
 		// Convert docker client object to internal object, but only when this package is included
16 16
 		func(in *docker.ImagePre012, out *newer.DockerImage, s conversion.Scope) error {
17 17
 			if err := s.Convert(in.Config, &out.Config, conversion.AllowDifferentFieldTypeNames); err != nil {
... ...
@@ -1,21 +1,25 @@
1 1
 package dockerpre012
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "pre012"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "pre012"}
11 12
 
12
-// Codec encodes internal objects to the v1 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+	addConversionFuncs(scheme)
16
+}
14 17
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
18
+// Adds the list of known types to api.Scheme.
19
+func addKnownTypes(scheme *runtime.Scheme) {
20
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 21
 		&DockerImage{},
18 22
 	)
19 23
 }
20 24
 
21
-func (*DockerImage) IsAnAPIObject() {}
25
+func (obj *DockerImage) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
22 26
new file mode 100644
... ...
@@ -0,0 +1,154 @@
0
+/*
1
+Copyright 2015 The Kubernetes Authors All rights reserved.
2
+
3
+Licensed under the Apache License, Version 2.0 (the "License");
4
+you may not use this file except in compliance with the License.
5
+You may obtain a copy of the License at
6
+
7
+    http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+Unless required by applicable law or agreed to in writing, software
10
+distributed under the License is distributed on an "AS IS" BASIS,
11
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+See the License for the specific language governing permissions and
13
+limitations under the License.
14
+*/
15
+
16
+// Package install installs the experimental API group, making it available as
17
+// an option to all of the API encoding/decoding machinery.
18
+package install
19
+
20
+import (
21
+	"fmt"
22
+
23
+	"github.com/golang/glog"
24
+
25
+	kapi "k8s.io/kubernetes/pkg/api"
26
+	"k8s.io/kubernetes/pkg/api/meta"
27
+	"k8s.io/kubernetes/pkg/api/unversioned"
28
+	"k8s.io/kubernetes/pkg/apimachinery"
29
+	"k8s.io/kubernetes/pkg/apimachinery/registered"
30
+	"k8s.io/kubernetes/pkg/runtime"
31
+	"k8s.io/kubernetes/pkg/util/sets"
32
+
33
+	"github.com/openshift/origin/pkg/image/api"
34
+	"github.com/openshift/origin/pkg/image/api/docker10"
35
+	"github.com/openshift/origin/pkg/image/api/dockerpre012"
36
+	"github.com/openshift/origin/pkg/image/api/v1"
37
+	"github.com/openshift/origin/pkg/image/api/v1beta3"
38
+)
39
+
40
+const importPrefix = "github.com/openshift/origin/pkg/image/api"
41
+
42
+var accessor = meta.NewAccessor()
43
+
44
+// availableVersions lists all known external versions for this group from most preferred to least preferred
45
+var availableVersions = []unversioned.GroupVersion{v1.SchemeGroupVersion, docker10.SchemeGroupVersion, dockerpre012.SchemeGroupVersion, v1beta3.SchemeGroupVersion}
46
+
47
+func init() {
48
+	registered.RegisterVersions(availableVersions)
49
+	externalVersions := []unversioned.GroupVersion{}
50
+	for _, v := range availableVersions {
51
+		if registered.IsAllowedVersion(v) {
52
+			externalVersions = append(externalVersions, v)
53
+		}
54
+	}
55
+	if len(externalVersions) == 0 {
56
+		glog.Infof("No version is registered for group %v", api.GroupName)
57
+		return
58
+	}
59
+
60
+	if err := registered.EnableVersions(externalVersions...); err != nil {
61
+		panic(err)
62
+	}
63
+	if err := enableVersions(externalVersions); err != nil {
64
+		panic(err)
65
+	}
66
+}
67
+
68
+// TODO: enableVersions should be centralized rather than spread in each API
69
+// group.
70
+// We can combine registered.RegisterVersions, registered.EnableVersions and
71
+// registered.RegisterGroup once we have moved enableVersions there.
72
+func enableVersions(externalVersions []unversioned.GroupVersion) error {
73
+	addVersionsToScheme(externalVersions...)
74
+	preferredExternalVersion := externalVersions[0]
75
+
76
+	groupMeta := apimachinery.GroupMeta{
77
+		GroupVersion:  preferredExternalVersion,
78
+		GroupVersions: externalVersions,
79
+		RESTMapper:    newRESTMapper(externalVersions),
80
+		SelfLinker:    runtime.SelfLinker(accessor),
81
+		InterfacesFor: interfacesFor,
82
+	}
83
+
84
+	if err := registered.RegisterGroup(groupMeta); err != nil {
85
+		return err
86
+	}
87
+	kapi.RegisterRESTMapper(groupMeta.RESTMapper)
88
+	return nil
89
+}
90
+
91
+func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) {
92
+	// add the internal version to Scheme
93
+	api.AddToScheme(kapi.Scheme)
94
+	// add the enabled external versions to Scheme
95
+	for _, v := range externalVersions {
96
+		if !registered.IsEnabledVersion(v) {
97
+			glog.Errorf("Version %s is not enabled, so it will not be added to the Scheme.", v)
98
+			continue
99
+		}
100
+		switch v {
101
+		case v1.SchemeGroupVersion:
102
+			v1.AddToScheme(kapi.Scheme)
103
+		case v1beta3.SchemeGroupVersion:
104
+			v1beta3.AddToScheme(kapi.Scheme)
105
+		case docker10.SchemeGroupVersion:
106
+			docker10.AddToScheme(kapi.Scheme)
107
+		case dockerpre012.SchemeGroupVersion:
108
+			dockerpre012.AddToScheme(kapi.Scheme)
109
+
110
+		default:
111
+			glog.Errorf("Version %s is not known, so it will not be added to the Scheme.", v)
112
+			continue
113
+		}
114
+	}
115
+}
116
+
117
+func newRESTMapper(externalVersions []unversioned.GroupVersion) meta.RESTMapper {
118
+	rootScoped := sets.NewString("Image")
119
+	ignoredKinds := sets.NewString()
120
+	return kapi.NewDefaultRESTMapper(externalVersions, interfacesFor, importPrefix, ignoredKinds, rootScoped)
121
+}
122
+
123
+func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, error) {
124
+	switch version {
125
+	case v1.SchemeGroupVersion:
126
+		return &meta.VersionInterfaces{
127
+			ObjectConvertor:  kapi.Scheme,
128
+			MetadataAccessor: accessor,
129
+		}, nil
130
+
131
+	case v1beta3.SchemeGroupVersion:
132
+		return &meta.VersionInterfaces{
133
+			ObjectConvertor:  kapi.Scheme,
134
+			MetadataAccessor: accessor,
135
+		}, nil
136
+
137
+	case docker10.SchemeGroupVersion:
138
+		return &meta.VersionInterfaces{
139
+			ObjectConvertor:  kapi.Scheme,
140
+			MetadataAccessor: accessor,
141
+		}, nil
142
+
143
+	case dockerpre012.SchemeGroupVersion:
144
+		return &meta.VersionInterfaces{
145
+			ObjectConvertor:  kapi.Scheme,
146
+			MetadataAccessor: accessor,
147
+		}, nil
148
+
149
+	default:
150
+		g, _ := registered.Group(api.GroupName)
151
+		return nil, fmt.Errorf("unsupported storage version: %s (valid: %v)", version, g.GroupVersions)
152
+	}
153
+}
... ...
@@ -1,8 +1,8 @@
1 1
 package api
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
5
+	"k8s.io/kubernetes/pkg/runtime"
6 6
 )
7 7
 
8 8
 const GroupName = ""
... ...
@@ -20,8 +20,14 @@ func Resource(resource string) unversioned.GroupResource {
20 20
 	return SchemeGroupVersion.WithResource(resource).GroupResource()
21 21
 }
22 22
 
23
-func init() {
24
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
23
+func AddToScheme(scheme *runtime.Scheme) {
24
+	// Add the API to Scheme.
25
+	addKnownTypes(scheme)
26
+}
27
+
28
+// Adds the list of known types to api.Scheme.
29
+func addKnownTypes(scheme *runtime.Scheme) {
30
+	scheme.AddKnownTypes(SchemeGroupVersion,
25 31
 		&Image{},
26 32
 		&ImageList{},
27 33
 		&DockerImage{},
... ...
@@ -35,13 +41,13 @@ func init() {
35 35
 	)
36 36
 }
37 37
 
38
-func (*Image) IsAnAPIObject()              {}
39
-func (*ImageList) IsAnAPIObject()          {}
40
-func (*DockerImage) IsAnAPIObject()        {}
41
-func (*ImageStream) IsAnAPIObject()        {}
42
-func (*ImageStreamList) IsAnAPIObject()    {}
43
-func (*ImageStreamMapping) IsAnAPIObject() {}
44
-func (*ImageStreamTag) IsAnAPIObject()     {}
45
-func (*ImageStreamTagList) IsAnAPIObject() {}
46
-func (*ImageStreamImage) IsAnAPIObject()   {}
47
-func (*ImageStreamImport) IsAnAPIObject()  {}
38
+func (obj *Image) GetObjectKind() unversioned.ObjectKind              { return &obj.TypeMeta }
39
+func (obj *ImageList) GetObjectKind() unversioned.ObjectKind          { return &obj.TypeMeta }
40
+func (obj *DockerImage) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
41
+func (obj *ImageStream) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
42
+func (obj *ImageStreamList) GetObjectKind() unversioned.ObjectKind    { return &obj.TypeMeta }
43
+func (obj *ImageStreamMapping) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
44
+func (obj *ImageStreamTag) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
45
+func (obj *ImageStreamTagList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
46
+func (obj *ImageStreamImage) GetObjectKind() unversioned.ObjectKind   { return &obj.TypeMeta }
47
+func (obj *ImageStreamImport) GetObjectKind() unversioned.ObjectKind  { return &obj.TypeMeta }
... ...
@@ -3,10 +3,10 @@ package v1
3 3
 import (
4 4
 	"sort"
5 5
 
6
-	kapi "k8s.io/kubernetes/pkg/api"
7 6
 	"k8s.io/kubernetes/pkg/api/unversioned"
8 7
 	v1 "k8s.io/kubernetes/pkg/api/v1"
9 8
 	"k8s.io/kubernetes/pkg/conversion"
9
+	"k8s.io/kubernetes/pkg/runtime"
10 10
 
11 11
 	oapi "github.com/openshift/origin/pkg/api"
12 12
 	newer "github.com/openshift/origin/pkg/image/api"
... ...
@@ -25,7 +25,7 @@ func convert_api_Image_To_v1_Image(in *newer.Image, out *Image, s conversion.Sco
25 25
 	if len(version) == 0 {
26 26
 		version = "1.0"
27 27
 	}
28
-	data, err := kapi.Scheme.EncodeToVersion(&in.DockerImageMetadata, version)
28
+	data, err := scheme.EncodeToVersion(&in.DockerImageMetadata, version)
29 29
 	if err != nil {
30 30
 		return err
31 31
 	}
... ...
@@ -60,11 +60,11 @@ func convert_v1_Image_To_api_Image(in *Image, out *newer.Image, s conversion.Sco
60 60
 	}
61 61
 	if len(in.DockerImageMetadata.RawJSON) > 0 {
62 62
 		// TODO: add a way to default the expected kind and version of an object if not set
63
-		obj, err := kapi.Scheme.New(unversioned.GroupVersionKind{Version: version, Kind: "DockerImage"})
63
+		obj, err := scheme.New(unversioned.GroupVersionKind{Version: version, Kind: "DockerImage"})
64 64
 		if err != nil {
65 65
 			return err
66 66
 		}
67
-		if err := kapi.Scheme.DecodeInto(in.DockerImageMetadata.RawJSON, obj); err != nil {
67
+		if err := scheme.DecodeInto(in.DockerImageMetadata.RawJSON, obj); err != nil {
68 68
 			return err
69 69
 		}
70 70
 		if err := s.Convert(obj, &out.DockerImageMetadata, 0); err != nil {
... ...
@@ -137,8 +137,8 @@ func convert_v1_ImageStreamMapping_To_api_ImageStreamMapping(in *ImageStreamMapp
137 137
 	return s.DefaultConvert(in, out, conversion.SourceToDest)
138 138
 }
139 139
 
140
-func init() {
141
-	err := kapi.Scheme.AddDefaultingFuncs(
140
+func addConversionFuncs(scheme *runtime.Scheme) {
141
+	err := scheme.AddDefaultingFuncs(
142 142
 		func(obj *ImageImportSpec) {
143 143
 			if obj.To == nil {
144 144
 				if ref, err := newer.ParseDockerImageReference(obj.From.Name); err == nil {
... ...
@@ -152,7 +152,7 @@ func init() {
152 152
 		// If one of the default functions is malformed, detect it immediately.
153 153
 		panic(err)
154 154
 	}
155
-	err = kapi.Scheme.AddConversionFuncs(
155
+	err = scheme.AddConversionFuncs(
156 156
 		func(in *[]NamedTagEventList, out *map[string]newer.TagEventList, s conversion.Scope) error {
157 157
 			for _, curr := range *in {
158 158
 				newTagEventList := newer.TagEventList{}
... ...
@@ -232,13 +232,13 @@ func init() {
232 232
 		panic(err)
233 233
 	}
234 234
 
235
-	if err := kapi.Scheme.AddFieldLabelConversionFunc("v1", "Image",
235
+	if err := scheme.AddFieldLabelConversionFunc("v1", "Image",
236 236
 		oapi.GetFieldLabelConversionFunc(newer.ImageToSelectableFields(&newer.Image{}), nil),
237 237
 	); err != nil {
238 238
 		panic(err)
239 239
 	}
240 240
 
241
-	if err := kapi.Scheme.AddFieldLabelConversionFunc("v1", "ImageStream",
241
+	if err := scheme.AddFieldLabelConversionFunc("v1", "ImageStream",
242 242
 		oapi.GetFieldLabelConversionFunc(newer.ImageStreamToSelectableFields(&newer.ImageStream{}), map[string]string{"name": "metadata.name"}),
243 243
 	); err != nil {
244 244
 		panic(err)
... ...
@@ -1,22 +1,28 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 
8
-	_ "github.com/openshift/origin/pkg/image/api/docker10"
9
-	_ "github.com/openshift/origin/pkg/image/api/dockerpre012"
7
+	"github.com/openshift/origin/pkg/image/api/docker10"
8
+	"github.com/openshift/origin/pkg/image/api/dockerpre012"
10 9
 )
11 10
 
11
+const GroupName = ""
12
+
12 13
 // SchemeGroupVersion is group version used to register these objects
13
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
14
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"}
14 15
 
15
-// Codec encodes internal objects to the v1 scheme
16
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
16
+func AddToScheme(scheme *runtime.Scheme) {
17
+	docker10.AddToScheme(scheme)
18
+	dockerpre012.AddToScheme(scheme)
19
+	addKnownTypes(scheme)
20
+	addConversionFuncs(scheme)
21
+}
17 22
 
18
-func init() {
19
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
23
+// Adds the list of known types to api.Scheme.
24
+func addKnownTypes(scheme *runtime.Scheme) {
25
+	scheme.AddKnownTypes(SchemeGroupVersion,
20 26
 		&Image{},
21 27
 		&ImageList{},
22 28
 		&ImageStream{},
... ...
@@ -29,12 +35,12 @@ func init() {
29 29
 	)
30 30
 }
31 31
 
32
-func (*Image) IsAnAPIObject()              {}
33
-func (*ImageList) IsAnAPIObject()          {}
34
-func (*ImageStream) IsAnAPIObject()        {}
35
-func (*ImageStreamList) IsAnAPIObject()    {}
36
-func (*ImageStreamMapping) IsAnAPIObject() {}
37
-func (*ImageStreamTag) IsAnAPIObject()     {}
38
-func (*ImageStreamTagList) IsAnAPIObject() {}
39
-func (*ImageStreamImage) IsAnAPIObject()   {}
40
-func (*ImageStreamImport) IsAnAPIObject()  {}
32
+func (obj *Image) GetObjectKind() unversioned.ObjectKind              { return &obj.TypeMeta }
33
+func (obj *ImageList) GetObjectKind() unversioned.ObjectKind          { return &obj.TypeMeta }
34
+func (obj *ImageStream) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
35
+func (obj *ImageStreamList) GetObjectKind() unversioned.ObjectKind    { return &obj.TypeMeta }
36
+func (obj *ImageStreamMapping) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
37
+func (obj *ImageStreamTag) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
38
+func (obj *ImageStreamTagList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
39
+func (obj *ImageStreamImage) GetObjectKind() unversioned.ObjectKind   { return &obj.TypeMeta }
40
+func (obj *ImageStreamImport) GetObjectKind() unversioned.ObjectKind  { return &obj.TypeMeta }
... ...
@@ -4,9 +4,9 @@ import (
4 4
 	"fmt"
5 5
 	"sort"
6 6
 
7
-	kapi "k8s.io/kubernetes/pkg/api"
8 7
 	"k8s.io/kubernetes/pkg/api/unversioned"
9 8
 	"k8s.io/kubernetes/pkg/conversion"
9
+	"k8s.io/kubernetes/pkg/runtime"
10 10
 
11 11
 	newer "github.com/openshift/origin/pkg/image/api"
12 12
 )
... ...
@@ -24,7 +24,7 @@ func convert_api_Image_To_v1beta3_Image(in *newer.Image, out *Image, s conversio
24 24
 	if len(version) == 0 {
25 25
 		version = "1.0"
26 26
 	}
27
-	data, err := kapi.Scheme.EncodeToVersion(&in.DockerImageMetadata, version)
27
+	data, err := scheme.EncodeToVersion(&in.DockerImageMetadata, version)
28 28
 	if err != nil {
29 29
 		return err
30 30
 	}
... ...
@@ -48,11 +48,11 @@ func convert_v1beta3_Image_To_api_Image(in *Image, out *newer.Image, s conversio
48 48
 	}
49 49
 	if len(in.DockerImageMetadata.RawJSON) > 0 {
50 50
 		// TODO: add a way to default the expected kind and version of an object if not set
51
-		obj, err := kapi.Scheme.New(unversioned.GroupVersionKind{Version: version, Kind: "DockerImage"})
51
+		obj, err := scheme.New(unversioned.GroupVersionKind{Version: version, Kind: "DockerImage"})
52 52
 		if err != nil {
53 53
 			return err
54 54
 		}
55
-		if err := kapi.Scheme.DecodeInto(in.DockerImageMetadata.RawJSON, obj); err != nil {
55
+		if err := scheme.DecodeInto(in.DockerImageMetadata.RawJSON, obj); err != nil {
56 56
 			return err
57 57
 		}
58 58
 		if err := s.Convert(obj, &out.DockerImageMetadata, 0); err != nil {
... ...
@@ -199,8 +199,8 @@ func convert_v1beta3_ImageStreamTag_To_api_ImageStreamTag(in *ImageStreamTag, ou
199 199
 
200 200
 	return nil
201 201
 }
202
-func init() {
203
-	err := kapi.Scheme.AddConversionFuncs(
202
+func addConversionFuncs(scheme *runtime.Scheme) {
203
+	err := scheme.AddConversionFuncs(
204 204
 		func(in *[]NamedTagEventList, out *map[string]newer.TagEventList, s conversion.Scope) error {
205 205
 			for _, curr := range *in {
206 206
 				newTagEventList := newer.TagEventList{}
... ...
@@ -286,7 +286,7 @@ func init() {
286 286
 		panic(err)
287 287
 	}
288 288
 
289
-	err = kapi.Scheme.AddFieldLabelConversionFunc("v1beta3", "ImageStream",
289
+	err = scheme.AddFieldLabelConversionFunc("v1beta3", "ImageStream",
290 290
 		func(label, value string) (string, string, error) {
291 291
 			switch label {
292 292
 			case "name":
... ...
@@ -1,22 +1,28 @@
1 1
 package v1beta3
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 
8
-	_ "github.com/openshift/origin/pkg/image/api/docker10"
9
-	_ "github.com/openshift/origin/pkg/image/api/dockerpre012"
7
+	"github.com/openshift/origin/pkg/image/api/docker10"
8
+	"github.com/openshift/origin/pkg/image/api/dockerpre012"
10 9
 )
11 10
 
11
+const GroupName = ""
12
+
12 13
 // SchemeGroupVersion is group version used to register these objects
13
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1beta3"}
14
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta3"}
14 15
 
15
-// Codec encodes internal objects to the v1beta3 scheme
16
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
16
+func AddToScheme(scheme *runtime.Scheme) {
17
+	docker10.AddToScheme(scheme)
18
+	dockerpre012.AddToScheme(scheme)
19
+	addKnownTypes(scheme)
20
+	addConversionFuncs(scheme)
21
+}
17 22
 
18
-func init() {
19
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
23
+// Adds the list of known types to api.Scheme.
24
+func addKnownTypes(scheme *runtime.Scheme) {
25
+	scheme.AddKnownTypes(SchemeGroupVersion,
20 26
 		&Image{},
21 27
 		&ImageList{},
22 28
 		&ImageStream{},
... ...
@@ -28,11 +34,11 @@ func init() {
28 28
 	)
29 29
 }
30 30
 
31
-func (*Image) IsAnAPIObject()              {}
32
-func (*ImageList) IsAnAPIObject()          {}
33
-func (*ImageStream) IsAnAPIObject()        {}
34
-func (*ImageStreamList) IsAnAPIObject()    {}
35
-func (*ImageStreamMapping) IsAnAPIObject() {}
36
-func (*ImageStreamTag) IsAnAPIObject()     {}
37
-func (*ImageStreamTagList) IsAnAPIObject() {}
38
-func (*ImageStreamImage) IsAnAPIObject()   {}
31
+func (obj *Image) GetObjectKind() unversioned.ObjectKind              { return &obj.TypeMeta }
32
+func (obj *ImageList) GetObjectKind() unversioned.ObjectKind          { return &obj.TypeMeta }
33
+func (obj *ImageStream) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
34
+func (obj *ImageStreamList) GetObjectKind() unversioned.ObjectKind    { return &obj.TypeMeta }
35
+func (obj *ImageStreamMapping) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
36
+func (obj *ImageStreamTag) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
37
+func (obj *ImageStreamTagList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
38
+func (obj *ImageStreamImage) GetObjectKind() unversioned.ObjectKind   { return &obj.TypeMeta }
... ...
@@ -1,12 +1,14 @@
1 1
 package api
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
5
+	"k8s.io/kubernetes/pkg/runtime"
6 6
 )
7 7
 
8
+const GroupName = ""
9
+
8 10
 // SchemeGroupVersion is group version used to register these objects
9
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: ""}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: ""}
10 12
 
11 13
 // Kind takes an unqualified kind and returns back a Group qualified GroupKind
12 14
 func Kind(kind string) unversioned.GroupKind {
... ...
@@ -18,8 +20,14 @@ func Resource(resource string) unversioned.GroupResource {
18 18
 	return SchemeGroupVersion.WithResource(resource).GroupResource()
19 19
 }
20 20
 
21
-func init() {
22
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
21
+func AddToScheme(scheme *runtime.Scheme) {
22
+	// Add the API to Scheme.
23
+	addKnownTypes(scheme)
24
+}
25
+
26
+// Adds the list of known types to api.Scheme.
27
+func addKnownTypes(scheme *runtime.Scheme) {
28
+	scheme.AddKnownTypes(SchemeGroupVersion,
23 29
 		&OAuthAccessToken{},
24 30
 		&OAuthAccessTokenList{},
25 31
 		&OAuthAuthorizeToken{},
... ...
@@ -31,11 +39,11 @@ func init() {
31 31
 	)
32 32
 }
33 33
 
34
-func (*OAuthAccessToken) IsAnAPIObject()             {}
35
-func (*OAuthAuthorizeToken) IsAnAPIObject()          {}
36
-func (*OAuthClient) IsAnAPIObject()                  {}
37
-func (*OAuthAccessTokenList) IsAnAPIObject()         {}
38
-func (*OAuthAuthorizeTokenList) IsAnAPIObject()      {}
39
-func (*OAuthClientList) IsAnAPIObject()              {}
40
-func (*OAuthClientAuthorization) IsAnAPIObject()     {}
41
-func (*OAuthClientAuthorizationList) IsAnAPIObject() {}
34
+func (obj *OAuthClientAuthorizationList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
35
+func (obj *OAuthClientAuthorization) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
36
+func (obj *OAuthClientList) GetObjectKind() unversioned.ObjectKind              { return &obj.TypeMeta }
37
+func (obj *OAuthClient) GetObjectKind() unversioned.ObjectKind                  { return &obj.TypeMeta }
38
+func (obj *OAuthAuthorizeTokenList) GetObjectKind() unversioned.ObjectKind      { return &obj.TypeMeta }
39
+func (obj *OAuthAuthorizeToken) GetObjectKind() unversioned.ObjectKind          { return &obj.TypeMeta }
40
+func (obj *OAuthAccessTokenList) GetObjectKind() unversioned.ObjectKind         { return &obj.TypeMeta }
41
+func (obj *OAuthAccessToken) GetObjectKind() unversioned.ObjectKind             { return &obj.TypeMeta }
... ...
@@ -1,32 +1,32 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	kapi "k8s.io/kubernetes/pkg/api"
4
+	"k8s.io/kubernetes/pkg/runtime"
5 5
 
6 6
 	oapi "github.com/openshift/origin/pkg/api"
7 7
 	"github.com/openshift/origin/pkg/oauth/api"
8 8
 )
9 9
 
10
-func init() {
11
-	if err := kapi.Scheme.AddFieldLabelConversionFunc("v1", "OAuthAccessToken",
10
+func addConversionFuncs(scheme *runtime.Scheme) {
11
+	if err := scheme.AddFieldLabelConversionFunc("v1", "OAuthAccessToken",
12 12
 		oapi.GetFieldLabelConversionFunc(api.OAuthAccessTokenToSelectableFields(&api.OAuthAccessToken{}), nil),
13 13
 	); err != nil {
14 14
 		panic(err)
15 15
 	}
16 16
 
17
-	if err := kapi.Scheme.AddFieldLabelConversionFunc("v1", "OAuthAuthorizeToken",
17
+	if err := scheme.AddFieldLabelConversionFunc("v1", "OAuthAuthorizeToken",
18 18
 		oapi.GetFieldLabelConversionFunc(api.OAuthAuthorizeTokenToSelectableFields(&api.OAuthAuthorizeToken{}), nil),
19 19
 	); err != nil {
20 20
 		panic(err)
21 21
 	}
22 22
 
23
-	if err := kapi.Scheme.AddFieldLabelConversionFunc("v1", "OAuthClient",
23
+	if err := scheme.AddFieldLabelConversionFunc("v1", "OAuthClient",
24 24
 		oapi.GetFieldLabelConversionFunc(api.OAuthClientToSelectableFields(&api.OAuthClient{}), nil),
25 25
 	); err != nil {
26 26
 		panic(err)
27 27
 	}
28 28
 
29
-	if err := kapi.Scheme.AddFieldLabelConversionFunc("v1", "OAuthClientAuthorization",
29
+	if err := scheme.AddFieldLabelConversionFunc("v1", "OAuthClientAuthorization",
30 30
 		oapi.GetFieldLabelConversionFunc(api.OAuthClientAuthorizationToSelectableFields(&api.OAuthClientAuthorization{}), nil),
31 31
 	); err != nil {
32 32
 		panic(err)
... ...
@@ -1,19 +1,23 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"}
11 12
 
12
-// Codec encodes internal objects to the v1 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+	addConversionFuncs(scheme)
16
+}
14 17
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
18
+// Adds the list of known types to api.Scheme.
19
+func addKnownTypes(scheme *runtime.Scheme) {
20
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 21
 		&OAuthAccessToken{},
18 22
 		&OAuthAccessTokenList{},
19 23
 		&OAuthAuthorizeToken{},
... ...
@@ -25,11 +29,11 @@ func init() {
25 25
 	)
26 26
 }
27 27
 
28
-func (*OAuthAccessToken) IsAnAPIObject()             {}
29
-func (*OAuthAuthorizeToken) IsAnAPIObject()          {}
30
-func (*OAuthClient) IsAnAPIObject()                  {}
31
-func (*OAuthAccessTokenList) IsAnAPIObject()         {}
32
-func (*OAuthAuthorizeTokenList) IsAnAPIObject()      {}
33
-func (*OAuthClientList) IsAnAPIObject()              {}
34
-func (*OAuthClientAuthorization) IsAnAPIObject()     {}
35
-func (*OAuthClientAuthorizationList) IsAnAPIObject() {}
28
+func (obj *OAuthClientAuthorizationList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
29
+func (obj *OAuthClientAuthorization) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
30
+func (obj *OAuthClientList) GetObjectKind() unversioned.ObjectKind              { return &obj.TypeMeta }
31
+func (obj *OAuthClient) GetObjectKind() unversioned.ObjectKind                  { return &obj.TypeMeta }
32
+func (obj *OAuthAuthorizeTokenList) GetObjectKind() unversioned.ObjectKind      { return &obj.TypeMeta }
33
+func (obj *OAuthAuthorizeToken) GetObjectKind() unversioned.ObjectKind          { return &obj.TypeMeta }
34
+func (obj *OAuthAccessTokenList) GetObjectKind() unversioned.ObjectKind         { return &obj.TypeMeta }
35
+func (obj *OAuthAccessToken) GetObjectKind() unversioned.ObjectKind             { return &obj.TypeMeta }
... ...
@@ -1,19 +1,22 @@
1 1
 package v1beta3
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1beta3"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta3"}
11 12
 
12
-// Codec encodes internal objects to the v1beta3 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+}
14 16
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
17
+// Adds the list of known types to api.Scheme.
18
+func addKnownTypes(scheme *runtime.Scheme) {
19
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 20
 		&OAuthAccessToken{},
18 21
 		&OAuthAccessTokenList{},
19 22
 		&OAuthAuthorizeToken{},
... ...
@@ -25,11 +28,11 @@ func init() {
25 25
 	)
26 26
 }
27 27
 
28
-func (*OAuthAccessToken) IsAnAPIObject()             {}
29
-func (*OAuthAuthorizeToken) IsAnAPIObject()          {}
30
-func (*OAuthClient) IsAnAPIObject()                  {}
31
-func (*OAuthAccessTokenList) IsAnAPIObject()         {}
32
-func (*OAuthAuthorizeTokenList) IsAnAPIObject()      {}
33
-func (*OAuthClientList) IsAnAPIObject()              {}
34
-func (*OAuthClientAuthorization) IsAnAPIObject()     {}
35
-func (*OAuthClientAuthorizationList) IsAnAPIObject() {}
28
+func (obj *OAuthClientAuthorizationList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
29
+func (obj *OAuthClientAuthorization) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
30
+func (obj *OAuthClientList) GetObjectKind() unversioned.ObjectKind              { return &obj.TypeMeta }
31
+func (obj *OAuthClient) GetObjectKind() unversioned.ObjectKind                  { return &obj.TypeMeta }
32
+func (obj *OAuthAuthorizeTokenList) GetObjectKind() unversioned.ObjectKind      { return &obj.TypeMeta }
33
+func (obj *OAuthAuthorizeToken) GetObjectKind() unversioned.ObjectKind          { return &obj.TypeMeta }
34
+func (obj *OAuthAccessTokenList) GetObjectKind() unversioned.ObjectKind         { return &obj.TypeMeta }
35
+func (obj *OAuthAccessToken) GetObjectKind() unversioned.ObjectKind             { return &obj.TypeMeta }
36 36
new file mode 100644
... ...
@@ -0,0 +1,127 @@
0
+/*
1
+Copyright 2015 The Kubernetes Authors All rights reserved.
2
+
3
+Licensed under the Apache License, Version 2.0 (the "License");
4
+you may not use this file except in compliance with the License.
5
+You may obtain a copy of the License at
6
+
7
+    http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+Unless required by applicable law or agreed to in writing, software
10
+distributed under the License is distributed on an "AS IS" BASIS,
11
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+See the License for the specific language governing permissions and
13
+limitations under the License.
14
+*/
15
+
16
+// Package install installs the experimental API group, making it available as
17
+// an option to all of the API encoding/decoding machinery.
18
+package install
19
+
20
+import (
21
+	"fmt"
22
+
23
+	"github.com/golang/glog"
24
+
25
+	kapi "k8s.io/kubernetes/pkg/api"
26
+	"k8s.io/kubernetes/pkg/api/meta"
27
+	"k8s.io/kubernetes/pkg/api/unversioned"
28
+	"k8s.io/kubernetes/pkg/apimachinery"
29
+	"k8s.io/kubernetes/pkg/apimachinery/registered"
30
+	"k8s.io/kubernetes/pkg/runtime"
31
+	"k8s.io/kubernetes/pkg/util/sets"
32
+
33
+	api "github.com/openshift/origin/pkg/project/admission/requestlimit"
34
+	"github.com/openshift/origin/pkg/project/admission/requestlimit/v1"
35
+)
36
+
37
+const importPrefix = "github.com/openshift/origin/pkg/project/admission/requestlimit"
38
+
39
+var accessor = meta.NewAccessor()
40
+
41
+// availableVersions lists all known external versions for this group from most preferred to least preferred
42
+var availableVersions = []unversioned.GroupVersion{v1.SchemeGroupVersion}
43
+
44
+func init() {
45
+	registered.RegisterVersions(availableVersions)
46
+	externalVersions := []unversioned.GroupVersion{}
47
+	for _, v := range availableVersions {
48
+		if registered.IsAllowedVersion(v) {
49
+			externalVersions = append(externalVersions, v)
50
+		}
51
+	}
52
+	if len(externalVersions) == 0 {
53
+		glog.Infof("No version is registered for group %v", api.GroupName)
54
+		return
55
+	}
56
+
57
+	if err := registered.EnableVersions(externalVersions...); err != nil {
58
+		panic(err)
59
+	}
60
+	if err := enableVersions(externalVersions); err != nil {
61
+		panic(err)
62
+	}
63
+}
64
+
65
+// TODO: enableVersions should be centralized rather than spread in each API
66
+// group.
67
+// We can combine registered.RegisterVersions, registered.EnableVersions and
68
+// registered.RegisterGroup once we have moved enableVersions there.
69
+func enableVersions(externalVersions []unversioned.GroupVersion) error {
70
+	addVersionsToScheme(externalVersions...)
71
+	preferredExternalVersion := externalVersions[0]
72
+
73
+	groupMeta := apimachinery.GroupMeta{
74
+		GroupVersion:  preferredExternalVersion,
75
+		GroupVersions: externalVersions,
76
+		RESTMapper:    newRESTMapper(externalVersions),
77
+		SelfLinker:    runtime.SelfLinker(accessor),
78
+		InterfacesFor: interfacesFor,
79
+	}
80
+
81
+	if err := registered.RegisterGroup(groupMeta); err != nil {
82
+		return err
83
+	}
84
+	kapi.RegisterRESTMapper(groupMeta.RESTMapper)
85
+	return nil
86
+}
87
+
88
+func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) {
89
+	// add the internal version to Scheme
90
+	api.AddToScheme(kapi.Scheme)
91
+	// add the enabled external versions to Scheme
92
+	for _, v := range externalVersions {
93
+		if !registered.IsEnabledVersion(v) {
94
+			glog.Errorf("Version %s is not enabled, so it will not be added to the Scheme.", v)
95
+			continue
96
+		}
97
+		switch v {
98
+		case v1.SchemeGroupVersion:
99
+			v1.AddToScheme(kapi.Scheme)
100
+
101
+		default:
102
+			glog.Errorf("Version %s is not known, so it will not be added to the Scheme.", v)
103
+			continue
104
+		}
105
+	}
106
+}
107
+
108
+func newRESTMapper(externalVersions []unversioned.GroupVersion) meta.RESTMapper {
109
+	rootScoped := sets.NewString()
110
+	ignoredKinds := sets.NewString()
111
+	return kapi.NewDefaultRESTMapper(externalVersions, interfacesFor, importPrefix, ignoredKinds, rootScoped)
112
+}
113
+
114
+func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, error) {
115
+	switch version {
116
+	case v1.SchemeGroupVersion:
117
+		return &meta.VersionInterfaces{
118
+			ObjectConvertor:  kapi.Scheme,
119
+			MetadataAccessor: accessor,
120
+		}, nil
121
+
122
+	default:
123
+		g, _ := registered.Group(api.GroupName)
124
+		return nil, fmt.Errorf("unsupported storage version: %s (valid: %v)", version, g.GroupVersions)
125
+	}
126
+}
... ...
@@ -2,13 +2,15 @@ package requestlimit
2 2
 
3 3
 import (
4 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
5
+	"k8s.io/kubernetes/pkg/runtime"
5 6
 
6
-	"github.com/openshift/origin/pkg/cmd/server/api"
7 7
 	_ "github.com/openshift/origin/pkg/project/admission/requestlimit/latest"
8 8
 )
9 9
 
10
+const GroupName = ""
11
+
10 12
 // SchemeGroupVersion is group version used to register these objects
11
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: ""}
13
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal}
12 14
 
13 15
 // Kind takes an unqualified kind and returns back a Group qualified GroupKind
14 16
 func Kind(kind string) unversioned.GroupKind {
... ...
@@ -20,10 +22,15 @@ func Resource(resource string) unversioned.GroupResource {
20 20
 	return SchemeGroupVersion.WithResource(resource).GroupResource()
21 21
 }
22 22
 
23
-func init() {
24
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
23
+func AddToScheme(scheme *runtime.Scheme) {
24
+	addKnownTypes(scheme)
25
+}
26
+
27
+// Adds the list of known types to api.Scheme.
28
+func addKnownTypes(scheme *runtime.Scheme) {
29
+	scheme.AddKnownTypes(SchemeGroupVersion,
25 30
 		&ProjectRequestLimitConfig{},
26 31
 	)
27 32
 }
28 33
 
29
-func (*ProjectRequestLimitConfig) IsAnAPIObject() {}
34
+func (obj *ProjectRequestLimitConfig) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
... ...
@@ -2,17 +2,23 @@ package v1
2 2
 
3 3
 import (
4 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
5
-
6
-	"github.com/openshift/origin/pkg/cmd/server/api"
5
+	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"}
12
+
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+}
11 16
 
12
-func init() {
13
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
17
+// Adds the list of known types to api.Scheme.
18
+func addKnownTypes(scheme *runtime.Scheme) {
19
+	scheme.AddKnownTypes(SchemeGroupVersion,
14 20
 		&ProjectRequestLimitConfig{},
15 21
 	)
16 22
 }
17 23
 
18
-func (*ProjectRequestLimitConfig) IsAnAPIObject() {}
24
+func (obj *ProjectRequestLimitConfig) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
... ...
@@ -1,12 +1,14 @@
1 1
 package api
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
5
+	"k8s.io/kubernetes/pkg/runtime"
6 6
 )
7 7
 
8
+const GroupName = ""
9
+
8 10
 // SchemeGroupVersion is group version used to register these objects
9
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: ""}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: ""}
10 12
 
11 13
 // Kind takes an unqualified kind and returns back a Group qualified GroupKind
12 14
 func Kind(kind string) unversioned.GroupKind {
... ...
@@ -18,14 +20,20 @@ func Resource(resource string) unversioned.GroupResource {
18 18
 	return SchemeGroupVersion.WithResource(resource).GroupResource()
19 19
 }
20 20
 
21
-func init() {
22
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
21
+func AddToScheme(scheme *runtime.Scheme) {
22
+	// Add the API to Scheme.
23
+	addKnownTypes(scheme)
24
+}
25
+
26
+// Adds the list of known types to api.Scheme.
27
+func addKnownTypes(scheme *runtime.Scheme) {
28
+	scheme.AddKnownTypes(SchemeGroupVersion,
23 29
 		&Project{},
24 30
 		&ProjectList{},
25 31
 		&ProjectRequest{},
26 32
 	)
27 33
 }
28 34
 
29
-func (*ProjectRequest) IsAnAPIObject() {}
30
-func (*Project) IsAnAPIObject()        {}
31
-func (*ProjectList) IsAnAPIObject()    {}
35
+func (obj *ProjectRequest) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
36
+func (obj *Project) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
37
+func (obj *ProjectList) GetObjectKind() unversioned.ObjectKind    { return &obj.TypeMeta }
... ...
@@ -3,12 +3,13 @@ package v1
3 3
 import (
4 4
 	kapi "k8s.io/kubernetes/pkg/api"
5 5
 	"k8s.io/kubernetes/pkg/registry/namespace"
6
+	"k8s.io/kubernetes/pkg/runtime"
6 7
 
7 8
 	oapi "github.com/openshift/origin/pkg/api"
8 9
 )
9 10
 
10
-func init() {
11
-	if err := kapi.Scheme.AddFieldLabelConversionFunc("v1", "Project",
11
+func addConversionFuncs(scheme *runtime.Scheme) {
12
+	if err := scheme.AddFieldLabelConversionFunc("v1", "Project",
12 13
 		oapi.GetFieldLabelConversionFunc(namespace.NamespaceToSelectableFields(&kapi.Namespace{}), nil),
13 14
 	); err != nil {
14 15
 		panic(err)
... ...
@@ -1,25 +1,29 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"}
11 12
 
12
-// Codec encodes internal objects to the v1 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+	addConversionFuncs(scheme)
16
+}
14 17
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
18
+// Adds the list of known types to api.Scheme.
19
+func addKnownTypes(scheme *runtime.Scheme) {
20
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 21
 		&Project{},
18 22
 		&ProjectList{},
19 23
 		&ProjectRequest{},
20 24
 	)
21 25
 }
22 26
 
23
-func (*ProjectRequest) IsAnAPIObject() {}
24
-func (*Project) IsAnAPIObject()        {}
25
-func (*ProjectList) IsAnAPIObject()    {}
27
+func (obj *ProjectRequest) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
28
+func (obj *Project) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
29
+func (obj *ProjectList) GetObjectKind() unversioned.ObjectKind    { return &obj.TypeMeta }
... ...
@@ -1,25 +1,28 @@
1 1
 package v1beta3
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1beta3"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta3"}
11 12
 
12
-// Codec encodes internal objects to the v1beta3 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+}
14 16
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
17
+// Adds the list of known types to api.Scheme.
18
+func addKnownTypes(scheme *runtime.Scheme) {
19
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 20
 		&Project{},
18 21
 		&ProjectList{},
19 22
 		&ProjectRequest{},
20 23
 	)
21 24
 }
22 25
 
23
-func (*ProjectRequest) IsAnAPIObject() {}
24
-func (*Project) IsAnAPIObject()        {}
25
-func (*ProjectList) IsAnAPIObject()    {}
26
+func (obj *ProjectRequest) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
27
+func (obj *Project) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
28
+func (obj *ProjectList) GetObjectKind() unversioned.ObjectKind    { return &obj.TypeMeta }
... ...
@@ -1,12 +1,14 @@
1 1
 package api
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
5
+	"k8s.io/kubernetes/pkg/runtime"
6 6
 )
7 7
 
8
+const GroupName = ""
9
+
8 10
 // SchemeGroupVersion is group version used to register these objects
9
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: ""}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: ""}
10 12
 
11 13
 // Kind takes an unqualified kind and returns back a Group qualified GroupKind
12 14
 func Kind(kind string) unversioned.GroupKind {
... ...
@@ -18,12 +20,18 @@ func Resource(resource string) unversioned.GroupResource {
18 18
 	return SchemeGroupVersion.WithResource(resource).GroupResource()
19 19
 }
20 20
 
21
-func init() {
22
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
21
+func AddToScheme(scheme *runtime.Scheme) {
22
+	// Add the API to Scheme.
23
+	addKnownTypes(scheme)
24
+}
25
+
26
+// Adds the list of known types to api.Scheme.
27
+func addKnownTypes(scheme *runtime.Scheme) {
28
+	scheme.AddKnownTypes(SchemeGroupVersion,
23 29
 		&Route{},
24 30
 		&RouteList{},
25 31
 	)
26 32
 }
27 33
 
28
-func (*Route) IsAnAPIObject()     {}
29
-func (*RouteList) IsAnAPIObject() {}
34
+func (obj *Route) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
35
+func (obj *RouteList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
... ...
@@ -1,14 +1,14 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
4
+	"k8s.io/kubernetes/pkg/runtime"
5 5
 
6 6
 	oapi "github.com/openshift/origin/pkg/api"
7 7
 	routeapi "github.com/openshift/origin/pkg/route/api"
8 8
 )
9 9
 
10
-func init() {
11
-	err := api.Scheme.AddDefaultingFuncs(
10
+func addConversionFuncs(scheme *runtime.Scheme) {
11
+	err := scheme.AddDefaultingFuncs(
12 12
 		func(obj *RouteSpec) {
13 13
 			obj.To.Kind = "Service"
14 14
 		},
... ...
@@ -30,12 +30,12 @@ func init() {
30 30
 		panic(err)
31 31
 	}
32 32
 
33
-	err = api.Scheme.AddConversionFuncs()
33
+	err = scheme.AddConversionFuncs()
34 34
 	if err != nil {
35 35
 		panic(err)
36 36
 	}
37 37
 
38
-	if err := api.Scheme.AddFieldLabelConversionFunc("v1", "Route",
38
+	if err := scheme.AddFieldLabelConversionFunc("v1", "Route",
39 39
 		oapi.GetFieldLabelConversionFunc(routeapi.RouteToSelectableFields(&routeapi.Route{}), nil),
40 40
 	); err != nil {
41 41
 		panic(err)
... ...
@@ -1,23 +1,27 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"}
11 12
 
12
-// Codec encodes internal objects to the v1 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+	addConversionFuncs(scheme)
16
+}
14 17
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
18
+// Adds the list of known types to api.Scheme.
19
+func addKnownTypes(scheme *runtime.Scheme) {
20
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 21
 		&Route{},
18 22
 		&RouteList{},
19 23
 	)
20 24
 }
21 25
 
22
-func (*Route) IsAnAPIObject()     {}
23
-func (*RouteList) IsAnAPIObject() {}
26
+func (obj *Route) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
27
+func (obj *RouteList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
... ...
@@ -1,11 +1,13 @@
1 1
 package v1beta3
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
4
+	"fmt"
5
+
6
+	"k8s.io/kubernetes/pkg/runtime"
5 7
 )
6 8
 
7
-func init() {
8
-	err := api.Scheme.AddDefaultingFuncs(
9
+func addConversionFuncs(scheme *runtime.Scheme) {
10
+	err := scheme.AddDefaultingFuncs(
9 11
 		func(obj *RouteSpec) {
10 12
 			obj.To.Kind = "Service"
11 13
 		},
... ...
@@ -27,8 +29,28 @@ func init() {
27 27
 		panic(err)
28 28
 	}
29 29
 
30
-	err = api.Scheme.AddConversionFuncs()
30
+	err = scheme.AddConversionFuncs()
31 31
 	if err != nil {
32 32
 		panic(err)
33 33
 	}
34
+
35
+	// Add field conversion funcs.
36
+	err = scheme.AddFieldLabelConversionFunc("v1beta3", "Route",
37
+		func(label, value string) (string, string, error) {
38
+			switch label {
39
+			case "metadata.name",
40
+				"spec.host",
41
+				"spec.path",
42
+				"spec.to.name":
43
+				return label, value, nil
44
+				// This is for backwards compatibility with old v1 clients which send spec.host
45
+			default:
46
+				return "", "", fmt.Errorf("field label not supported: %s", label)
47
+			}
48
+		})
49
+	if err != nil {
50
+		// If one of the conversion functions is malformed, detect it immediately.
51
+		panic(err)
52
+	}
53
+
34 54
 }
... ...
@@ -1,46 +1,27 @@
1 1
 package v1beta3
2 2
 
3 3
 import (
4
-	"fmt"
5
-
6
-	"k8s.io/kubernetes/pkg/api"
7 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
8 5
 	"k8s.io/kubernetes/pkg/runtime"
9 6
 )
10 7
 
8
+const GroupName = ""
9
+
11 10
 // SchemeGroupVersion is group version used to register these objects
12
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1beta3"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta3"}
13 12
 
14
-// Codec encodes internal objects to the v1beta3 scheme
15
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+	addConversionFuncs(scheme)
16
+}
16 17
 
17
-func init() {
18
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
18
+// Adds the list of known types to api.Scheme.
19
+func addKnownTypes(scheme *runtime.Scheme) {
20
+	scheme.AddKnownTypes(SchemeGroupVersion,
19 21
 		&Route{},
20 22
 		&RouteList{},
21 23
 	)
22 24
 }
23 25
 
24
-func addConversionFuncs() {
25
-	// Add field conversion funcs.
26
-	err := api.Scheme.AddFieldLabelConversionFunc("v1beta3", "Route",
27
-		func(label, value string) (string, string, error) {
28
-			switch label {
29
-			case "metadata.name",
30
-				"spec.host",
31
-				"spec.path",
32
-				"spec.to.name":
33
-				return label, value, nil
34
-				// This is for backwards compatibility with old v1 clients which send spec.host
35
-			default:
36
-				return "", "", fmt.Errorf("field label not supported: %s", label)
37
-			}
38
-		})
39
-	if err != nil {
40
-		// If one of the conversion functions is malformed, detect it immediately.
41
-		panic(err)
42
-	}
43
-}
44
-
45
-func (*Route) IsAnAPIObject()     {}
46
-func (*RouteList) IsAnAPIObject() {}
26
+func (obj *Route) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
27
+func (obj *RouteList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
... ...
@@ -1,12 +1,14 @@
1 1
 package api
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
5
+	"k8s.io/kubernetes/pkg/runtime"
6 6
 )
7 7
 
8
+const GroupName = ""
9
+
8 10
 // SchemeGroupVersion is group version used to register these objects
9
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: ""}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: ""}
10 12
 
11 13
 // Kind takes an unqualified kind and returns back a Group qualified GroupKind
12 14
 func Kind(kind string) unversioned.GroupKind {
... ...
@@ -18,8 +20,14 @@ func Resource(resource string) unversioned.GroupResource {
18 18
 	return SchemeGroupVersion.WithResource(resource).GroupResource()
19 19
 }
20 20
 
21
-func init() {
22
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
21
+func AddToScheme(scheme *runtime.Scheme) {
22
+	// Add the API to Scheme.
23
+	addKnownTypes(scheme)
24
+}
25
+
26
+// Adds the list of known types to api.Scheme.
27
+func addKnownTypes(scheme *runtime.Scheme) {
28
+	scheme.AddKnownTypes(SchemeGroupVersion,
23 29
 		&ClusterNetwork{},
24 30
 		&ClusterNetworkList{},
25 31
 		&HostSubnet{},
... ...
@@ -29,9 +37,9 @@ func init() {
29 29
 	)
30 30
 }
31 31
 
32
-func (*ClusterNetwork) IsAnAPIObject()     {}
33
-func (*ClusterNetworkList) IsAnAPIObject() {}
34
-func (*HostSubnet) IsAnAPIObject()         {}
35
-func (*HostSubnetList) IsAnAPIObject()     {}
36
-func (*NetNamespace) IsAnAPIObject()       {}
37
-func (*NetNamespaceList) IsAnAPIObject()   {}
32
+func (obj *ClusterNetwork) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
33
+func (obj *ClusterNetworkList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
34
+func (obj *HostSubnet) GetObjectKind() unversioned.ObjectKind         { return &obj.TypeMeta }
35
+func (obj *HostSubnetList) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
36
+func (obj *NetNamespace) GetObjectKind() unversioned.ObjectKind       { return &obj.TypeMeta }
37
+func (obj *NetNamespaceList) GetObjectKind() unversioned.ObjectKind   { return &obj.TypeMeta }
... ...
@@ -1,26 +1,26 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	kapi "k8s.io/kubernetes/pkg/api"
4
+	"k8s.io/kubernetes/pkg/runtime"
5 5
 
6 6
 	oapi "github.com/openshift/origin/pkg/api"
7 7
 	"github.com/openshift/origin/pkg/sdn/api"
8 8
 )
9 9
 
10
-func init() {
11
-	if err := kapi.Scheme.AddFieldLabelConversionFunc("v1", "ClusterNetwork",
10
+func addConversionFuncs(scheme *runtime.Scheme) {
11
+	if err := scheme.AddFieldLabelConversionFunc("v1", "ClusterNetwork",
12 12
 		oapi.GetFieldLabelConversionFunc(api.ClusterNetworkToSelectableFields(&api.ClusterNetwork{}), nil),
13 13
 	); err != nil {
14 14
 		panic(err)
15 15
 	}
16 16
 
17
-	if err := kapi.Scheme.AddFieldLabelConversionFunc("v1", "HostSubnet",
17
+	if err := scheme.AddFieldLabelConversionFunc("v1", "HostSubnet",
18 18
 		oapi.GetFieldLabelConversionFunc(api.HostSubnetToSelectableFields(&api.HostSubnet{}), nil),
19 19
 	); err != nil {
20 20
 		panic(err)
21 21
 	}
22 22
 
23
-	if err := kapi.Scheme.AddFieldLabelConversionFunc("v1", "NetNamespace",
23
+	if err := scheme.AddFieldLabelConversionFunc("v1", "NetNamespace",
24 24
 		oapi.GetFieldLabelConversionFunc(api.NetNamespaceToSelectableFields(&api.NetNamespace{}), nil),
25 25
 	); err != nil {
26 26
 		panic(err)
... ...
@@ -1,19 +1,23 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"}
11 12
 
12
-// Codec encodes internal objects to the v1 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+	addConversionFuncs(scheme)
16
+}
14 17
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
18
+// Adds the list of known types to api.Scheme.
19
+func addKnownTypes(scheme *runtime.Scheme) {
20
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 21
 		&ClusterNetwork{},
18 22
 		&ClusterNetworkList{},
19 23
 		&HostSubnet{},
... ...
@@ -23,9 +27,9 @@ func init() {
23 23
 	)
24 24
 }
25 25
 
26
-func (*ClusterNetwork) IsAnAPIObject()     {}
27
-func (*ClusterNetworkList) IsAnAPIObject() {}
28
-func (*HostSubnet) IsAnAPIObject()         {}
29
-func (*HostSubnetList) IsAnAPIObject()     {}
30
-func (*NetNamespace) IsAnAPIObject()       {}
31
-func (*NetNamespaceList) IsAnAPIObject()   {}
26
+func (obj *ClusterNetwork) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
27
+func (obj *ClusterNetworkList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
28
+func (obj *HostSubnet) GetObjectKind() unversioned.ObjectKind         { return &obj.TypeMeta }
29
+func (obj *HostSubnetList) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
30
+func (obj *NetNamespace) GetObjectKind() unversioned.ObjectKind       { return &obj.TypeMeta }
31
+func (obj *NetNamespaceList) GetObjectKind() unversioned.ObjectKind   { return &obj.TypeMeta }
... ...
@@ -1,19 +1,22 @@
1 1
 package v1beta3
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1beta3"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta3"}
11 12
 
12
-// Codec encodes internal objects to the v1beta3 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+}
14 16
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
17
+// Adds the list of known types to api.Scheme.
18
+func addKnownTypes(scheme *runtime.Scheme) {
19
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 20
 		&ClusterNetwork{},
18 21
 		&ClusterNetworkList{},
19 22
 		&HostSubnet{},
... ...
@@ -23,9 +26,9 @@ func init() {
23 23
 	)
24 24
 }
25 25
 
26
-func (*ClusterNetwork) IsAnAPIObject()     {}
27
-func (*ClusterNetworkList) IsAnAPIObject() {}
28
-func (*HostSubnet) IsAnAPIObject()         {}
29
-func (*HostSubnetList) IsAnAPIObject()     {}
30
-func (*NetNamespace) IsAnAPIObject()       {}
31
-func (*NetNamespaceList) IsAnAPIObject()   {}
26
+func (obj *ClusterNetwork) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
27
+func (obj *ClusterNetworkList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
28
+func (obj *HostSubnet) GetObjectKind() unversioned.ObjectKind         { return &obj.TypeMeta }
29
+func (obj *HostSubnetList) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
30
+func (obj *NetNamespace) GetObjectKind() unversioned.ObjectKind       { return &obj.TypeMeta }
31
+func (obj *NetNamespaceList) GetObjectKind() unversioned.ObjectKind   { return &obj.TypeMeta }
... ...
@@ -1,12 +1,14 @@
1 1
 package api
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
5
+	"k8s.io/kubernetes/pkg/runtime"
6 6
 )
7 7
 
8
+const GroupName = ""
9
+
8 10
 // SchemeGroupVersion is group version used to register these objects
9
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: ""}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: ""}
10 12
 
11 13
 // Kind takes an unqualified kind and returns back a Group qualified GroupKind
12 14
 func Kind(kind string) unversioned.GroupKind {
... ...
@@ -18,12 +20,18 @@ func Resource(resource string) unversioned.GroupResource {
18 18
 	return SchemeGroupVersion.WithResource(resource).GroupResource()
19 19
 }
20 20
 
21
-func init() {
22
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
21
+func AddToScheme(scheme *runtime.Scheme) {
22
+	// Add the API to Scheme.
23
+	addKnownTypes(scheme)
24
+}
25
+
26
+// Adds the list of known types to api.Scheme.
27
+func addKnownTypes(scheme *runtime.Scheme) {
28
+	scheme.AddKnownTypes(SchemeGroupVersion,
23 29
 		&Template{},
24 30
 		&TemplateList{},
25 31
 	)
26 32
 }
27 33
 
28
-func (*Template) IsAnAPIObject()     {}
29
-func (*TemplateList) IsAnAPIObject() {}
34
+func (obj *Template) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
35
+func (obj *TemplateList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
... ...
@@ -1,8 +1,8 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/conversion"
5
+	"k8s.io/kubernetes/pkg/runtime"
6 6
 
7 7
 	oapi "github.com/openshift/origin/pkg/api"
8 8
 	newer "github.com/openshift/origin/pkg/template/api"
... ...
@@ -25,8 +25,8 @@ func convert_v1_Template_To_api_Template(in *Template, out *newer.Template, s co
25 25
 	return s.DefaultConvert(in, out, conversion.IgnoreMissingFields)
26 26
 }
27 27
 
28
-func init() {
29
-	err := api.Scheme.AddConversionFuncs(
28
+func addConversionFuncs(scheme *runtime.Scheme) {
29
+	err := scheme.AddConversionFuncs(
30 30
 		convert_api_Template_To_v1_Template,
31 31
 		convert_v1_Template_To_api_Template,
32 32
 	)
... ...
@@ -34,7 +34,7 @@ func init() {
34 34
 		panic(err)
35 35
 	}
36 36
 
37
-	if err := api.Scheme.AddFieldLabelConversionFunc("v1", "Template",
37
+	if err := scheme.AddFieldLabelConversionFunc("v1", "Template",
38 38
 		oapi.GetFieldLabelConversionFunc(newer.TemplateToSelectableFields(&newer.Template{}), nil),
39 39
 	); err != nil {
40 40
 		panic(err)
... ...
@@ -1,26 +1,30 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"}
11 12
 
12
-// Codec encodes internal objects to the v1 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+	addConversionFuncs(scheme)
16
+}
14 17
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
18
+// Adds the list of known types to api.Scheme.
19
+func addKnownTypes(scheme *runtime.Scheme) {
20
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 21
 		&Template{},
18 22
 		&TemplateList{},
19 23
 	)
20 24
 
21
-	api.Scheme.AddKnownTypeWithName(SchemeGroupVersion.WithKind("TemplateConfig"), &Template{})
22
-	api.Scheme.AddKnownTypeWithName(SchemeGroupVersion.WithKind("ProcessedTemplate"), &Template{})
25
+	scheme.AddKnownTypeWithName(SchemeGroupVersion.WithKind("TemplateConfig"), &Template{})
26
+	scheme.AddKnownTypeWithName(SchemeGroupVersion.WithKind("ProcessedTemplate"), &Template{})
23 27
 }
24 28
 
25
-func (*Template) IsAnAPIObject()     {}
26
-func (*TemplateList) IsAnAPIObject() {}
29
+func (obj *Template) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
30
+func (obj *TemplateList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
... ...
@@ -1,8 +1,8 @@
1 1
 package v1beta3
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/conversion"
5
+	"k8s.io/kubernetes/pkg/runtime"
6 6
 
7 7
 	newer "github.com/openshift/origin/pkg/template/api"
8 8
 )
... ...
@@ -24,8 +24,8 @@ func convert_v1beta3_Template_To_api_Template(in *Template, out *newer.Template,
24 24
 	return s.DefaultConvert(in, out, conversion.IgnoreMissingFields)
25 25
 }
26 26
 
27
-func init() {
28
-	err := api.Scheme.AddConversionFuncs(
27
+func addConversionFuncs(scheme *runtime.Scheme) {
28
+	err := scheme.AddConversionFuncs(
29 29
 		convert_api_Template_To_v1beta3_Template,
30 30
 		convert_v1beta3_Template_To_api_Template,
31 31
 	)
... ...
@@ -1,26 +1,30 @@
1 1
 package v1beta3
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1beta3"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta3"}
11 12
 
12
-// Codec encodes internal objects to the v1beta3 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+	addConversionFuncs(scheme)
16
+}
14 17
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
18
+// Adds the list of known types to api.Scheme.
19
+func addKnownTypes(scheme *runtime.Scheme) {
20
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 21
 		&Template{},
18 22
 		&TemplateList{},
19 23
 	)
20 24
 
21
-	api.Scheme.AddKnownTypeWithName(SchemeGroupVersion.WithKind("TemplateConfig"), &Template{})
22
-	api.Scheme.AddKnownTypeWithName(SchemeGroupVersion.WithKind("ProcessedTemplate"), &Template{})
25
+	scheme.AddKnownTypeWithName(SchemeGroupVersion.WithKind("TemplateConfig"), &Template{})
26
+	scheme.AddKnownTypeWithName(SchemeGroupVersion.WithKind("ProcessedTemplate"), &Template{})
23 27
 }
24 28
 
25
-func (*Template) IsAnAPIObject()     {}
26
-func (*TemplateList) IsAnAPIObject() {}
29
+func (obj *Template) GetObjectKind() unversioned.ObjectKind     { return &obj.TypeMeta }
30
+func (obj *TemplateList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
... ...
@@ -1,12 +1,14 @@
1 1
 package api
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
5
+	"k8s.io/kubernetes/pkg/runtime"
6 6
 )
7 7
 
8
+const GroupName = ""
9
+
8 10
 // SchemeGroupVersion is group version used to register these objects
9
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: ""}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: ""}
10 12
 
11 13
 // Kind takes an unqualified kind and returns back a Group qualified GroupKind
12 14
 func Kind(kind string) unversioned.GroupKind {
... ...
@@ -18,8 +20,14 @@ func Resource(resource string) unversioned.GroupResource {
18 18
 	return SchemeGroupVersion.WithResource(resource).GroupResource()
19 19
 }
20 20
 
21
-func init() {
22
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
21
+func AddToScheme(scheme *runtime.Scheme) {
22
+	// Add the API to Scheme.
23
+	addKnownTypes(scheme)
24
+}
25
+
26
+// Adds the list of known types to api.Scheme.
27
+func addKnownTypes(scheme *runtime.Scheme) {
28
+	scheme.AddKnownTypes(SchemeGroupVersion,
23 29
 		&User{},
24 30
 		&UserList{},
25 31
 		&Identity{},
... ...
@@ -29,3 +37,11 @@ func init() {
29 29
 		&GroupList{},
30 30
 	)
31 31
 }
32
+
33
+func (obj *GroupList) GetObjectKind() unversioned.ObjectKind           { return &obj.TypeMeta }
34
+func (obj *Group) GetObjectKind() unversioned.ObjectKind               { return &obj.TypeMeta }
35
+func (obj *User) GetObjectKind() unversioned.ObjectKind                { return &obj.TypeMeta }
36
+func (obj *UserList) GetObjectKind() unversioned.ObjectKind            { return &obj.TypeMeta }
37
+func (obj *Identity) GetObjectKind() unversioned.ObjectKind            { return &obj.TypeMeta }
38
+func (obj *IdentityList) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
39
+func (obj *UserIdentityMapping) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
... ...
@@ -69,11 +69,3 @@ type GroupList struct {
69 69
 	unversioned.ListMeta
70 70
 	Items []Group
71 71
 }
72
-
73
-func (*GroupList) IsAnAPIObject()           {}
74
-func (*Group) IsAnAPIObject()               {}
75
-func (*User) IsAnAPIObject()                {}
76
-func (*UserList) IsAnAPIObject()            {}
77
-func (*Identity) IsAnAPIObject()            {}
78
-func (*IdentityList) IsAnAPIObject()        {}
79
-func (*UserIdentityMapping) IsAnAPIObject() {}
... ...
@@ -1,26 +1,26 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	kapi "k8s.io/kubernetes/pkg/api"
4
+	"k8s.io/kubernetes/pkg/runtime"
5 5
 
6 6
 	oapi "github.com/openshift/origin/pkg/api"
7 7
 	"github.com/openshift/origin/pkg/user/api"
8 8
 )
9 9
 
10
-func init() {
11
-	if err := kapi.Scheme.AddFieldLabelConversionFunc("v1", "Group",
10
+func addConversionFuncs(scheme *runtime.Scheme) {
11
+	if err := scheme.AddFieldLabelConversionFunc("v1", "Group",
12 12
 		oapi.GetFieldLabelConversionFunc(api.GroupToSelectableFields(&api.Group{}), nil),
13 13
 	); err != nil {
14 14
 		panic(err)
15 15
 	}
16 16
 
17
-	if err := kapi.Scheme.AddFieldLabelConversionFunc("v1", "Identity",
17
+	if err := scheme.AddFieldLabelConversionFunc("v1", "Identity",
18 18
 		oapi.GetFieldLabelConversionFunc(api.IdentityToSelectableFields(&api.Identity{}), nil),
19 19
 	); err != nil {
20 20
 		panic(err)
21 21
 	}
22 22
 
23
-	if err := kapi.Scheme.AddFieldLabelConversionFunc("v1", "User",
23
+	if err := scheme.AddFieldLabelConversionFunc("v1", "User",
24 24
 		oapi.GetFieldLabelConversionFunc(api.UserToSelectableFields(&api.User{}), nil),
25 25
 	); err != nil {
26 26
 		panic(err)
... ...
@@ -1,19 +1,23 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"}
11 12
 
12
-// Codec encodes internal objects to the v1 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+	addConversionFuncs(scheme)
16
+}
14 17
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
18
+// Adds the list of known types to api.Scheme.
19
+func addKnownTypes(scheme *runtime.Scheme) {
20
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 21
 		&User{},
18 22
 		&UserList{},
19 23
 		&Identity{},
... ...
@@ -23,3 +27,11 @@ func init() {
23 23
 		&GroupList{},
24 24
 	)
25 25
 }
26
+
27
+func (obj *GroupList) GetObjectKind() unversioned.ObjectKind           { return &obj.TypeMeta }
28
+func (obj *Group) GetObjectKind() unversioned.ObjectKind               { return &obj.TypeMeta }
29
+func (obj *User) GetObjectKind() unversioned.ObjectKind                { return &obj.TypeMeta }
30
+func (obj *UserList) GetObjectKind() unversioned.ObjectKind            { return &obj.TypeMeta }
31
+func (obj *Identity) GetObjectKind() unversioned.ObjectKind            { return &obj.TypeMeta }
32
+func (obj *IdentityList) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
33
+func (obj *UserIdentityMapping) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
... ...
@@ -70,11 +70,3 @@ type GroupList struct {
70 70
 	unversioned.ListMeta `json:"metadata,omitempty"`
71 71
 	Items                []Group `json:"items" description:"list of groups"`
72 72
 }
73
-
74
-func (*GroupList) IsAnAPIObject()           {}
75
-func (*Group) IsAnAPIObject()               {}
76
-func (*User) IsAnAPIObject()                {}
77
-func (*UserList) IsAnAPIObject()            {}
78
-func (*Identity) IsAnAPIObject()            {}
79
-func (*IdentityList) IsAnAPIObject()        {}
80
-func (*UserIdentityMapping) IsAnAPIObject() {}
... ...
@@ -1,19 +1,22 @@
1 1
 package v1beta3
2 2
 
3 3
 import (
4
-	"k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/api/unversioned"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
7 6
 )
8 7
 
8
+const GroupName = ""
9
+
9 10
 // SchemeGroupVersion is group version used to register these objects
10
-var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1beta3"}
11
+var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta3"}
11 12
 
12
-// Codec encodes internal objects to the v1 scheme
13
-var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion.String())
13
+func AddToScheme(scheme *runtime.Scheme) {
14
+	addKnownTypes(scheme)
15
+}
14 16
 
15
-func init() {
16
-	api.Scheme.AddKnownTypes(SchemeGroupVersion,
17
+// Adds the list of known types to api.Scheme.
18
+func addKnownTypes(scheme *runtime.Scheme) {
19
+	scheme.AddKnownTypes(SchemeGroupVersion,
17 20
 		&User{},
18 21
 		&UserList{},
19 22
 		&Identity{},
... ...
@@ -23,3 +26,11 @@ func init() {
23 23
 		&GroupList{},
24 24
 	)
25 25
 }
26
+
27
+func (obj *GroupList) GetObjectKind() unversioned.ObjectKind           { return &obj.TypeMeta }
28
+func (obj *Group) GetObjectKind() unversioned.ObjectKind               { return &obj.TypeMeta }
29
+func (obj *User) GetObjectKind() unversioned.ObjectKind                { return &obj.TypeMeta }
30
+func (obj *UserList) GetObjectKind() unversioned.ObjectKind            { return &obj.TypeMeta }
31
+func (obj *Identity) GetObjectKind() unversioned.ObjectKind            { return &obj.TypeMeta }
32
+func (obj *IdentityList) GetObjectKind() unversioned.ObjectKind        { return &obj.TypeMeta }
33
+func (obj *UserIdentityMapping) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta }
... ...
@@ -70,11 +70,3 @@ type GroupList struct {
70 70
 	unversioned.ListMeta `json:"metadata,omitempty"`
71 71
 	Items                []Group `json:"items" description:"list of groups"`
72 72
 }
73
-
74
-func (*GroupList) IsAnAPIObject()           {}
75
-func (*Group) IsAnAPIObject()               {}
76
-func (*User) IsAnAPIObject()                {}
77
-func (*UserList) IsAnAPIObject()            {}
78
-func (*Identity) IsAnAPIObject()            {}
79
-func (*IdentityList) IsAnAPIObject()        {}
80
-func (*UserIdentityMapping) IsAnAPIObject() {}