Browse code

move configapi back into its own scheme until we split the group

deads2k authored on 2016/02/04 05:28:07
Showing 9 changed files
... ...
@@ -407,14 +407,12 @@ func (o CreateNodeConfigOptions) MakeNodeConfig(serverCertFile, serverKeyFile, n
407 407
 		return err
408 408
 	}
409 409
 
410
-	groupMeta := registered.GroupOrDie(configapi.GroupName)
411
-
412 410
 	// Roundtrip the config to v1 and back to ensure proper defaults are set.
413
-	ext, err := kapi.Scheme.ConvertToVersion(config, groupMeta.GroupVersions[0].String())
411
+	ext, err := configapi.Scheme.ConvertToVersion(config, latestconfigapi.Version.String())
414 412
 	if err != nil {
415 413
 		return err
416 414
 	}
417
-	internal, err := kapi.Scheme.ConvertToVersion(ext, configapi.SchemeGroupVersion.String())
415
+	internal, err := configapi.Scheme.ConvertToVersion(ext, configapi.SchemeGroupVersion.String())
418 416
 	if err != nil {
419 417
 		return err
420 418
 	}
... ...
@@ -434,7 +432,7 @@ func (o CreateNodeConfigOptions) MakeNodeJSON(nodeJSONFile string) error {
434 434
 	node := &kapi.Node{}
435 435
 	node.Name = o.NodeName
436 436
 
437
-	groupMeta := registered.GroupOrDie(configapi.GroupName)
437
+	groupMeta := registered.GroupOrDie(kapi.GroupName)
438 438
 
439 439
 	json, err := runtime.Encode(kapi.Codecs.LegacyCodec(groupMeta.GroupVersions[0]), node)
440 440
 	if err != nil {
... ...
@@ -1,17 +1,10 @@
1 1
 package install
2 2
 
3 3
 import (
4
-	"fmt"
5
-
6 4
 	"github.com/golang/glog"
7 5
 
8
-	kapi "k8s.io/kubernetes/pkg/api"
9 6
 	"k8s.io/kubernetes/pkg/api/meta"
10 7
 	"k8s.io/kubernetes/pkg/api/unversioned"
11
-	"k8s.io/kubernetes/pkg/apimachinery"
12
-	"k8s.io/kubernetes/pkg/apimachinery/registered"
13
-	"k8s.io/kubernetes/pkg/runtime"
14
-	"k8s.io/kubernetes/pkg/util/sets"
15 8
 
16 9
 	"github.com/openshift/origin/pkg/cmd/server/api"
17 10
 	"github.com/openshift/origin/pkg/cmd/server/api/v1"
... ...
@@ -25,22 +18,7 @@ var accessor = meta.NewAccessor()
25 25
 var availableVersions = []unversioned.GroupVersion{v1.SchemeGroupVersion}
26 26
 
27 27
 func init() {
28
-	registered.RegisterVersions(availableVersions)
29
-	externalVersions := []unversioned.GroupVersion{}
30
-	for _, v := range availableVersions {
31
-		if registered.IsAllowedVersion(v) {
32
-			externalVersions = append(externalVersions, v)
33
-		}
34
-	}
35
-	if len(externalVersions) == 0 {
36
-		glog.Infof("No version is registered for group %v", api.GroupName)
37
-		return
38
-	}
39
-
40
-	if err := registered.EnableVersions(externalVersions...); err != nil {
41
-		panic(err)
42
-	}
43
-	if err := enableVersions(externalVersions); err != nil {
28
+	if err := enableVersions(availableVersions); err != nil {
44 29
 		panic(err)
45 30
 	}
46 31
 }
... ...
@@ -51,35 +29,17 @@ func init() {
51 51
 // registered.RegisterGroup once we have moved enableVersions there.
52 52
 func enableVersions(externalVersions []unversioned.GroupVersion) error {
53 53
 	addVersionsToScheme(externalVersions...)
54
-	preferredExternalVersion := externalVersions[0]
55
-
56
-	groupMeta := apimachinery.GroupMeta{
57
-		GroupVersion:  preferredExternalVersion,
58
-		GroupVersions: externalVersions,
59
-		RESTMapper:    newRESTMapper(externalVersions),
60
-		SelfLinker:    runtime.SelfLinker(accessor),
61
-		InterfacesFor: interfacesFor,
62
-	}
63
-
64
-	if err := registered.RegisterGroup(groupMeta); err != nil {
65
-		return err
66
-	}
67
-	kapi.RegisterRESTMapper(groupMeta.RESTMapper)
68 54
 	return nil
69 55
 }
70 56
 
71 57
 func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) {
72 58
 	// add the internal version to Scheme
73
-	api.AddToScheme(kapi.Scheme)
59
+	api.AddToScheme(api.Scheme)
74 60
 	// add the enabled external versions to Scheme
75 61
 	for _, v := range externalVersions {
76
-		if !registered.IsEnabledVersion(v) {
77
-			glog.Errorf("Version %s is not enabled, so it will not be added to the Scheme.", v)
78
-			continue
79
-		}
80 62
 		switch v {
81 63
 		case v1.SchemeGroupVersion:
82
-			v1.AddToScheme(kapi.Scheme)
64
+			v1.AddToScheme(api.Scheme)
83 65
 
84 66
 		default:
85 67
 			glog.Errorf("Version %s is not known, so it will not be added to the Scheme.", v)
... ...
@@ -87,23 +47,3 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) {
87 87
 		}
88 88
 	}
89 89
 }
90
-
91
-func newRESTMapper(externalVersions []unversioned.GroupVersion) meta.RESTMapper {
92
-	rootScoped := sets.NewString()
93
-	ignoredKinds := sets.NewString()
94
-	return kapi.NewDefaultRESTMapper(externalVersions, interfacesFor, importPrefix, ignoredKinds, rootScoped)
95
-}
96
-
97
-func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, error) {
98
-	switch version {
99
-	case v1.SchemeGroupVersion:
100
-		return &meta.VersionInterfaces{
101
-			ObjectConvertor:  kapi.Scheme,
102
-			MetadataAccessor: accessor,
103
-		}, nil
104
-
105
-	default:
106
-		g, _ := registered.Group(api.GroupName)
107
-		return nil, fmt.Errorf("unsupported storage version: %s (valid: %v)", version, g.GroupVersions)
108
-	}
109
-}
... ...
@@ -8,12 +8,10 @@ import (
8 8
 
9 9
 	"github.com/ghodss/yaml"
10 10
 
11
-	kapi "k8s.io/kubernetes/pkg/api"
12 11
 	"k8s.io/kubernetes/pkg/runtime"
13 12
 	kyaml "k8s.io/kubernetes/pkg/util/yaml"
14 13
 
15 14
 	configapi "github.com/openshift/origin/pkg/cmd/server/api"
16
-	"github.com/openshift/origin/pkg/cmd/server/api/v1"
17 15
 )
18 16
 
19 17
 func ReadSessionSecrets(filename string) (*configapi.SessionSecrets, error) {
... ...
@@ -68,7 +66,7 @@ func ReadAndResolveNodeConfig(filename string) (*configapi.NodeConfig, error) {
68 68
 
69 69
 // TODO: Remove this when a YAML serializer is available from upstream
70 70
 func WriteYAML(obj runtime.Object) ([]byte, error) {
71
-	json, err := runtime.Encode(kapi.Codecs.LegacyCodec(v1.SchemeGroupVersion), obj)
71
+	json, err := runtime.Encode(Codec, obj)
72 72
 	if err != nil {
73 73
 		return nil, err
74 74
 	}
... ...
@@ -86,7 +84,7 @@ func ReadYAML(data []byte, obj runtime.Object) error {
86 86
 	if err != nil {
87 87
 		return err
88 88
 	}
89
-	err = runtime.DecodeInto(kapi.Codecs.UniversalDecoder(), data, obj)
89
+	err = runtime.DecodeInto(Codec, data, obj)
90 90
 	return captureSurroundingJSONForError("error reading config: ", data, err)
91 91
 }
92 92
 
... ...
@@ -1,7 +1,12 @@
1 1
 package latest
2 2
 
3 3
 import (
4
+	// kapi "k8s.io/kubernetes/pkg/api"
5
+	// "k8s.io/kubernetes/pkg/api/meta"
4 6
 	"k8s.io/kubernetes/pkg/api/unversioned"
7
+	"k8s.io/kubernetes/pkg/runtime/serializer"
8
+
9
+	configapi "github.com/openshift/origin/pkg/cmd/server/api"
5 10
 )
6 11
 
7 12
 // HACK TO ELIMINATE CYCLE UNTIL WE KILL THIS PACKAGE
... ...
@@ -18,3 +23,45 @@ var OldestVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
18 18
 // choose to prefer the latter items in the list over the former items when presented
19 19
 // with a set of versions to choose.
20 20
 var Versions = []unversioned.GroupVersion{unversioned.GroupVersion{Group: "", Version: "v1"}}
21
+
22
+var Codec = serializer.NewCodecFactory(configapi.Scheme).LegacyCodec(unversioned.GroupVersion{Group: "", Version: "v1"})
23
+
24
+// func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, error) {
25
+// 	switch version {
26
+// 	case unversioned.GroupVersion{Group: "", Version: "v1"}:
27
+// 		return &meta.VersionInterfaces{
28
+// 			ObjectConvertor:  kapi.Scheme,
29
+// 			MetadataAccessor: accessor,
30
+// 		}, nil
31
+
32
+// 	default:
33
+// 		return nil, fmt.Errorf("unsupported storage version: %s", version)
34
+// 	}
35
+// }
36
+
37
+// func NewRESTMapper(externalVersions []unversioned.GroupVersion) meta.RESTMapper {
38
+// 	rootScoped := sets.NewString()
39
+// 	ignoredKinds := sets.NewString()
40
+
41
+// 	mapper := meta.NewDefaultRESTMapper(defaultGroupVersions, interfacesFunc)
42
+// 	// enumerate all supported versions, get the kinds, and register with the mapper how to address
43
+// 	// our resources.
44
+// 	for _, gv := range defaultGroupVersions {
45
+// 		for kind, oType := range Scheme.KnownTypes(gv) {
46
+// 			gvk := gv.WithKind(kind)
47
+// 			// TODO: Remove import path prefix check.
48
+// 			// We check the import path prefix because we currently stuff both "api" and "extensions" objects
49
+// 			// into the same group within Scheme since Scheme has no notion of groups yet.
50
+// 			if !strings.HasPrefix(oType.PkgPath(), importPathPrefix) || ignoredKinds.Has(kind) {
51
+// 				continue
52
+// 			}
53
+// 			scope := meta.RESTScopeNamespace
54
+// 			if rootScoped.Has(kind) {
55
+// 				scope = meta.RESTScopeRoot
56
+// 			}
57
+// 			mapper.Add(gvk, scope, false)
58
+// 		}
59
+// 	}
60
+
61
+// 	return kapi.NewDefaultRESTMapper(Versions, interfacesFor, importPrefix, ignoredKinds, rootScoped)
62
+// }
... ...
@@ -5,6 +5,8 @@ import (
5 5
 	"k8s.io/kubernetes/pkg/runtime"
6 6
 )
7 7
 
8
+var Scheme = runtime.NewScheme()
9
+
8 10
 const GroupName = ""
9 11
 
10 12
 // SchemeGroupVersion is group version used to register these objects
... ...
@@ -1,12 +1,11 @@
1 1
 package v1
2 2
 
3 3
 import (
4
-	kapi "k8s.io/kubernetes/pkg/api"
5 4
 	"k8s.io/kubernetes/pkg/conversion"
6 5
 	"k8s.io/kubernetes/pkg/runtime"
6
+	"k8s.io/kubernetes/pkg/runtime/serializer"
7 7
 	"k8s.io/kubernetes/pkg/util/sets"
8 8
 
9
-	"github.com/openshift/origin/pkg/api"
10 9
 	internal "github.com/openshift/origin/pkg/cmd/server/api"
11 10
 	"github.com/openshift/origin/pkg/cmd/server/bootstrappolicy"
12 11
 )
... ...
@@ -260,7 +259,7 @@ func addConversionFuncs(scheme *runtime.Scheme) {
260 260
 			return nil
261 261
 		},
262 262
 		func(in *internal.IdentityProvider, out *IdentityProvider, s conversion.Scope) error {
263
-			if err := api.Convert_runtime_Object_To_runtime_RawExtension(in.Provider, &out.Provider, s); err != nil {
263
+			if err := convert_runtime_Object_To_runtime_RawExtension(in.Provider, &out.Provider, s); err != nil {
264 264
 				return err
265 265
 			}
266 266
 			out.Name = in.Name
... ...
@@ -270,12 +269,12 @@ func addConversionFuncs(scheme *runtime.Scheme) {
270 270
 			return nil
271 271
 		},
272 272
 		func(in *IdentityProvider, out *internal.IdentityProvider, s conversion.Scope) error {
273
-			if err := api.Convert_runtime_RawExtension_To_runtime_Object(&in.Provider, out.Provider, s); err != nil {
273
+			if err := convert_runtime_RawExtension_To_runtime_Object(&in.Provider, out.Provider, s); err != nil {
274 274
 				return err
275 275
 			}
276 276
 			if in.Provider.Object != nil {
277 277
 				var err error
278
-				out.Provider, err = kapi.Scheme.ConvertToVersion(in.Provider.Object, internal.SchemeGroupVersion.String())
278
+				out.Provider, err = internal.Scheme.ConvertToVersion(in.Provider.Object, internal.SchemeGroupVersion.String())
279 279
 				if err != nil {
280 280
 					return err
281 281
 				}
... ...
@@ -287,19 +286,19 @@ func addConversionFuncs(scheme *runtime.Scheme) {
287 287
 			return nil
288 288
 		},
289 289
 		func(in *internal.AdmissionPluginConfig, out *AdmissionPluginConfig, s conversion.Scope) error {
290
-			if err := api.Convert_runtime_Object_To_runtime_RawExtension(in.Configuration, &out.Configuration, s); err != nil {
290
+			if err := convert_runtime_Object_To_runtime_RawExtension(in.Configuration, &out.Configuration, s); err != nil {
291 291
 				return err
292 292
 			}
293 293
 			out.Location = in.Location
294 294
 			return nil
295 295
 		},
296 296
 		func(in *AdmissionPluginConfig, out *internal.AdmissionPluginConfig, s conversion.Scope) error {
297
-			if err := api.Convert_runtime_RawExtension_To_runtime_Object(&in.Configuration, out.Configuration, s); err != nil {
297
+			if err := convert_runtime_RawExtension_To_runtime_Object(&in.Configuration, out.Configuration, s); err != nil {
298 298
 				return err
299 299
 			}
300 300
 			if in.Configuration.Object != nil {
301 301
 				var err error
302
-				out.Configuration, err = kapi.Scheme.ConvertToVersion(in.Configuration.Object, internal.SchemeGroupVersion.String())
302
+				out.Configuration, err = internal.Scheme.ConvertToVersion(in.Configuration.Object, internal.SchemeGroupVersion.String())
303 303
 				if err != nil {
304 304
 					return err
305 305
 				}
... ...
@@ -313,3 +312,53 @@ func addConversionFuncs(scheme *runtime.Scheme) {
313 313
 		panic(err)
314 314
 	}
315 315
 }
316
+
317
+var codec = serializer.NewCodecFactory(internal.Scheme).LegacyCodec(SchemeGroupVersion)
318
+
319
+// Convert_runtime_Object_To_runtime_RawExtension is conversion function that assumes that the runtime.Object you've embedded is in
320
+// the same GroupVersion that your containing type is in.  This is signficantly better than simply breaking.
321
+// Given an ordered list of preferred external versions for a given encode or conversion call, the behavior of this function could be
322
+// made generic, predictable, and controllable.
323
+func convert_runtime_Object_To_runtime_RawExtension(in runtime.Object, out *runtime.RawExtension, s conversion.Scope) error {
324
+	if in == nil {
325
+		return nil
326
+	}
327
+
328
+	externalObject, err := internal.Scheme.ConvertToVersion(in, s.Meta().DestVersion)
329
+	if err != nil {
330
+		return err
331
+	}
332
+
333
+	bytes, err := runtime.Encode(codec, externalObject)
334
+	if err != nil {
335
+		return err
336
+	}
337
+
338
+	out.RawJSON = bytes
339
+	out.Object = externalObject
340
+
341
+	return nil
342
+}
343
+
344
+// Convert_runtime_RawExtension_To_runtime_Object well, this is the reason why there was runtime.Embedded.  The `out` here is hopeless.
345
+// The caller doesn't know the type ahead of time and that means this method can't communicate the return value.  This sucks really badly.
346
+// I'm going to set the `in.Object` field can have callers to this function do magic to pull it back out.  I'm also going to bitch about it.
347
+func convert_runtime_RawExtension_To_runtime_Object(in *runtime.RawExtension, out runtime.Object, s conversion.Scope) error {
348
+	if in == nil || len(in.RawJSON) == 0 || in.Object != nil {
349
+		return nil
350
+	}
351
+
352
+	decodedObject, err := runtime.Decode(codec, in.RawJSON)
353
+	if err != nil {
354
+		return err
355
+	}
356
+
357
+	internalObject, err := internal.Scheme.ConvertToVersion(decodedObject, s.Meta().DestVersion)
358
+	if err != nil {
359
+		return err
360
+	}
361
+
362
+	in.Object = internalObject
363
+
364
+	return nil
365
+}
... ...
@@ -9,7 +9,6 @@ import (
9 9
 
10 10
 	"github.com/spf13/pflag"
11 11
 
12
-	kapi "k8s.io/kubernetes/pkg/api"
13 12
 	"k8s.io/kubernetes/pkg/api/unversioned"
14 13
 	"k8s.io/kubernetes/pkg/master/ports"
15 14
 	"k8s.io/kubernetes/pkg/registry/service/ipallocator"
... ...
@@ -628,11 +627,11 @@ func getPort(theURL url.URL) int {
628 628
 
629 629
 // applyDefaults roundtrips the config to v1 and back to ensure proper defaults are set.
630 630
 func applyDefaults(config runtime.Object, version unversioned.GroupVersion) (runtime.Object, error) {
631
-	ext, err := kapi.Scheme.ConvertToVersion(config, version.String())
631
+	ext, err := configapi.Scheme.ConvertToVersion(config, version.String())
632 632
 	if err != nil {
633 633
 		return nil, err
634 634
 	}
635
-	return kapi.Scheme.ConvertToVersion(ext, configapi.SchemeGroupVersion.String())
635
+	return configapi.Scheme.ConvertToVersion(ext, configapi.SchemeGroupVersion.String())
636 636
 }
637 637
 
638 638
 func servingInfoForAddr(addr *flagtypes.Addr) configapi.ServingInfo {
... ...
@@ -239,6 +239,7 @@ func (o MasterOptions) RunMaster() error {
239 239
 
240 240
 		content, err := configapilatest.WriteYAML(masterConfig)
241 241
 		if err != nil {
242
+
242 243
 			return err
243 244
 		}
244 245
 
... ...
@@ -1,23 +1,17 @@
1 1
 package install
2 2
 
3 3
 import (
4
-	"fmt"
5
-
6 4
 	"github.com/golang/glog"
7 5
 
8
-	kapi "k8s.io/kubernetes/pkg/api"
9 6
 	"k8s.io/kubernetes/pkg/api/meta"
10 7
 	"k8s.io/kubernetes/pkg/api/unversioned"
11
-	"k8s.io/kubernetes/pkg/apimachinery"
12
-	"k8s.io/kubernetes/pkg/apimachinery/registered"
13
-	"k8s.io/kubernetes/pkg/runtime"
14
-	"k8s.io/kubernetes/pkg/util/sets"
15 8
 
9
+	configapi "github.com/openshift/origin/pkg/cmd/server/api"
16 10
 	"github.com/openshift/origin/pkg/project/admission/requestlimit/api"
17 11
 	"github.com/openshift/origin/pkg/project/admission/requestlimit/api/v1"
18 12
 )
19 13
 
20
-const importPrefix = "github.com/openshift/origin/pkg/project/admission/requestlimit"
14
+const importPrefix = "github.com/openshift/origin/pkg/project/admission/requestlimit/api"
21 15
 
22 16
 var accessor = meta.NewAccessor()
23 17
 
... ...
@@ -25,22 +19,7 @@ var accessor = meta.NewAccessor()
25 25
 var availableVersions = []unversioned.GroupVersion{v1.SchemeGroupVersion}
26 26
 
27 27
 func init() {
28
-	registered.RegisterVersions(availableVersions)
29
-	externalVersions := []unversioned.GroupVersion{}
30
-	for _, v := range availableVersions {
31
-		if registered.IsAllowedVersion(v) {
32
-			externalVersions = append(externalVersions, v)
33
-		}
34
-	}
35
-	if len(externalVersions) == 0 {
36
-		glog.Infof("No version is registered for group %v", api.GroupName)
37
-		return
38
-	}
39
-
40
-	if err := registered.EnableVersions(externalVersions...); err != nil {
41
-		panic(err)
42
-	}
43
-	if err := enableVersions(externalVersions); err != nil {
28
+	if err := enableVersions(availableVersions); err != nil {
44 29
 		panic(err)
45 30
 	}
46 31
 }
... ...
@@ -51,35 +30,17 @@ func init() {
51 51
 // registered.RegisterGroup once we have moved enableVersions there.
52 52
 func enableVersions(externalVersions []unversioned.GroupVersion) error {
53 53
 	addVersionsToScheme(externalVersions...)
54
-	preferredExternalVersion := externalVersions[0]
55
-
56
-	groupMeta := apimachinery.GroupMeta{
57
-		GroupVersion:  preferredExternalVersion,
58
-		GroupVersions: externalVersions,
59
-		RESTMapper:    newRESTMapper(externalVersions),
60
-		SelfLinker:    runtime.SelfLinker(accessor),
61
-		InterfacesFor: interfacesFor,
62
-	}
63
-
64
-	if err := registered.RegisterGroup(groupMeta); err != nil {
65
-		return err
66
-	}
67
-	kapi.RegisterRESTMapper(groupMeta.RESTMapper)
68 54
 	return nil
69 55
 }
70 56
 
71 57
 func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) {
72 58
 	// add the internal version to Scheme
73
-	api.AddToScheme(kapi.Scheme)
59
+	api.AddToScheme(configapi.Scheme)
74 60
 	// add the enabled external versions to Scheme
75 61
 	for _, v := range externalVersions {
76
-		if !registered.IsEnabledVersion(v) {
77
-			glog.Errorf("Version %s is not enabled, so it will not be added to the Scheme.", v)
78
-			continue
79
-		}
80 62
 		switch v {
81 63
 		case v1.SchemeGroupVersion:
82
-			v1.AddToScheme(kapi.Scheme)
64
+			v1.AddToScheme(configapi.Scheme)
83 65
 
84 66
 		default:
85 67
 			glog.Errorf("Version %s is not known, so it will not be added to the Scheme.", v)
... ...
@@ -87,23 +48,3 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) {
87 87
 		}
88 88
 	}
89 89
 }
90
-
91
-func newRESTMapper(externalVersions []unversioned.GroupVersion) meta.RESTMapper {
92
-	rootScoped := sets.NewString()
93
-	ignoredKinds := sets.NewString()
94
-	return kapi.NewDefaultRESTMapper(externalVersions, interfacesFor, importPrefix, ignoredKinds, rootScoped)
95
-}
96
-
97
-func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, error) {
98
-	switch version {
99
-	case v1.SchemeGroupVersion:
100
-		return &meta.VersionInterfaces{
101
-			ObjectConvertor:  kapi.Scheme,
102
-			MetadataAccessor: accessor,
103
-		}, nil
104
-
105
-	default:
106
-		g, _ := registered.Group(api.GroupName)
107
-		return nil, fmt.Errorf("unsupported storage version: %s (valid: %v)", version, g.GroupVersions)
108
-	}
109
-}