mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 22:17:14 +00:00
Switch API objects to not register per version codecs
Remove Codec from versionInterfaces in meta (RESTMapper is now agnostic to codec and serialization). Register api/latest.Codecs as the codec factory and use latest.Codecs.LegacyCodec(version) as an equvialent to the previous codec.
This commit is contained in:
parent
125ef6fbc8
commit
c1d932e44a
@ -68,7 +68,6 @@ func enableVersions(externalVersions []unversioned.GroupVersion) error {
|
|||||||
groupMeta := apimachinery.GroupMeta{
|
groupMeta := apimachinery.GroupMeta{
|
||||||
GroupVersion: preferredExternalVersion,
|
GroupVersion: preferredExternalVersion,
|
||||||
GroupVersions: externalVersions,
|
GroupVersions: externalVersions,
|
||||||
Codec: runtime.CodecFor(api.Scheme, preferredExternalVersion),
|
|
||||||
RESTMapper: newRESTMapper(externalVersions),
|
RESTMapper: newRESTMapper(externalVersions),
|
||||||
SelfLinker: runtime.SelfLinker(accessor),
|
SelfLinker: runtime.SelfLinker(accessor),
|
||||||
InterfacesFor: interfacesFor,
|
InterfacesFor: interfacesFor,
|
||||||
@ -97,7 +96,6 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e
|
|||||||
switch version {
|
switch version {
|
||||||
case v1.SchemeGroupVersion:
|
case v1.SchemeGroupVersion:
|
||||||
return &meta.VersionInterfaces{
|
return &meta.VersionInterfaces{
|
||||||
Codec: v1.Codec,
|
|
||||||
ObjectConvertor: api.Scheme,
|
ObjectConvertor: api.Scheme,
|
||||||
MetadataAccessor: accessor,
|
MetadataAccessor: accessor,
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -22,7 +22,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: "testgroup", Version: ""}
|
var SchemeGroupVersion = unversioned.GroupVersion{Group: "testgroup", Version: runtime.APIVersionInternal}
|
||||||
|
|
||||||
func AddToScheme(scheme *runtime.Scheme) {
|
func AddToScheme(scheme *runtime.Scheme) {
|
||||||
// Add the API to Scheme.
|
// Add the API to Scheme.
|
||||||
|
@ -17,7 +17,6 @@ limitations under the License.
|
|||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
@ -25,8 +24,6 @@ import (
|
|||||||
|
|
||||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: "testgroup", Version: "v1"}
|
var SchemeGroupVersion = unversioned.GroupVersion{Group: "testgroup", Version: "v1"}
|
||||||
|
|
||||||
var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion)
|
|
||||||
|
|
||||||
func AddToScheme(scheme *runtime.Scheme) {
|
func AddToScheme(scheme *runtime.Scheme) {
|
||||||
// Add the API to Scheme.
|
// Add the API to Scheme.
|
||||||
addKnownTypes(scheme)
|
addKnownTypes(scheme)
|
||||||
|
@ -22,14 +22,9 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/conversion"
|
"k8s.io/kubernetes/pkg/conversion"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
|
||||||
"k8s.io/kubernetes/pkg/util/intstr"
|
"k8s.io/kubernetes/pkg/util/intstr"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Codec is the identity codec for this package - it can only convert itself
|
|
||||||
// to itself.
|
|
||||||
var Codec = runtime.CodecFor(Scheme, unversioned.GroupVersion{})
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Scheme.AddDefaultingFuncs(
|
Scheme.AddDefaultingFuncs(
|
||||||
func(obj *ListOptions) {
|
func(obj *ListOptions) {
|
||||||
|
@ -22,6 +22,7 @@ import (
|
|||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
func BenchmarkPodConversion(b *testing.B) {
|
func BenchmarkPodConversion(b *testing.B) {
|
||||||
@ -30,7 +31,7 @@ func BenchmarkPodConversion(b *testing.B) {
|
|||||||
b.Fatalf("Unexpected error while reading file: %v", err)
|
b.Fatalf("Unexpected error while reading file: %v", err)
|
||||||
}
|
}
|
||||||
var pod api.Pod
|
var pod api.Pod
|
||||||
if err := api.Scheme.DecodeInto(data, &pod); err != nil {
|
if err := runtime.DecodeInto(testapi.Default.Codec(), data, &pod); err != nil {
|
||||||
b.Fatalf("Unexpected error decoding pod: %v", err)
|
b.Fatalf("Unexpected error decoding pod: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,7 +42,7 @@ func BenchmarkPodConversion(b *testing.B) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
b.Fatalf("Conversion error: %v", err)
|
b.Fatalf("Conversion error: %v", err)
|
||||||
}
|
}
|
||||||
obj, err := scheme.ConvertToVersion(versionedObj, scheme.InternalVersions[testapi.Default.GroupVersion().Group].String())
|
obj, err := scheme.ConvertToVersion(versionedObj, testapi.Default.InternalGroupVersion().String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Fatalf("Conversion error: %v", err)
|
b.Fatalf("Conversion error: %v", err)
|
||||||
}
|
}
|
||||||
@ -58,7 +59,7 @@ func BenchmarkNodeConversion(b *testing.B) {
|
|||||||
b.Fatalf("Unexpected error while reading file: %v", err)
|
b.Fatalf("Unexpected error while reading file: %v", err)
|
||||||
}
|
}
|
||||||
var node api.Node
|
var node api.Node
|
||||||
if err := api.Scheme.DecodeInto(data, &node); err != nil {
|
if err := runtime.DecodeInto(testapi.Default.Codec(), data, &node); err != nil {
|
||||||
b.Fatalf("Unexpected error decoding node: %v", err)
|
b.Fatalf("Unexpected error decoding node: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +70,7 @@ func BenchmarkNodeConversion(b *testing.B) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
b.Fatalf("Conversion error: %v", err)
|
b.Fatalf("Conversion error: %v", err)
|
||||||
}
|
}
|
||||||
obj, err := scheme.ConvertToVersion(versionedObj, scheme.InternalVersions[testapi.Default.GroupVersion().Group].String())
|
obj, err := scheme.ConvertToVersion(versionedObj, testapi.Default.InternalGroupVersion().String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Fatalf("Conversion error: %v", err)
|
b.Fatalf("Conversion error: %v", err)
|
||||||
}
|
}
|
||||||
@ -86,7 +87,7 @@ func BenchmarkReplicationControllerConversion(b *testing.B) {
|
|||||||
b.Fatalf("Unexpected error while reading file: %v", err)
|
b.Fatalf("Unexpected error while reading file: %v", err)
|
||||||
}
|
}
|
||||||
var replicationController api.ReplicationController
|
var replicationController api.ReplicationController
|
||||||
if err := api.Scheme.DecodeInto(data, &replicationController); err != nil {
|
if err := runtime.DecodeInto(testapi.Default.Codec(), data, &replicationController); err != nil {
|
||||||
b.Fatalf("Unexpected error decoding node: %v", err)
|
b.Fatalf("Unexpected error decoding node: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,7 +98,7 @@ func BenchmarkReplicationControllerConversion(b *testing.B) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
b.Fatalf("Conversion error: %v", err)
|
b.Fatalf("Conversion error: %v", err)
|
||||||
}
|
}
|
||||||
obj, err := scheme.ConvertToVersion(versionedObj, scheme.InternalVersions[testapi.Default.GroupVersion().Group].String())
|
obj, err := scheme.ConvertToVersion(versionedObj, testapi.Default.InternalGroupVersion().String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Fatalf("Conversion error: %v", err)
|
b.Fatalf("Conversion error: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ func doDeepCopyTest(t *testing.T, kind unversioned.GroupVersionKind, f *fuzz.Fuz
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !reflect.DeepEqual(item, itemCopy) {
|
if !reflect.DeepEqual(item, itemCopy) {
|
||||||
t.Errorf("\nexpected: %#v\n\ngot: %#v\n\ndiff: %v", item, itemCopy, util.ObjectDiff(item, itemCopy))
|
t.Errorf("\nexpected: %#v\n\ngot: %#v\n\ndiff: %v", item, itemCopy, util.ObjectGoPrintSideBySide(item, itemCopy))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,6 +21,8 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
func BenchmarkPodCopy(b *testing.B) {
|
func BenchmarkPodCopy(b *testing.B) {
|
||||||
@ -29,7 +31,7 @@ func BenchmarkPodCopy(b *testing.B) {
|
|||||||
b.Fatalf("Unexpected error while reading file: %v", err)
|
b.Fatalf("Unexpected error while reading file: %v", err)
|
||||||
}
|
}
|
||||||
var pod api.Pod
|
var pod api.Pod
|
||||||
if err := api.Scheme.DecodeInto(data, &pod); err != nil {
|
if err := runtime.DecodeInto(testapi.Default.Codec(), data, &pod); err != nil {
|
||||||
b.Fatalf("Unexpected error decoding pod: %v", err)
|
b.Fatalf("Unexpected error decoding pod: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,7 +54,7 @@ func BenchmarkNodeCopy(b *testing.B) {
|
|||||||
b.Fatalf("Unexpected error while reading file: %v", err)
|
b.Fatalf("Unexpected error while reading file: %v", err)
|
||||||
}
|
}
|
||||||
var node api.Node
|
var node api.Node
|
||||||
if err := api.Scheme.DecodeInto(data, &node); err != nil {
|
if err := runtime.DecodeInto(testapi.Default.Codec(), data, &node); err != nil {
|
||||||
b.Fatalf("Unexpected error decoding node: %v", err)
|
b.Fatalf("Unexpected error decoding node: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,7 +77,7 @@ func BenchmarkReplicationControllerCopy(b *testing.B) {
|
|||||||
b.Fatalf("Unexpected error while reading file: %v", err)
|
b.Fatalf("Unexpected error while reading file: %v", err)
|
||||||
}
|
}
|
||||||
var replicationController api.ReplicationController
|
var replicationController api.ReplicationController
|
||||||
if err := api.Scheme.DecodeInto(data, &replicationController); err != nil {
|
if err := runtime.DecodeInto(testapi.Default.Codec(), data, &replicationController); err != nil {
|
||||||
b.Fatalf("Unexpected error decoding node: %v", err)
|
b.Fatalf("Unexpected error decoding node: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,14 +24,13 @@ import (
|
|||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apimachinery"
|
|
||||||
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
|
||||||
"k8s.io/kubernetes/pkg/util/sets"
|
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/apimachinery"
|
||||||
|
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
const importPrefix = "k8s.io/kubernetes/pkg/api"
|
const importPrefix = "k8s.io/kubernetes/pkg/api"
|
||||||
@ -75,7 +74,6 @@ func enableVersions(externalVersions []unversioned.GroupVersion) error {
|
|||||||
groupMeta := apimachinery.GroupMeta{
|
groupMeta := apimachinery.GroupMeta{
|
||||||
GroupVersion: preferredExternalVersion,
|
GroupVersion: preferredExternalVersion,
|
||||||
GroupVersions: externalVersions,
|
GroupVersions: externalVersions,
|
||||||
Codec: runtime.CodecFor(api.Scheme, preferredExternalVersion),
|
|
||||||
RESTMapper: newRESTMapper(externalVersions),
|
RESTMapper: newRESTMapper(externalVersions),
|
||||||
SelfLinker: runtime.SelfLinker(accessor),
|
SelfLinker: runtime.SelfLinker(accessor),
|
||||||
InterfacesFor: interfacesFor,
|
InterfacesFor: interfacesFor,
|
||||||
@ -127,7 +125,6 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e
|
|||||||
switch version {
|
switch version {
|
||||||
case v1.SchemeGroupVersion:
|
case v1.SchemeGroupVersion:
|
||||||
return &meta.VersionInterfaces{
|
return &meta.VersionInterfaces{
|
||||||
Codec: v1.Codec,
|
|
||||||
ObjectConvertor: api.Scheme,
|
ObjectConvertor: api.Scheme,
|
||||||
MetadataAccessor: accessor,
|
MetadataAccessor: accessor,
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -18,11 +18,13 @@ package install
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
internal "k8s.io/kubernetes/pkg/api"
|
internal "k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestResourceVersioner(t *testing.T) {
|
func TestResourceVersioner(t *testing.T) {
|
||||||
@ -49,7 +51,7 @@ func TestCodec(t *testing.T) {
|
|||||||
pod := internal.Pod{}
|
pod := internal.Pod{}
|
||||||
// We do want to use package registered rather than testapi here, because we
|
// We do want to use package registered rather than testapi here, because we
|
||||||
// want to test if the package install and package registered work as expected.
|
// want to test if the package install and package registered work as expected.
|
||||||
data, err := registered.GroupOrDie(internal.GroupName).Codec.Encode(&pod)
|
data, err := runtime.Encode(internal.Codecs.LegacyCodec(registered.GroupOrDie(internal.GroupName).GroupVersion), &pod)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected error: %v", err)
|
t.Fatalf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
@ -100,8 +102,8 @@ func TestRESTMapper(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interfaces, _ := registered.GroupOrDie(internal.GroupName).InterfacesFor(version)
|
interfaces, _ := registered.GroupOrDie(internal.GroupName).InterfacesFor(version)
|
||||||
if mapping.Codec != interfaces.Codec {
|
if mapping.ObjectConvertor != interfaces.ObjectConvertor {
|
||||||
t.Errorf("unexpected codec: %#v, expected: %#v", mapping, interfaces)
|
t.Errorf("unexpected: %#v, expected: %#v", mapping, interfaces)
|
||||||
}
|
}
|
||||||
|
|
||||||
rc := &internal.ReplicationController{ObjectMeta: internal.ObjectMeta{Name: "foo"}}
|
rc := &internal.ReplicationController{ObjectMeta: internal.ObjectMeta{Name: "foo"}}
|
||||||
@ -114,3 +116,14 @@ func TestRESTMapper(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUnversioned(t *testing.T) {
|
||||||
|
for _, obj := range []runtime.Object{
|
||||||
|
&unversioned.Status{},
|
||||||
|
&unversioned.ExportOptions{},
|
||||||
|
} {
|
||||||
|
if unversioned, ok := internal.Scheme.IsUnversioned(obj); !unversioned || !ok {
|
||||||
|
t.Errorf("%v is expected to be unversioned", reflect.TypeOf(obj))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -120,7 +120,7 @@ func SetList(list runtime.Object, objects []runtime.Object) error {
|
|||||||
} else if src.Type().ConvertibleTo(dest.Type()) {
|
} else if src.Type().ConvertibleTo(dest.Type()) {
|
||||||
dest.Set(src.Convert(dest.Type()))
|
dest.Set(src.Convert(dest.Type()))
|
||||||
} else {
|
} else {
|
||||||
return fmt.Errorf("item[%d]: Type mismatch: Expected %v, got %v", i, dest.Type(), src.Type())
|
return fmt.Errorf("item[%d]: can't assign or convert %v into %v", i, src.Type(), dest.Type())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
items.Set(slice)
|
items.Set(slice)
|
||||||
|
@ -24,7 +24,6 @@ import (
|
|||||||
|
|
||||||
// VersionInterfaces contains the interfaces one should use for dealing with types of a particular version.
|
// VersionInterfaces contains the interfaces one should use for dealing with types of a particular version.
|
||||||
type VersionInterfaces struct {
|
type VersionInterfaces struct {
|
||||||
runtime.Codec
|
|
||||||
runtime.ObjectConvertor
|
runtime.ObjectConvertor
|
||||||
MetadataAccessor
|
MetadataAccessor
|
||||||
}
|
}
|
||||||
@ -142,7 +141,6 @@ type RESTMapping struct {
|
|||||||
// Scope contains the information needed to deal with REST Resources that are in a resource hierarchy
|
// Scope contains the information needed to deal with REST Resources that are in a resource hierarchy
|
||||||
Scope RESTScope
|
Scope RESTScope
|
||||||
|
|
||||||
runtime.Codec
|
|
||||||
runtime.ObjectConvertor
|
runtime.ObjectConvertor
|
||||||
MetadataAccessor
|
MetadataAccessor
|
||||||
}
|
}
|
||||||
|
@ -73,7 +73,7 @@ func TestAPIObjectMeta(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected error: %v", err)
|
t.Fatalf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
if e, a := "/a", typeAccessor.GetAPIVersion(); e != a {
|
if e, a := "a", typeAccessor.GetAPIVersion(); e != a {
|
||||||
t.Errorf("expected %v, got %v", e, a)
|
t.Errorf("expected %v, got %v", e, a)
|
||||||
}
|
}
|
||||||
if e, a := "b", typeAccessor.GetKind(); e != a {
|
if e, a := "b", typeAccessor.GetKind(); e != a {
|
||||||
@ -102,7 +102,7 @@ func TestAPIObjectMeta(t *testing.T) {
|
|||||||
if e, a := types.UID("other"), j.UID; e != a {
|
if e, a := types.UID("other"), j.UID; e != a {
|
||||||
t.Errorf("expected %v, got %v", e, a)
|
t.Errorf("expected %v, got %v", e, a)
|
||||||
}
|
}
|
||||||
if e, a := "/c", j.APIVersion; e != a {
|
if e, a := "c", j.APIVersion; e != a {
|
||||||
t.Errorf("expected %v, got %v", e, a)
|
t.Errorf("expected %v, got %v", e, a)
|
||||||
}
|
}
|
||||||
if e, a := "d", j.Kind; e != a {
|
if e, a := "d", j.Kind; e != a {
|
||||||
@ -117,7 +117,7 @@ func TestAPIObjectMeta(t *testing.T) {
|
|||||||
|
|
||||||
typeAccessor.SetAPIVersion("d")
|
typeAccessor.SetAPIVersion("d")
|
||||||
typeAccessor.SetKind("e")
|
typeAccessor.SetKind("e")
|
||||||
if e, a := "/d", j.APIVersion; e != a {
|
if e, a := "d", j.APIVersion; e != a {
|
||||||
t.Errorf("expected %v, got %v", e, a)
|
t.Errorf("expected %v, got %v", e, a)
|
||||||
}
|
}
|
||||||
if e, a := "e", j.Kind; e != a {
|
if e, a := "e", j.Kind; e != a {
|
||||||
@ -308,7 +308,7 @@ func TestGenericTypeMetaAccessor(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
if e, a := "/a", apiVersion; e != a {
|
if e, a := "a", apiVersion; e != a {
|
||||||
t.Errorf("expected %v, got %v", e, a)
|
t.Errorf("expected %v, got %v", e, a)
|
||||||
}
|
}
|
||||||
kind, err := accessor.Kind(j)
|
kind, err := accessor.Kind(j)
|
||||||
@ -392,7 +392,7 @@ func TestGenericTypeMetaAccessor(t *testing.T) {
|
|||||||
if e, a := "other", j.TypeMeta.UID; e != a {
|
if e, a := "other", j.TypeMeta.UID; e != a {
|
||||||
t.Errorf("expected %v, got %v", e, a)
|
t.Errorf("expected %v, got %v", e, a)
|
||||||
}
|
}
|
||||||
if e, a := "/c", j.TypeMeta.APIVersion; e != a {
|
if e, a := "c", j.TypeMeta.APIVersion; e != a {
|
||||||
t.Errorf("expected %v, got %v", e, a)
|
t.Errorf("expected %v, got %v", e, a)
|
||||||
}
|
}
|
||||||
if e, a := "d", j.TypeMeta.Kind; e != a {
|
if e, a := "d", j.TypeMeta.Kind; e != a {
|
||||||
@ -757,7 +757,7 @@ func BenchmarkAccessorSetReflection(b *testing.B) {
|
|||||||
Name: "foo",
|
Name: "foo",
|
||||||
GenerateName: "prefix",
|
GenerateName: "prefix",
|
||||||
UID: "uid",
|
UID: "uid",
|
||||||
APIVersion: "/a",
|
APIVersion: "a",
|
||||||
Kind: "b",
|
Kind: "b",
|
||||||
ResourceVersion: "1",
|
ResourceVersion: "1",
|
||||||
SelfLink: "some/place/only/we/know",
|
SelfLink: "some/place/only/we/know",
|
||||||
|
@ -23,6 +23,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util/sets"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -84,7 +85,7 @@ type DefaultRESTMapper struct {
|
|||||||
|
|
||||||
var _ RESTMapper = &DefaultRESTMapper{}
|
var _ RESTMapper = &DefaultRESTMapper{}
|
||||||
|
|
||||||
// VersionInterfacesFunc returns the appropriate codec, typer, and metadata accessor for a
|
// VersionInterfacesFunc returns the appropriate typer, and metadata accessor for a
|
||||||
// given api version, or an error if no such api version exists.
|
// given api version, or an error if no such api version exists.
|
||||||
type VersionInterfacesFunc func(version unversioned.GroupVersion) (*VersionInterfaces, error)
|
type VersionInterfacesFunc func(version unversioned.GroupVersion) (*VersionInterfaces, error)
|
||||||
|
|
||||||
@ -92,7 +93,7 @@ type VersionInterfacesFunc func(version unversioned.GroupVersion) (*VersionInter
|
|||||||
// to a resource name and back based on the objects in a runtime.Scheme
|
// to a resource name and back based on the objects in a runtime.Scheme
|
||||||
// and the Kubernetes API conventions. Takes a group name, a priority list of the versions
|
// and the Kubernetes API conventions. Takes a group name, a priority list of the versions
|
||||||
// to search when an object has no default version (set empty to return an error),
|
// to search when an object has no default version (set empty to return an error),
|
||||||
// and a function that retrieves the correct codec and metadata for a given version.
|
// and a function that retrieves the correct metadata for a given version.
|
||||||
func NewDefaultRESTMapper(defaultGroupVersions []unversioned.GroupVersion, f VersionInterfacesFunc) *DefaultRESTMapper {
|
func NewDefaultRESTMapper(defaultGroupVersions []unversioned.GroupVersion, f VersionInterfacesFunc) *DefaultRESTMapper {
|
||||||
resourceToKind := make(map[unversioned.GroupVersionResource]unversioned.GroupVersionKind)
|
resourceToKind := make(map[unversioned.GroupVersionResource]unversioned.GroupVersionKind)
|
||||||
kindToPluralResource := make(map[unversioned.GroupVersionKind]unversioned.GroupVersionResource)
|
kindToPluralResource := make(map[unversioned.GroupVersionKind]unversioned.GroupVersionResource)
|
||||||
@ -251,6 +252,9 @@ func (m *DefaultRESTMapper) ResourceFor(resource unversioned.GroupVersionResourc
|
|||||||
|
|
||||||
func (m *DefaultRESTMapper) KindsFor(input unversioned.GroupVersionResource) ([]unversioned.GroupVersionKind, error) {
|
func (m *DefaultRESTMapper) KindsFor(input unversioned.GroupVersionResource) ([]unversioned.GroupVersionKind, error) {
|
||||||
resource := input.GroupVersion().WithResource(strings.ToLower(input.Resource))
|
resource := input.GroupVersion().WithResource(strings.ToLower(input.Resource))
|
||||||
|
if resource.Version == runtime.APIVersionInternal {
|
||||||
|
resource.Version = ""
|
||||||
|
}
|
||||||
|
|
||||||
hasResource := len(resource.Resource) > 0
|
hasResource := len(resource.Resource) > 0
|
||||||
hasGroup := len(resource.Group) > 0
|
hasGroup := len(resource.Group) > 0
|
||||||
@ -412,7 +416,7 @@ func (m *DefaultRESTMapper) RESTMapping(gk unversioned.GroupKind, versions ...st
|
|||||||
var gvk *unversioned.GroupVersionKind
|
var gvk *unversioned.GroupVersionKind
|
||||||
hadVersion := false
|
hadVersion := false
|
||||||
for _, version := range versions {
|
for _, version := range versions {
|
||||||
if len(version) == 0 {
|
if len(version) == 0 || version == runtime.APIVersionInternal {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -472,7 +476,6 @@ func (m *DefaultRESTMapper) RESTMapping(gk unversioned.GroupKind, versions ...st
|
|||||||
GroupVersionKind: *gvk,
|
GroupVersionKind: *gvk,
|
||||||
Scope: scope,
|
Scope: scope,
|
||||||
|
|
||||||
Codec: interfaces.Codec,
|
|
||||||
ObjectConvertor: interfaces.ObjectConvertor,
|
ObjectConvertor: interfaces.ObjectConvertor,
|
||||||
MetadataAccessor: interfaces.MetadataAccessor,
|
MetadataAccessor: interfaces.MetadataAccessor,
|
||||||
}
|
}
|
||||||
|
@ -18,8 +18,6 @@ package meta
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
|
||||||
"net/url"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
@ -28,38 +26,6 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
type fakeCodec struct{}
|
|
||||||
|
|
||||||
var _ runtime.Decoder = fakeCodec{}
|
|
||||||
|
|
||||||
func (fakeCodec) Encode(runtime.Object) ([]byte, error) {
|
|
||||||
return []byte{}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fakeCodec) EncodeToStream(runtime.Object, io.Writer) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fakeCodec) Decode([]byte) (runtime.Object, error) {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fakeCodec) DecodeToVersion([]byte, unversioned.GroupVersion) (runtime.Object, error) {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fakeCodec) DecodeInto([]byte, runtime.Object) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fakeCodec) DecodeIntoWithSpecifiedVersionKind([]byte, runtime.Object, unversioned.GroupVersionKind) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fakeCodec) DecodeParametersInto(parameters url.Values, obj runtime.Object) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type fakeConvertor struct{}
|
type fakeConvertor struct{}
|
||||||
|
|
||||||
func (fakeConvertor) Convert(in, out interface{}) error {
|
func (fakeConvertor) Convert(in, out interface{}) error {
|
||||||
@ -74,12 +40,11 @@ func (fakeConvertor) ConvertFieldLabel(version, kind, label, value string) (stri
|
|||||||
return label, value, nil
|
return label, value, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var validCodec = fakeCodec{}
|
|
||||||
var validAccessor = resourceAccessor{}
|
var validAccessor = resourceAccessor{}
|
||||||
var validConvertor = fakeConvertor{}
|
var validConvertor = fakeConvertor{}
|
||||||
|
|
||||||
func fakeInterfaces(version unversioned.GroupVersion) (*VersionInterfaces, error) {
|
func fakeInterfaces(version unversioned.GroupVersion) (*VersionInterfaces, error) {
|
||||||
return &VersionInterfaces{Codec: validCodec, ObjectConvertor: validConvertor, MetadataAccessor: validAccessor}, nil
|
return &VersionInterfaces{ObjectConvertor: validConvertor, MetadataAccessor: validAccessor}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var unmatchedErr = errors.New("no version")
|
var unmatchedErr = errors.New("no version")
|
||||||
@ -512,7 +477,7 @@ func TestRESTMapperRESTMapping(t *testing.T) {
|
|||||||
t.Errorf("%d: unexpected resource: %#v", i, mapping)
|
t.Errorf("%d: unexpected resource: %#v", i, mapping)
|
||||||
}
|
}
|
||||||
|
|
||||||
if mapping.Codec == nil || mapping.MetadataAccessor == nil || mapping.ObjectConvertor == nil {
|
if mapping.MetadataAccessor == nil || mapping.ObjectConvertor == nil {
|
||||||
t.Errorf("%d: missing codec and accessor: %#v", i, mapping)
|
t.Errorf("%d: missing codec and accessor: %#v", i, mapping)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,16 +20,27 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime/serializer"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Scheme is the default instance of runtime.Scheme to which types in the Kubernetes API are already registered.
|
// Scheme is the default instance of runtime.Scheme to which types in the Kubernetes API are already registered.
|
||||||
var Scheme = runtime.NewScheme()
|
var Scheme = runtime.NewScheme()
|
||||||
|
|
||||||
|
// Codecs provides access to encoding and decoding for the scheme
|
||||||
|
var Codecs = serializer.NewCodecFactory(Scheme)
|
||||||
|
|
||||||
// GroupName is the group name use in this package
|
// GroupName is the group name use in this package
|
||||||
const GroupName = ""
|
const GroupName = ""
|
||||||
|
|
||||||
// SchemeGroupVersion is group version used to register these objects
|
// SchemeGroupVersion is group version used to register these objects
|
||||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: ""}
|
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal}
|
||||||
|
|
||||||
|
// Unversiond is group version for unversioned API objects
|
||||||
|
// TODO: this should be v1 probably
|
||||||
|
var Unversioned = unversioned.GroupVersion{Group: "", Version: "v1"}
|
||||||
|
|
||||||
|
// ParameterCodec handles versioning of objects that are converted to query parameters.
|
||||||
|
var ParameterCodec = runtime.NewParameterCodec(Scheme)
|
||||||
|
|
||||||
// Kind takes an unqualified kind and returns back a Group qualified GroupKind
|
// Kind takes an unqualified kind and returns back a Group qualified GroupKind
|
||||||
func Kind(kind string) unversioned.GroupKind {
|
func Kind(kind string) unversioned.GroupKind {
|
||||||
@ -42,6 +53,9 @@ func Resource(resource string) unversioned.GroupResource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func AddToScheme(scheme *runtime.Scheme) {
|
func AddToScheme(scheme *runtime.Scheme) {
|
||||||
|
if err := Scheme.AddIgnoredConversionType(&unversioned.TypeMeta{}, &unversioned.TypeMeta{}); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
scheme.AddKnownTypes(SchemeGroupVersion,
|
scheme.AddKnownTypes(SchemeGroupVersion,
|
||||||
&Pod{},
|
&Pod{},
|
||||||
&PodList{},
|
&PodList{},
|
||||||
@ -86,14 +100,15 @@ func AddToScheme(scheme *runtime.Scheme) {
|
|||||||
&RangeAllocation{},
|
&RangeAllocation{},
|
||||||
)
|
)
|
||||||
|
|
||||||
// Add the Unversioned types to scheme.
|
// Register Unversioned types under their own special group
|
||||||
// TODO this should not be done here
|
Scheme.AddUnversionedTypes(Unversioned,
|
||||||
scheme.AddKnownTypes(SchemeGroupVersion, &unversioned.ExportOptions{})
|
&unversioned.ExportOptions{},
|
||||||
scheme.AddKnownTypes(SchemeGroupVersion, &unversioned.Status{})
|
&unversioned.Status{},
|
||||||
scheme.AddKnownTypes(SchemeGroupVersion, &unversioned.APIVersions{})
|
&unversioned.APIVersions{},
|
||||||
scheme.AddKnownTypes(SchemeGroupVersion, &unversioned.APIGroupList{})
|
&unversioned.APIGroupList{},
|
||||||
scheme.AddKnownTypes(SchemeGroupVersion, &unversioned.APIGroup{})
|
&unversioned.APIGroup{},
|
||||||
scheme.AddKnownTypes(SchemeGroupVersion, &unversioned.APIResourceList{})
|
&unversioned.APIResourceList{},
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (obj *Pod) GetObjectMeta() meta.Object { return &obj.ObjectMeta }
|
func (obj *Pod) GetObjectMeta() meta.Object { return &obj.ObjectMeta }
|
||||||
|
@ -61,6 +61,8 @@ func fuzzInternalObject(t *testing.T, forVersion unversioned.GroupVersion, item
|
|||||||
}
|
}
|
||||||
|
|
||||||
func roundTrip(t *testing.T, codec runtime.Codec, item runtime.Object) {
|
func roundTrip(t *testing.T, codec runtime.Codec, item runtime.Object) {
|
||||||
|
t.Logf("codec: %#v", codec)
|
||||||
|
|
||||||
printer := spew.ConfigState{DisableMethods: true}
|
printer := spew.ConfigState{DisableMethods: true}
|
||||||
|
|
||||||
name := reflect.TypeOf(item).Elem().Name()
|
name := reflect.TypeOf(item).Elem().Name()
|
||||||
@ -81,8 +83,7 @@ func roundTrip(t *testing.T, codec runtime.Codec, item runtime.Object) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
obj3 := reflect.New(reflect.TypeOf(item).Elem()).Interface().(runtime.Object)
|
obj3 := reflect.New(reflect.TypeOf(item).Elem()).Interface().(runtime.Object)
|
||||||
err = runtime.DecodeInto(codec, data, obj3)
|
if err := runtime.DecodeInto(codec, data, obj3); err != nil {
|
||||||
if err != nil {
|
|
||||||
t.Errorf("2: %v: %v", name, err)
|
t.Errorf("2: %v: %v", name, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -122,7 +123,7 @@ func TestSpecificKind(t *testing.T) {
|
|||||||
// api.Scheme.Log(t)
|
// api.Scheme.Log(t)
|
||||||
// defer api.Scheme.Log(nil)
|
// defer api.Scheme.Log(nil)
|
||||||
|
|
||||||
kind := "Pod"
|
kind := "List"
|
||||||
for i := 0; i < *fuzzIters; i++ {
|
for i := 0; i < *fuzzIters; i++ {
|
||||||
doRoundTripTest(kind, t)
|
doRoundTripTest(kind, t)
|
||||||
if t.Failed() {
|
if t.Failed() {
|
||||||
@ -180,7 +181,7 @@ func doRoundTripTest(kind string, t *testing.T) {
|
|||||||
roundTripSame(t, item, nonRoundTrippableTypesByVersion[kind]...)
|
roundTripSame(t, item, nonRoundTrippableTypesByVersion[kind]...)
|
||||||
}
|
}
|
||||||
if !nonInternalRoundTrippableTypes.Has(kind) {
|
if !nonInternalRoundTrippableTypes.Has(kind) {
|
||||||
roundTrip(t, api.Codec, fuzzInternalObject(t, testapi.Default.InternalGroupVersion(), item, rand.Int63()))
|
roundTrip(t, testapi.Default.Codec(), fuzzInternalObject(t, testapi.Default.InternalGroupVersion(), item, rand.Int63()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,8 +201,8 @@ func TestEncode_Ptr(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
obj := runtime.Object(pod)
|
obj := runtime.Object(pod)
|
||||||
data, err := testapi.Default.Codec().Encode(obj)
|
data, err := runtime.Encode(testapi.Default.Codec(), obj)
|
||||||
obj2, err2 := testapi.Default.Codec().Decode(data)
|
obj2, err2 := runtime.Decode(testapi.Default.Codec(), data)
|
||||||
if err != nil || err2 != nil {
|
if err != nil || err2 != nil {
|
||||||
t.Fatalf("Failure: '%v' '%v'", err, err2)
|
t.Fatalf("Failure: '%v' '%v'", err, err2)
|
||||||
}
|
}
|
||||||
@ -216,11 +217,11 @@ func TestEncode_Ptr(t *testing.T) {
|
|||||||
|
|
||||||
func TestBadJSONRejection(t *testing.T) {
|
func TestBadJSONRejection(t *testing.T) {
|
||||||
badJSONMissingKind := []byte(`{ }`)
|
badJSONMissingKind := []byte(`{ }`)
|
||||||
if _, err := testapi.Default.Codec().Decode(badJSONMissingKind); err == nil {
|
if _, err := runtime.Decode(testapi.Default.Codec(), badJSONMissingKind); err == nil {
|
||||||
t.Errorf("Did not reject despite lack of kind field: %s", badJSONMissingKind)
|
t.Errorf("Did not reject despite lack of kind field: %s", badJSONMissingKind)
|
||||||
}
|
}
|
||||||
badJSONUnknownType := []byte(`{"kind": "bar"}`)
|
badJSONUnknownType := []byte(`{"kind": "bar"}`)
|
||||||
if _, err1 := testapi.Default.Codec().Decode(badJSONUnknownType); err1 == nil {
|
if _, err1 := runtime.Decode(testapi.Default.Codec(), badJSONUnknownType); err1 == nil {
|
||||||
t.Errorf("Did not reject despite use of unknown type: %s", badJSONUnknownType)
|
t.Errorf("Did not reject despite use of unknown type: %s", badJSONUnknownType)
|
||||||
}
|
}
|
||||||
/*badJSONKindMismatch := []byte(`{"kind": "Pod"}`)
|
/*badJSONKindMismatch := []byte(`{"kind": "Pod"}`)
|
||||||
@ -240,14 +241,14 @@ func TestUnversionedTypes(t *testing.T) {
|
|||||||
|
|
||||||
for _, obj := range testcases {
|
for _, obj := range testcases {
|
||||||
// Make sure the unversioned codec can encode
|
// Make sure the unversioned codec can encode
|
||||||
unversionedJSON, err := api.Codec.Encode(obj)
|
unversionedJSON, err := runtime.Encode(testapi.Default.Codec(), obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("%v: unexpected error: %v", obj, err)
|
t.Errorf("%v: unexpected error: %v", obj, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure the versioned codec under test can decode
|
// Make sure the versioned codec under test can decode
|
||||||
versionDecodedObject, err := testapi.Default.Codec().Decode(unversionedJSON)
|
versionDecodedObject, err := runtime.Decode(testapi.Default.Codec(), unversionedJSON)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("%v: unexpected error: %v", obj, err)
|
t.Errorf("%v: unexpected error: %v", obj, err)
|
||||||
continue
|
continue
|
||||||
@ -278,7 +279,7 @@ func BenchmarkEncodeCodec(b *testing.B) {
|
|||||||
width := len(items)
|
width := len(items)
|
||||||
b.ResetTimer()
|
b.ResetTimer()
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
if _, err := testapi.Default.Codec().Encode(&items[i%width]); err != nil {
|
if _, err := runtime.Encode(testapi.Default.Codec(), &items[i%width]); err != nil {
|
||||||
b.Fatal(err)
|
b.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -320,7 +321,7 @@ func BenchmarkDecodeCodec(b *testing.B) {
|
|||||||
b.StopTimer()
|
b.StopTimer()
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkDecodeIntoCodec(b *testing.B) {
|
func BenchmarkDecodeIntoExternalCodec(b *testing.B) {
|
||||||
codec := testapi.Default.Codec()
|
codec := testapi.Default.Codec()
|
||||||
items := benchmarkItems()
|
items := benchmarkItems()
|
||||||
width := len(items)
|
width := len(items)
|
||||||
@ -343,6 +344,29 @@ func BenchmarkDecodeIntoCodec(b *testing.B) {
|
|||||||
b.StopTimer()
|
b.StopTimer()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BenchmarkDecodeIntoInternalCodec(b *testing.B) {
|
||||||
|
codec := testapi.Default.Codec()
|
||||||
|
items := benchmarkItems()
|
||||||
|
width := len(items)
|
||||||
|
encoded := make([][]byte, width)
|
||||||
|
for i := range items {
|
||||||
|
data, err := runtime.Encode(codec, &items[i])
|
||||||
|
if err != nil {
|
||||||
|
b.Fatal(err)
|
||||||
|
}
|
||||||
|
encoded[i] = data
|
||||||
|
}
|
||||||
|
|
||||||
|
b.ResetTimer()
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
obj := api.Pod{}
|
||||||
|
if err := runtime.DecodeInto(codec, encoded[i%width], &obj); err != nil {
|
||||||
|
b.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
b.StopTimer()
|
||||||
|
}
|
||||||
|
|
||||||
// BenchmarkDecodeJSON provides a baseline for regular JSON decode performance
|
// BenchmarkDecodeJSON provides a baseline for regular JSON decode performance
|
||||||
func BenchmarkDecodeIntoJSON(b *testing.B) {
|
func BenchmarkDecodeIntoJSON(b *testing.B) {
|
||||||
codec := testapi.Default.Codec()
|
codec := testapi.Default.Codec()
|
||||||
|
@ -47,7 +47,7 @@ type TestGroup struct {
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
kubeTestAPI := os.Getenv("KUBE_TEST_API")
|
kubeTestAPI := os.Getenv("KUBE_TEST_API")
|
||||||
if kubeTestAPI != "" {
|
if len(kubeTestAPI) != 0 {
|
||||||
testGroupVersions := strings.Split(kubeTestAPI, ",")
|
testGroupVersions := strings.Split(kubeTestAPI, ",")
|
||||||
for _, gvString := range testGroupVersions {
|
for _, gvString := range testGroupVersions {
|
||||||
groupVersion, err := unversioned.ParseGroupVersion(gvString)
|
groupVersion, err := unversioned.ParseGroupVersion(gvString)
|
||||||
@ -57,7 +57,7 @@ func init() {
|
|||||||
|
|
||||||
Groups[groupVersion.Group] = TestGroup{
|
Groups[groupVersion.Group] = TestGroup{
|
||||||
externalGroupVersion: groupVersion,
|
externalGroupVersion: groupVersion,
|
||||||
internalGroupVersion: unversioned.GroupVersion{Group: groupVersion.Group},
|
internalGroupVersion: unversioned.GroupVersion{Group: groupVersion.Group, Version: runtime.APIVersionInternal},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -93,12 +93,7 @@ func (g TestGroup) InternalGroupVersion() unversioned.GroupVersion {
|
|||||||
// Codec returns the codec for the API version to test against, as set by the
|
// Codec returns the codec for the API version to test against, as set by the
|
||||||
// KUBE_TEST_API env var.
|
// KUBE_TEST_API env var.
|
||||||
func (g TestGroup) Codec() runtime.Codec {
|
func (g TestGroup) Codec() runtime.Codec {
|
||||||
// TODO: caesarxuchao: Restructure the body once we have a central `registered`.
|
return api.Codecs.LegacyCodec(g.externalGroupVersion)
|
||||||
interfaces, err := registered.GroupOrDie(g.externalGroupVersion.Group).InterfacesFor(g.externalGroupVersion)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return interfaces.Codec
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Converter returns the api.Scheme for the API version to test against, as set by the
|
// Converter returns the api.Scheme for the API version to test against, as set by the
|
||||||
@ -199,7 +194,11 @@ func GetCodecForObject(obj runtime.Object) (runtime.Codec, error) {
|
|||||||
}
|
}
|
||||||
// Codec used for unversioned types
|
// Codec used for unversioned types
|
||||||
if api.Scheme.Recognizes(kind) {
|
if api.Scheme.Recognizes(kind) {
|
||||||
return api.Codec, nil
|
serializer, ok := api.Codecs.SerializerForFileExtension("json")
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("no serializer registered for json")
|
||||||
|
}
|
||||||
|
return serializer, nil
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("unexpected kind: %v", kind)
|
return nil, fmt.Errorf("unexpected kind: %v", kind)
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
@ -48,7 +47,7 @@ func TestCompatibility(
|
|||||||
) {
|
) {
|
||||||
|
|
||||||
// Decode
|
// Decode
|
||||||
codec := runtime.CodecFor(api.Scheme, version)
|
codec := api.Codecs.LegacyCodec(version)
|
||||||
obj, err := runtime.Decode(codec, input)
|
obj, err := runtime.Decode(codec, input)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Unexpected error: %v", err)
|
t.Fatalf("Unexpected error: %v", err)
|
||||||
|
@ -59,9 +59,6 @@ func FuzzerFor(t *testing.T, version unversioned.GroupVersion, src rand.Source)
|
|||||||
func(q *resource.Quantity, c fuzz.Continue) {
|
func(q *resource.Quantity, c fuzz.Continue) {
|
||||||
*q = *resource.NewQuantity(c.Int63n(1000), resource.DecimalExponent)
|
*q = *resource.NewQuantity(c.Int63n(1000), resource.DecimalExponent)
|
||||||
},
|
},
|
||||||
func(j *runtime.PluginBase, c fuzz.Continue) {
|
|
||||||
// Do nothing; this struct has only a Kind field and it must stay blank in memory.
|
|
||||||
},
|
|
||||||
func(j *runtime.TypeMeta, c fuzz.Continue) {
|
func(j *runtime.TypeMeta, c fuzz.Continue) {
|
||||||
// We have to customize the randomization of TypeMetas because their
|
// We have to customize the randomization of TypeMetas because their
|
||||||
// APIVersion and Kind must remain blank in memory.
|
// APIVersion and Kind must remain blank in memory.
|
||||||
@ -177,10 +174,8 @@ func FuzzerFor(t *testing.T, version unversioned.GroupVersion, src rand.Source)
|
|||||||
// TODO: uncomment when round trip starts from a versioned object
|
// TODO: uncomment when round trip starts from a versioned object
|
||||||
if true { //c.RandBool() {
|
if true { //c.RandBool() {
|
||||||
*j = &runtime.Unknown{
|
*j = &runtime.Unknown{
|
||||||
// apiVersion has rules now. Since it includes <group>/<version> and only `v1` can be bare,
|
// We do not set TypeMeta here because it is not carried through a round trip
|
||||||
// then this must choose a valid format to deserialize
|
RawJSON: []byte(`{"apiVersion":"unknown.group/unknown","kind":"Something","someKey":"someValue"}`),
|
||||||
TypeMeta: runtime.TypeMeta{Kind: "Something", APIVersion: "unknown.group/unknown"},
|
|
||||||
RawJSON: []byte(`{"apiVersion":"unknown.group/unknown","kind":"Something","someKey":"someValue"}`),
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
types := []runtime.Object{&api.Pod{}, &api.ReplicationController{}}
|
types := []runtime.Object{&api.Pod{}, &api.ReplicationController{}}
|
||||||
|
@ -141,11 +141,13 @@ func (gv GroupVersion) String() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// special case of "v1" for backward compatibility
|
// special case of "v1" for backward compatibility
|
||||||
if gv.Group == "" && gv.Version == "v1" {
|
if len(gv.Group) == 0 && gv.Version == "v1" {
|
||||||
return gv.Version
|
return gv.Version
|
||||||
} else {
|
}
|
||||||
|
if len(gv.Group) > 0 {
|
||||||
return gv.Group + "/" + gv.Version
|
return gv.Group + "/" + gv.Version
|
||||||
}
|
}
|
||||||
|
return gv.Version
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseGroupVersion turns "group/version" string into a GroupVersion struct. It reports error
|
// ParseGroupVersion turns "group/version" string into a GroupVersion struct. It reports error
|
||||||
@ -163,6 +165,8 @@ func ParseGroupVersion(gv string) (GroupVersion, error) {
|
|||||||
switch {
|
switch {
|
||||||
case len(s) == 1 && gv == "v1":
|
case len(s) == 1 && gv == "v1":
|
||||||
return GroupVersion{"", "v1"}, nil
|
return GroupVersion{"", "v1"}, nil
|
||||||
|
case len(s) == 1:
|
||||||
|
return GroupVersion{"", s[0]}, nil
|
||||||
case len(s) == 2:
|
case len(s) == 2:
|
||||||
return GroupVersion{s[0], s[1]}, nil
|
return GroupVersion{s[0], s[1]}, nil
|
||||||
default:
|
default:
|
||||||
|
@ -28,12 +28,13 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func roundTrip(t *testing.T, obj runtime.Object) runtime.Object {
|
func roundTrip(t *testing.T, obj runtime.Object) runtime.Object {
|
||||||
data, err := versioned.Codec.Encode(obj)
|
codec := api.Codecs.LegacyCodec(versioned.SchemeGroupVersion)
|
||||||
|
data, err := runtime.Encode(codec, obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("%v\n %#v", err, obj)
|
t.Errorf("%v\n %#v", err, obj)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
obj2, err := api.Codec.Decode(data)
|
obj2, err := runtime.Decode(codec, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("%v\nData: %s\nSource: %#v", err, string(data), obj)
|
t.Errorf("%v\nData: %s\nSource: %#v", err, string(data), obj)
|
||||||
return nil
|
return nil
|
||||||
|
@ -17,7 +17,6 @@ limitations under the License.
|
|||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
)
|
)
|
||||||
@ -28,9 +27,6 @@ const GroupName = ""
|
|||||||
// SchemeGroupVersion is group version used to register these objects
|
// SchemeGroupVersion is group version used to register these objects
|
||||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"}
|
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"}
|
||||||
|
|
||||||
// Codec encodes internal objects to the v1 scheme
|
|
||||||
var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion)
|
|
||||||
|
|
||||||
func AddToScheme(scheme *runtime.Scheme) {
|
func AddToScheme(scheme *runtime.Scheme) {
|
||||||
// Add the API to Scheme.
|
// Add the API to Scheme.
|
||||||
addKnownTypes(scheme)
|
addKnownTypes(scheme)
|
||||||
|
@ -72,7 +72,7 @@ func TestValidateOk(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
testObj := test.obj
|
testObj := test.obj
|
||||||
apiObjectFuzzer.Fuzz(testObj)
|
apiObjectFuzzer.Fuzz(testObj)
|
||||||
data, err := testapi.Default.Codec().Encode(testObj)
|
data, err := runtime.Encode(testapi.Default.Codec(), testObj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -17,10 +17,14 @@ limitations under the License.
|
|||||||
package registered
|
package registered
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/apimachinery"
|
"k8s.io/kubernetes/pkg/apimachinery"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestAllPreferredGroupVersions(t *testing.T) {
|
func TestAllPreferredGroupVersions(t *testing.T) {
|
||||||
@ -66,3 +70,61 @@ func TestAllPreferredGroupVersions(t *testing.T) {
|
|||||||
reset()
|
reset()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var status = &unversioned.Status{
|
||||||
|
Status: unversioned.StatusFailure,
|
||||||
|
Code: 200,
|
||||||
|
Reason: unversioned.StatusReasonUnknown,
|
||||||
|
Message: "",
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestV1EncodeDecodeStatus(t *testing.T) {
|
||||||
|
v1Codec := testapi.Default.Codec()
|
||||||
|
|
||||||
|
encoded, err := runtime.Encode(v1Codec, status)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
typeMeta := unversioned.TypeMeta{}
|
||||||
|
if err := json.Unmarshal(encoded, &typeMeta); err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if typeMeta.Kind != "Status" {
|
||||||
|
t.Errorf("Kind is not set to \"Status\". Got %v", string(encoded))
|
||||||
|
}
|
||||||
|
if typeMeta.APIVersion != "v1" {
|
||||||
|
t.Errorf("APIVersion is not set to \"v1\". Got %v", string(encoded))
|
||||||
|
}
|
||||||
|
decoded, err := runtime.Decode(v1Codec, encoded)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(status, decoded) {
|
||||||
|
t.Errorf("expected: %#v, got: %#v", status, decoded)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestExperimentalEncodeDecodeStatus(t *testing.T) {
|
||||||
|
extensionCodec := testapi.Extensions.Codec()
|
||||||
|
encoded, err := runtime.Encode(extensionCodec, status)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
typeMeta := unversioned.TypeMeta{}
|
||||||
|
if err := json.Unmarshal(encoded, &typeMeta); err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if typeMeta.Kind != "Status" {
|
||||||
|
t.Errorf("Kind is not set to \"Status\". Got %s", encoded)
|
||||||
|
}
|
||||||
|
if typeMeta.APIVersion != "v1" {
|
||||||
|
t.Errorf("APIVersion is not set to \"\". Got %s", encoded)
|
||||||
|
}
|
||||||
|
decoded, err := runtime.Decode(extensionCodec, encoded)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(status, decoded) {
|
||||||
|
t.Errorf("expected: %v, got: %v", status, decoded)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -17,8 +17,7 @@ limitations under the License.
|
|||||||
package latest
|
package latest
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/apis/abac/v1beta1"
|
_ "k8s.io/kubernetes/pkg/apis/abac"
|
||||||
|
_ "k8s.io/kubernetes/pkg/apis/abac/v0"
|
||||||
|
_ "k8s.io/kubernetes/pkg/apis/abac/v1beta1"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Codec is the default codec for serializing input that should use the latest supported version.
|
|
||||||
var Codec = v1beta1.Codec
|
|
||||||
|
@ -14,11 +14,12 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package api
|
package abac
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime/serializer"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Group is the API group for abac
|
// Group is the API group for abac
|
||||||
@ -27,9 +28,11 @@ const Group = "abac.authorization.kubernetes.io"
|
|||||||
// Scheme is the default instance of runtime.Scheme to which types in the abac API group are registered.
|
// Scheme is the default instance of runtime.Scheme to which types in the abac API group are registered.
|
||||||
var Scheme = runtime.NewScheme()
|
var Scheme = runtime.NewScheme()
|
||||||
|
|
||||||
|
// Codecs provides access to encoding and decoding for the scheme
|
||||||
|
var Codecs = serializer.NewCodecFactory(Scheme)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Scheme.AddInternalGroupVersion(unversioned.GroupVersion{Group: Group, Version: ""})
|
Scheme.AddKnownTypes(unversioned.GroupVersion{Group: Group, Version: runtime.APIVersionInternal},
|
||||||
Scheme.AddKnownTypes(unversioned.GroupVersion{Group: Group, Version: ""},
|
|
||||||
&Policy{},
|
&Policy{},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package api
|
package abac
|
||||||
|
|
||||||
import "k8s.io/kubernetes/pkg/api/unversioned"
|
import "k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ limitations under the License.
|
|||||||
package v0
|
package v0
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/apis/abac"
|
api "k8s.io/kubernetes/pkg/apis/abac"
|
||||||
"k8s.io/kubernetes/pkg/conversion"
|
"k8s.io/kubernetes/pkg/conversion"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/apis/abac"
|
api "k8s.io/kubernetes/pkg/apis/abac"
|
||||||
"k8s.io/kubernetes/pkg/apis/abac/v0"
|
"k8s.io/kubernetes/pkg/apis/abac/v0"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -18,16 +18,12 @@ package v0
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/apis/abac"
|
api "k8s.io/kubernetes/pkg/apis/abac"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// GroupVersion is the API group and version for abac v0
|
// GroupVersion is the API group and version for abac v0
|
||||||
var GroupVersion = unversioned.GroupVersion{Group: api.Group, Version: "v0"}
|
var GroupVersion = unversioned.GroupVersion{Group: api.Group, Version: "v0"}
|
||||||
|
|
||||||
// Codec encodes internal objects to the v0 version for the abac group
|
|
||||||
var Codec = runtime.CodecFor(api.Scheme, GroupVersion)
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
api.Scheme.AddKnownTypes(GroupVersion,
|
api.Scheme.AddKnownTypes(GroupVersion,
|
||||||
&Policy{},
|
&Policy{},
|
||||||
|
@ -18,16 +18,12 @@ package v1beta1
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/apis/abac"
|
api "k8s.io/kubernetes/pkg/apis/abac"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// GroupVersion is the API group and version for abac v1beta1
|
// GroupVersion is the API group and version for abac v1beta1
|
||||||
var GroupVersion = unversioned.GroupVersion{Group: api.Group, Version: "v1beta1"}
|
var GroupVersion = unversioned.GroupVersion{Group: api.Group, Version: "v1beta1"}
|
||||||
|
|
||||||
// Codec encodes internal objects to the v1beta1 version for the abac group
|
|
||||||
var Codec = runtime.CodecFor(api.Scheme, GroupVersion)
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
api.Scheme.AddKnownTypes(GroupVersion,
|
api.Scheme.AddKnownTypes(GroupVersion,
|
||||||
&Policy{},
|
&Policy{},
|
||||||
|
@ -75,7 +75,6 @@ func enableVersions(externalVersions []unversioned.GroupVersion) error {
|
|||||||
groupMeta := apimachinery.GroupMeta{
|
groupMeta := apimachinery.GroupMeta{
|
||||||
GroupVersion: preferredExternalVersion,
|
GroupVersion: preferredExternalVersion,
|
||||||
GroupVersions: externalVersions,
|
GroupVersions: externalVersions,
|
||||||
Codec: runtime.CodecFor(api.Scheme, preferredExternalVersion),
|
|
||||||
RESTMapper: newRESTMapper(externalVersions),
|
RESTMapper: newRESTMapper(externalVersions),
|
||||||
SelfLinker: runtime.SelfLinker(accessor),
|
SelfLinker: runtime.SelfLinker(accessor),
|
||||||
InterfacesFor: interfacesFor,
|
InterfacesFor: interfacesFor,
|
||||||
@ -119,7 +118,6 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e
|
|||||||
switch version {
|
switch version {
|
||||||
case v1beta1.SchemeGroupVersion:
|
case v1beta1.SchemeGroupVersion:
|
||||||
return &meta.VersionInterfaces{
|
return &meta.VersionInterfaces{
|
||||||
Codec: v1beta1.Codec,
|
|
||||||
ObjectConvertor: api.Scheme,
|
ObjectConvertor: api.Scheme,
|
||||||
MetadataAccessor: accessor,
|
MetadataAccessor: accessor,
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -25,7 +25,7 @@ import (
|
|||||||
const GroupName = "authorization.k8s.io"
|
const GroupName = "authorization.k8s.io"
|
||||||
|
|
||||||
// SchemeGroupVersion is group version used to register these objects
|
// SchemeGroupVersion is group version used to register these objects
|
||||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: ""}
|
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal}
|
||||||
|
|
||||||
// Kind takes an unqualified kind and returns back a Group qualified GroupKind
|
// Kind takes an unqualified kind and returns back a Group qualified GroupKind
|
||||||
func Kind(kind string) unversioned.GroupKind {
|
func Kind(kind string) unversioned.GroupKind {
|
||||||
|
@ -17,7 +17,6 @@ limitations under the License.
|
|||||||
package v1beta1
|
package v1beta1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
)
|
)
|
||||||
@ -28,8 +27,6 @@ const GroupName = "authorization.k8s.io"
|
|||||||
// SchemeGroupVersion is group version used to register these objects
|
// SchemeGroupVersion is group version used to register these objects
|
||||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta1"}
|
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta1"}
|
||||||
|
|
||||||
var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion)
|
|
||||||
|
|
||||||
func AddToScheme(scheme *runtime.Scheme) {
|
func AddToScheme(scheme *runtime.Scheme) {
|
||||||
// Add the API to Scheme.
|
// Add the API to Scheme.
|
||||||
addKnownTypes(scheme)
|
addKnownTypes(scheme)
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2015 The Kubernetes Authors All rights reserved.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package componentconfig
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io/ioutil"
|
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
|
||||||
)
|
|
||||||
|
|
||||||
func DecodeFromPathInto(obj runtime.Object, c runtime.Codec, filename string) error {
|
|
||||||
b, err := ioutil.ReadFile(filename)
|
|
||||||
c = runtime.YAMLDecoder(c)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return c.DecodeInto(b, obj)
|
|
||||||
}
|
|
@ -75,7 +75,6 @@ func enableVersions(externalVersions []unversioned.GroupVersion) error {
|
|||||||
groupMeta := apimachinery.GroupMeta{
|
groupMeta := apimachinery.GroupMeta{
|
||||||
GroupVersion: preferredExternalVersion,
|
GroupVersion: preferredExternalVersion,
|
||||||
GroupVersions: externalVersions,
|
GroupVersions: externalVersions,
|
||||||
Codec: runtime.CodecFor(api.Scheme, preferredExternalVersion),
|
|
||||||
RESTMapper: newRESTMapper(externalVersions),
|
RESTMapper: newRESTMapper(externalVersions),
|
||||||
SelfLinker: runtime.SelfLinker(accessor),
|
SelfLinker: runtime.SelfLinker(accessor),
|
||||||
InterfacesFor: interfacesFor,
|
InterfacesFor: interfacesFor,
|
||||||
@ -104,7 +103,6 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e
|
|||||||
switch version {
|
switch version {
|
||||||
case v1alpha1.SchemeGroupVersion:
|
case v1alpha1.SchemeGroupVersion:
|
||||||
return &meta.VersionInterfaces{
|
return &meta.VersionInterfaces{
|
||||||
Codec: v1alpha1.Codec,
|
|
||||||
ObjectConvertor: api.Scheme,
|
ObjectConvertor: api.Scheme,
|
||||||
MetadataAccessor: accessor,
|
MetadataAccessor: accessor,
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -23,13 +23,14 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
"k8s.io/kubernetes/pkg/apis/componentconfig"
|
"k8s.io/kubernetes/pkg/apis/componentconfig"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCodec(t *testing.T) {
|
func TestCodec(t *testing.T) {
|
||||||
daemonSet := componentconfig.KubeProxyConfiguration{}
|
daemonSet := componentconfig.KubeProxyConfiguration{}
|
||||||
// We do want to use package registered rather than testapi here, because we
|
// We do want to use package registered rather than testapi here, because we
|
||||||
// want to test if the package install and package registered work as expected.
|
// want to test if the package install and package registered work as expected.
|
||||||
data, err := registered.GroupOrDie(componentconfig.GroupName).Codec.Encode(&daemonSet)
|
data, err := runtime.Encode(api.Codecs.LegacyCodec(registered.GroupOrDie(componentconfig.GroupName).GroupVersion), &daemonSet)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected error: %v", err)
|
t.Fatalf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
@ -80,8 +81,8 @@ func TestRESTMapper(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interfaces, _ := registered.GroupOrDie(componentconfig.GroupName).InterfacesFor(version)
|
interfaces, _ := registered.GroupOrDie(componentconfig.GroupName).InterfacesFor(version)
|
||||||
if mapping.Codec != interfaces.Codec {
|
if mapping.ObjectConvertor != interfaces.ObjectConvertor {
|
||||||
t.Errorf("unexpected codec: %#v, expected: %#v", mapping, interfaces)
|
t.Errorf("unexpected: %#v, expected: %#v", mapping, interfaces)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ func AddToScheme(scheme *runtime.Scheme) {
|
|||||||
const GroupName = "componentconfig"
|
const GroupName = "componentconfig"
|
||||||
|
|
||||||
// SchemeGroupVersion is group version used to register these objects
|
// SchemeGroupVersion is group version used to register these objects
|
||||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: ""}
|
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal}
|
||||||
|
|
||||||
// Kind takes an unqualified kind and returns back a Group qualified GroupKind
|
// Kind takes an unqualified kind and returns back a Group qualified GroupKind
|
||||||
func Kind(kind string) unversioned.GroupKind {
|
func Kind(kind string) unversioned.GroupKind {
|
||||||
|
@ -17,7 +17,6 @@ limitations under the License.
|
|||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
)
|
)
|
||||||
@ -28,8 +27,6 @@ const GroupName = "componentconfig"
|
|||||||
// SchemeGroupVersion is group version used to register these objects
|
// SchemeGroupVersion is group version used to register these objects
|
||||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1alpha1"}
|
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1alpha1"}
|
||||||
|
|
||||||
var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion)
|
|
||||||
|
|
||||||
func AddToScheme(scheme *runtime.Scheme) {
|
func AddToScheme(scheme *runtime.Scheme) {
|
||||||
addKnownTypes(scheme)
|
addKnownTypes(scheme)
|
||||||
addDefaultingFuncs(scheme)
|
addDefaultingFuncs(scheme)
|
||||||
|
@ -75,7 +75,6 @@ func enableVersions(externalVersions []unversioned.GroupVersion) error {
|
|||||||
groupMeta := apimachinery.GroupMeta{
|
groupMeta := apimachinery.GroupMeta{
|
||||||
GroupVersion: preferredExternalVersion,
|
GroupVersion: preferredExternalVersion,
|
||||||
GroupVersions: externalVersions,
|
GroupVersions: externalVersions,
|
||||||
Codec: runtime.CodecFor(api.Scheme, preferredExternalVersion),
|
|
||||||
RESTMapper: newRESTMapper(externalVersions),
|
RESTMapper: newRESTMapper(externalVersions),
|
||||||
SelfLinker: runtime.SelfLinker(accessor),
|
SelfLinker: runtime.SelfLinker(accessor),
|
||||||
InterfacesFor: interfacesFor,
|
InterfacesFor: interfacesFor,
|
||||||
@ -104,7 +103,6 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e
|
|||||||
switch version {
|
switch version {
|
||||||
case v1beta1.SchemeGroupVersion:
|
case v1beta1.SchemeGroupVersion:
|
||||||
return &meta.VersionInterfaces{
|
return &meta.VersionInterfaces{
|
||||||
Codec: v1beta1.Codec,
|
|
||||||
ObjectConvertor: api.Scheme,
|
ObjectConvertor: api.Scheme,
|
||||||
MetadataAccessor: accessor,
|
MetadataAccessor: accessor,
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -25,6 +25,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
|
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestResourceVersioner(t *testing.T) {
|
func TestResourceVersioner(t *testing.T) {
|
||||||
@ -51,7 +52,7 @@ func TestCodec(t *testing.T) {
|
|||||||
daemonSet := extensions.DaemonSet{}
|
daemonSet := extensions.DaemonSet{}
|
||||||
// We do want to use package registered rather than testapi here, because we
|
// We do want to use package registered rather than testapi here, because we
|
||||||
// want to test if the package install and package registered work as expected.
|
// want to test if the package install and package registered work as expected.
|
||||||
data, err := registered.GroupOrDie(extensions.GroupName).Codec.Encode(&daemonSet)
|
data, err := runtime.Encode(api.Codecs.LegacyCodec(registered.GroupOrDie(extensions.GroupName).GroupVersion), &daemonSet)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected error: %v", err)
|
t.Fatalf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
@ -101,9 +102,15 @@ func TestRESTMapper(t *testing.T) {
|
|||||||
t.Errorf("incorrect groupVersion: %v", mapping)
|
t.Errorf("incorrect groupVersion: %v", mapping)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
interfaces, _ := registered.GroupOrDie(extensions.GroupName).InterfacesFor(version)
|
interfaces, _ := registered.GroupOrDie(extensions.GroupName).InterfacesFor(version)
|
||||||
if mapping.Codec != interfaces.Codec {
|
if mapping.Codec != interfaces.Codec {
|
||||||
t.Errorf("unexpected codec: %#v, expected: %#v", mapping, interfaces)
|
t.Errorf("unexpected codec: %#v, expected: %#v", mapping, interfaces)
|
||||||
|
=======
|
||||||
|
interfaces, _ := latest.GroupOrDie(extensions.GroupName).InterfacesFor(version)
|
||||||
|
if mapping.ObjectConvertor != interfaces.ObjectConvertor {
|
||||||
|
t.Errorf("unexpected: %#v, expected: %#v", mapping, interfaces)
|
||||||
|
>>>>>>> e776ada... Switch API objects to not register per version codecs
|
||||||
}
|
}
|
||||||
|
|
||||||
rc := &extensions.HorizontalPodAutoscaler{ObjectMeta: api.ObjectMeta{Name: "foo"}}
|
rc := &extensions.HorizontalPodAutoscaler{ObjectMeta: api.ObjectMeta{Name: "foo"}}
|
||||||
|
@ -26,7 +26,7 @@ import (
|
|||||||
const GroupName = "extensions"
|
const GroupName = "extensions"
|
||||||
|
|
||||||
// SchemeGroupVersion is group version used to register these objects
|
// SchemeGroupVersion is group version used to register these objects
|
||||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: ""}
|
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal}
|
||||||
|
|
||||||
// Kind takes an unqualified kind and returns back a Group qualified GroupKind
|
// Kind takes an unqualified kind and returns back a Group qualified GroupKind
|
||||||
func Kind(kind string) unversioned.GroupKind {
|
func Kind(kind string) unversioned.GroupKind {
|
||||||
|
@ -588,12 +588,12 @@ func TestDefaultRequestIsNotSetForReplicaSet(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func roundTrip(t *testing.T, obj runtime.Object) runtime.Object {
|
func roundTrip(t *testing.T, obj runtime.Object) runtime.Object {
|
||||||
data, err := runtime.Encode(Codec, obj)
|
data, err := runtime.Encode(api.Codecs.LegacyCodec(SchemeGroupVersion), obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("%v\n %#v", err, obj)
|
t.Errorf("%v\n %#v", err, obj)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
obj2, err := api.Codec.Decode(data)
|
obj2, err := runtime.Decode(api.Codecs.UniversalDecoder(), data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("%v\nData: %s\nSource: %#v", err, string(data), obj)
|
t.Errorf("%v\nData: %s\nSource: %#v", err, string(data), obj)
|
||||||
return nil
|
return nil
|
||||||
|
@ -17,7 +17,6 @@ limitations under the License.
|
|||||||
package v1beta1
|
package v1beta1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
@ -29,8 +28,6 @@ const GroupName = "extensions"
|
|||||||
// SchemeGroupVersion is group version used to register these objects
|
// SchemeGroupVersion is group version used to register these objects
|
||||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta1"}
|
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta1"}
|
||||||
|
|
||||||
var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion)
|
|
||||||
|
|
||||||
func AddToScheme(scheme *runtime.Scheme) {
|
func AddToScheme(scheme *runtime.Scheme) {
|
||||||
addKnownTypes(scheme)
|
addKnownTypes(scheme)
|
||||||
addDefaultingFuncs(scheme)
|
addDefaultingFuncs(scheme)
|
||||||
|
@ -75,7 +75,6 @@ func enableVersions(externalVersions []unversioned.GroupVersion) error {
|
|||||||
groupMeta := apimachinery.GroupMeta{
|
groupMeta := apimachinery.GroupMeta{
|
||||||
GroupVersion: preferredExternalVersion,
|
GroupVersion: preferredExternalVersion,
|
||||||
GroupVersions: externalVersions,
|
GroupVersions: externalVersions,
|
||||||
Codec: runtime.CodecFor(api.Scheme, preferredExternalVersion),
|
|
||||||
RESTMapper: newRESTMapper(externalVersions),
|
RESTMapper: newRESTMapper(externalVersions),
|
||||||
SelfLinker: runtime.SelfLinker(accessor),
|
SelfLinker: runtime.SelfLinker(accessor),
|
||||||
InterfacesFor: interfacesFor,
|
InterfacesFor: interfacesFor,
|
||||||
@ -104,7 +103,6 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e
|
|||||||
switch version {
|
switch version {
|
||||||
case v1alpha1.SchemeGroupVersion:
|
case v1alpha1.SchemeGroupVersion:
|
||||||
return &meta.VersionInterfaces{
|
return &meta.VersionInterfaces{
|
||||||
Codec: v1alpha1.Codec,
|
|
||||||
ObjectConvertor: api.Scheme,
|
ObjectConvertor: api.Scheme,
|
||||||
MetadataAccessor: accessor,
|
MetadataAccessor: accessor,
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -30,7 +30,7 @@ func AddToScheme(scheme *runtime.Scheme) {
|
|||||||
const GroupName = "metrics"
|
const GroupName = "metrics"
|
||||||
|
|
||||||
// SchemeGroupVersion is group version used to register these objects
|
// SchemeGroupVersion is group version used to register these objects
|
||||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: ""}
|
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal}
|
||||||
|
|
||||||
// Kind takes an unqualified kind and returns back a Group qualified GroupKind
|
// Kind takes an unqualified kind and returns back a Group qualified GroupKind
|
||||||
func Kind(kind string) unversioned.GroupKind {
|
func Kind(kind string) unversioned.GroupKind {
|
||||||
|
@ -17,7 +17,6 @@ limitations under the License.
|
|||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
@ -29,8 +28,6 @@ const GroupName = "metrics"
|
|||||||
// SchemeGroupVersion is group version used to register these objects
|
// SchemeGroupVersion is group version used to register these objects
|
||||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1alpha1"}
|
var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1alpha1"}
|
||||||
|
|
||||||
var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion)
|
|
||||||
|
|
||||||
func AddToScheme(scheme *runtime.Scheme) {
|
func AddToScheme(scheme *runtime.Scheme) {
|
||||||
// Add the API to Scheme.
|
// Add the API to Scheme.
|
||||||
addKnownTypes(scheme)
|
addKnownTypes(scheme)
|
||||||
|
@ -35,7 +35,6 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/admission"
|
"k8s.io/kubernetes/pkg/admission"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
apierrs "k8s.io/kubernetes/pkg/api/errors"
|
apierrs "k8s.io/kubernetes/pkg/api/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/latest"
|
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/rest"
|
"k8s.io/kubernetes/pkg/api/rest"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
@ -70,10 +69,10 @@ var grouplessPrefix = "api"
|
|||||||
|
|
||||||
var groupVersions = []unversioned.GroupVersion{grouplessGroupVersion, testGroupVersion, newGroupVersion}
|
var groupVersions = []unversioned.GroupVersion{grouplessGroupVersion, testGroupVersion, newGroupVersion}
|
||||||
|
|
||||||
var codec = latest.Codecs.LegacyCodec(groupVersions...)
|
var codec = api.Codecs.LegacyCodec(groupVersions...)
|
||||||
var grouplessCodec = latest.Codecs.LegacyCodec(grouplessGroupVersion)
|
var grouplessCodec = api.Codecs.LegacyCodec(grouplessGroupVersion)
|
||||||
var testCodec = latest.Codecs.LegacyCodec(testGroupVersion)
|
var testCodec = api.Codecs.LegacyCodec(testGroupVersion)
|
||||||
var newCodec = latest.Codecs.LegacyCodec(newGroupVersion)
|
var newCodec = api.Codecs.LegacyCodec(newGroupVersion)
|
||||||
|
|
||||||
var accessor = meta.NewAccessor()
|
var accessor = meta.NewAccessor()
|
||||||
var versioner runtime.ResourceVersioner = accessor
|
var versioner runtime.ResourceVersioner = accessor
|
||||||
@ -265,7 +264,7 @@ func handleInternal(storage map[string]rest.Storage, admissionControl admission.
|
|||||||
group.Root = "/" + grouplessPrefix
|
group.Root = "/" + grouplessPrefix
|
||||||
group.GroupVersion = grouplessGroupVersion
|
group.GroupVersion = grouplessGroupVersion
|
||||||
group.OptionsExternalVersion = &grouplessGroupVersion
|
group.OptionsExternalVersion = &grouplessGroupVersion
|
||||||
group.Serializer = latest.Codecs
|
group.Serializer = api.Codecs
|
||||||
if err := (&group).InstallREST(container); err != nil {
|
if err := (&group).InstallREST(container); err != nil {
|
||||||
panic(fmt.Sprintf("unable to install container %s: %v", group.GroupVersion, err))
|
panic(fmt.Sprintf("unable to install container %s: %v", group.GroupVersion, err))
|
||||||
}
|
}
|
||||||
@ -277,7 +276,7 @@ func handleInternal(storage map[string]rest.Storage, admissionControl admission.
|
|||||||
group.Root = "/" + prefix
|
group.Root = "/" + prefix
|
||||||
group.GroupVersion = testGroupVersion
|
group.GroupVersion = testGroupVersion
|
||||||
group.OptionsExternalVersion = &testGroupVersion
|
group.OptionsExternalVersion = &testGroupVersion
|
||||||
group.Serializer = latest.Codecs
|
group.Serializer = api.Codecs
|
||||||
if err := (&group).InstallREST(container); err != nil {
|
if err := (&group).InstallREST(container); err != nil {
|
||||||
panic(fmt.Sprintf("unable to install container %s: %v", group.GroupVersion, err))
|
panic(fmt.Sprintf("unable to install container %s: %v", group.GroupVersion, err))
|
||||||
}
|
}
|
||||||
@ -289,7 +288,7 @@ func handleInternal(storage map[string]rest.Storage, admissionControl admission.
|
|||||||
group.Root = "/" + prefix
|
group.Root = "/" + prefix
|
||||||
group.GroupVersion = newGroupVersion
|
group.GroupVersion = newGroupVersion
|
||||||
group.OptionsExternalVersion = &newGroupVersion
|
group.OptionsExternalVersion = &newGroupVersion
|
||||||
group.Serializer = latest.Codecs
|
group.Serializer = api.Codecs
|
||||||
if err := (&group).InstallREST(container); err != nil {
|
if err := (&group).InstallREST(container); err != nil {
|
||||||
panic(fmt.Sprintf("unable to install container %s: %v", group.GroupVersion, err))
|
panic(fmt.Sprintf("unable to install container %s: %v", group.GroupVersion, err))
|
||||||
}
|
}
|
||||||
@ -2391,7 +2390,7 @@ func TestUpdateREST(t *testing.T) {
|
|||||||
GroupVersion: newGroupVersion,
|
GroupVersion: newGroupVersion,
|
||||||
OptionsExternalVersion: &newGroupVersion,
|
OptionsExternalVersion: &newGroupVersion,
|
||||||
|
|
||||||
Serializer: latest.Codecs,
|
Serializer: api.Codecs,
|
||||||
ParameterCodec: api.ParameterCodec,
|
ParameterCodec: api.ParameterCodec,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2475,7 +2474,7 @@ func TestParentResourceIsRequired(t *testing.T) {
|
|||||||
GroupVersion: newGroupVersion,
|
GroupVersion: newGroupVersion,
|
||||||
OptionsExternalVersion: &newGroupVersion,
|
OptionsExternalVersion: &newGroupVersion,
|
||||||
|
|
||||||
Serializer: latest.Codecs,
|
Serializer: api.Codecs,
|
||||||
ParameterCodec: api.ParameterCodec,
|
ParameterCodec: api.ParameterCodec,
|
||||||
}
|
}
|
||||||
container := restful.NewContainer()
|
container := restful.NewContainer()
|
||||||
@ -2506,7 +2505,7 @@ func TestParentResourceIsRequired(t *testing.T) {
|
|||||||
GroupVersion: newGroupVersion,
|
GroupVersion: newGroupVersion,
|
||||||
OptionsExternalVersion: &newGroupVersion,
|
OptionsExternalVersion: &newGroupVersion,
|
||||||
|
|
||||||
Serializer: latest.Codecs,
|
Serializer: api.Codecs,
|
||||||
ParameterCodec: api.ParameterCodec,
|
ParameterCodec: api.ParameterCodec,
|
||||||
}
|
}
|
||||||
container = restful.NewContainer()
|
container = restful.NewContainer()
|
||||||
@ -2710,12 +2709,12 @@ func TestCreateYAML(t *testing.T) {
|
|||||||
simple := &apiservertesting.Simple{
|
simple := &apiservertesting.Simple{
|
||||||
Other: "bar",
|
Other: "bar",
|
||||||
}
|
}
|
||||||
serializer, ok := latest.Codecs.SerializerForMediaType("application/yaml", nil)
|
serializer, ok := api.Codecs.SerializerForMediaType("application/yaml", nil)
|
||||||
if !ok {
|
if !ok {
|
||||||
t.Fatal("No yaml serializer")
|
t.Fatal("No yaml serializer")
|
||||||
}
|
}
|
||||||
encoder := latest.Codecs.EncoderForVersion(serializer, testGroupVersion)
|
encoder := api.Codecs.EncoderForVersion(serializer, testGroupVersion)
|
||||||
decoder := latest.Codecs.DecoderToVersion(serializer, testInternalGroupVersion)
|
decoder := api.Codecs.DecoderToVersion(serializer, testInternalGroupVersion)
|
||||||
|
|
||||||
data, err := runtime.Encode(encoder, simple)
|
data, err := runtime.Encode(encoder, simple)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2913,7 +2912,7 @@ func (obj *UnregisteredAPIObject) GetObjectKind() unversioned.ObjectKind {
|
|||||||
|
|
||||||
func TestWriteJSONDecodeError(t *testing.T) {
|
func TestWriteJSONDecodeError(t *testing.T) {
|
||||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||||||
writeNegotiated(latest.Codecs, newGroupVersion, w, req, http.StatusOK, &UnregisteredAPIObject{"Undecodable"})
|
writeNegotiated(api.Codecs, newGroupVersion, w, req, http.StatusOK, &UnregisteredAPIObject{"Undecodable"})
|
||||||
}))
|
}))
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer server.Close()
|
// defer server.Close()
|
||||||
|
@ -28,8 +28,7 @@ import (
|
|||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/apis/abac"
|
api "k8s.io/kubernetes/pkg/apis/abac"
|
||||||
"k8s.io/kubernetes/pkg/apis/abac/latest"
|
|
||||||
"k8s.io/kubernetes/pkg/apis/abac/v0"
|
"k8s.io/kubernetes/pkg/apis/abac/v0"
|
||||||
_ "k8s.io/kubernetes/pkg/apis/abac/v1beta1"
|
_ "k8s.io/kubernetes/pkg/apis/abac/v1beta1"
|
||||||
"k8s.io/kubernetes/pkg/auth/authorizer"
|
"k8s.io/kubernetes/pkg/auth/authorizer"
|
||||||
|
@ -67,7 +67,7 @@ func TestV1EncodeDecodeStatus(t *testing.T) {
|
|||||||
func TestExperimentalEncodeDecodeStatus(t *testing.T) {
|
func TestExperimentalEncodeDecodeStatus(t *testing.T) {
|
||||||
// TODO: caesarxuchao: use the testapi.Extensions.Codec() once the PR that
|
// TODO: caesarxuchao: use the testapi.Extensions.Codec() once the PR that
|
||||||
// moves experimental from v1 to v1beta1 got merged.
|
// moves experimental from v1 to v1beta1 got merged.
|
||||||
expCodec := latest.Codecs.LegacyCodec(extensions.SchemeGroupVersion)
|
expCodec := api.Codecs.LegacyCodec(extensions.SchemeGroupVersion)
|
||||||
encoded, err := runtime.Encode(expCodec, status)
|
encoded, err := runtime.Encode(expCodec, status)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
@ -94,7 +94,7 @@ func TestInstallAPIGroups(t *testing.T) {
|
|||||||
config.ProxyTLSClientConfig = &tls.Config{}
|
config.ProxyTLSClientConfig = &tls.Config{}
|
||||||
config.APIPrefix = "/apiPrefix"
|
config.APIPrefix = "/apiPrefix"
|
||||||
config.APIGroupPrefix = "/apiGroupPrefix"
|
config.APIGroupPrefix = "/apiGroupPrefix"
|
||||||
config.Serializer = latest.Codecs
|
config.Serializer = api.Codecs
|
||||||
|
|
||||||
s := New(&config)
|
s := New(&config)
|
||||||
apiGroupMeta := registered.GroupOrDie(api.GroupName)
|
apiGroupMeta := registered.GroupOrDie(api.GroupName)
|
||||||
|
@ -17,7 +17,12 @@ limitations under the License.
|
|||||||
package latest
|
package latest
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/plugin/pkg/scheduler/api/v1"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime/serializer/json"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime/serializer/versioning"
|
||||||
|
"k8s.io/kubernetes/plugin/pkg/scheduler/api"
|
||||||
|
_ "k8s.io/kubernetes/plugin/pkg/scheduler/api/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Version is the string that represents the current external default version.
|
// Version is the string that represents the current external default version.
|
||||||
@ -33,6 +38,10 @@ const OldestVersion = "v1"
|
|||||||
var Versions = []string{"v1"}
|
var Versions = []string{"v1"}
|
||||||
|
|
||||||
// Codec is the default codec for serializing input that should use
|
// Codec is the default codec for serializing input that should use
|
||||||
// the latest supported version.
|
// the latest supported version. It supports JSON by default.
|
||||||
// This codec can decode any object that Kubernetes is aware of.
|
var Codec = versioning.NewCodecForScheme(
|
||||||
var Codec = v1.Codec
|
api.Scheme,
|
||||||
|
json.NewSerializer(json.DefaultMetaFactory, api.Scheme, runtime.ObjectTyperToTyper(api.Scheme), true),
|
||||||
|
[]unversioned.GroupVersion{{Version: Version}},
|
||||||
|
[]unversioned.GroupVersion{{Version: runtime.APIVersionInternal}},
|
||||||
|
)
|
||||||
|
@ -26,9 +26,12 @@ var Scheme = runtime.NewScheme()
|
|||||||
|
|
||||||
// SchemeGroupVersion is group version used to register these objects
|
// SchemeGroupVersion is group version used to register these objects
|
||||||
// TODO this should be in the "scheduler" group
|
// TODO this should be in the "scheduler" group
|
||||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: ""}
|
var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: runtime.APIVersionInternal}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
if err := Scheme.AddIgnoredConversionType(&unversioned.TypeMeta{}, &unversioned.TypeMeta{}); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
Scheme.AddKnownTypes(SchemeGroupVersion,
|
Scheme.AddKnownTypes(SchemeGroupVersion,
|
||||||
&Policy{},
|
&Policy{},
|
||||||
)
|
)
|
||||||
|
@ -18,7 +18,6 @@ package v1
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
|
||||||
"k8s.io/kubernetes/plugin/pkg/scheduler/api"
|
"k8s.io/kubernetes/plugin/pkg/scheduler/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -26,9 +25,6 @@ import (
|
|||||||
// TODO this should be in the "scheduler" group
|
// TODO this should be in the "scheduler" group
|
||||||
var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
|
var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"}
|
||||||
|
|
||||||
// Codec encodes internal objects to the v1 scheme
|
|
||||||
var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion)
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
api.Scheme.AddKnownTypes(SchemeGroupVersion,
|
api.Scheme.AddKnownTypes(SchemeGroupVersion,
|
||||||
&Policy{},
|
&Policy{},
|
||||||
|
Loading…
Reference in New Issue
Block a user