// TODO: enableVersions should be centralized rather than spread in each API // group. func enableVersions(externalVersions []unversioned.GroupVersion) error { addVersionsToScheme(externalVersions...) preferredExternalVersion := externalVersions[0] groupMeta := latest.GroupMeta{ GroupVersion: preferredExternalVersion, GroupVersions: externalVersions, Codec: runtime.CodecFor(api.Scheme, preferredExternalVersion), RESTMapper: newRESTMapper(externalVersions), SelfLinker: runtime.SelfLinker(accessor), InterfacesFor: interfacesFor, } if err := latest.RegisterGroup(groupMeta); err != nil { return err } api.RegisterRESTMapper(groupMeta.RESTMapper) return nil }
// Based on: https://github.com/openshift/origin/blob/master/pkg/api/compatibility_test.go // // TestCompatibility reencodes the input using the codec for the given // version and checks for the presence of the expected keys and absent // keys in the resulting JSON. func TestCompatibility( t *testing.T, version unversioned.GroupVersion, input []byte, validator func(obj runtime.Object) field.ErrorList, expectedKeys map[string]string, absentKeys []string, ) { // Decode codec := runtime.CodecFor(api.Scheme, version) obj, err := runtime.Decode(codec, input) if err != nil { t.Fatalf("Unexpected error: %v", err) } // Validate errs := validator(obj) if len(errs) != 0 { t.Fatalf("Unexpected validation errors: %v", errs) } // Encode output, err := runtime.Encode(codec, obj) if err != nil { t.Fatalf("Unexpected error: %v", err) } // Validate old and new fields are encoded generic := map[string]interface{}{} if err := json.Unmarshal(output, &generic); err != nil { t.Fatalf("Unexpected error: %v", err) } hasError := false for k, expectedValue := range expectedKeys { keys := strings.Split(k, ".") if actualValue, ok, err := getJSONValue(generic, keys...); err != nil || !ok { t.Errorf("Unexpected error for %s: %v", k, err) hasError = true } else if !reflect.DeepEqual(expectedValue, fmt.Sprintf("%v", actualValue)) { hasError = true t.Errorf("Unexpected value for %v: expected %v, got %v", k, expectedValue, actualValue) } } for _, absentKey := range absentKeys { keys := strings.Split(absentKey, ".") actualValue, ok, err := getJSONValue(generic, keys...) if err == nil || ok { t.Errorf("Unexpected value found for for key %s: %v", absentKey, actualValue) hasError = true } } if hasError { printer := new(kubectl.JSONPrinter) printer.PrintObj(obj, os.Stdout) t.Logf("2: Encoded value: %#v", string(output)) } }
package v1alpha1 import ( "revision.aeip.apigee.net/spatel/k8s-influxdb/influxdb/Godeps/_workspace/src/k8s.io/kubernetes/pkg/api" "revision.aeip.apigee.net/spatel/k8s-influxdb/influxdb/Godeps/_workspace/src/k8s.io/kubernetes/pkg/api/unversioned" "revision.aeip.apigee.net/spatel/k8s-influxdb/influxdb/Godeps/_workspace/src/k8s.io/kubernetes/pkg/api/v1" "revision.aeip.apigee.net/spatel/k8s-influxdb/influxdb/Godeps/_workspace/src/k8s.io/kubernetes/pkg/runtime" ) // GroupName is the group name use in this package const GroupName = "metrics" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1alpha1"} var Codec = runtime.CodecFor(api.Scheme, SchemeGroupVersion) func AddToScheme(scheme *runtime.Scheme) { // Add the API to Scheme. addKnownTypes(scheme) } // Adds the list of known types to api.Scheme. func addKnownTypes(scheme *runtime.Scheme) { scheme.AddKnownTypes(SchemeGroupVersion, &RawNode{}, &RawPod{}, &v1.DeleteOptions{}, ) }
package api import ( "revision.aeip.apigee.net/spatel/k8s-influxdb/influxdb/Godeps/_workspace/src/k8s.io/kubernetes/pkg/api/resource" "revision.aeip.apigee.net/spatel/k8s-influxdb/influxdb/Godeps/_workspace/src/k8s.io/kubernetes/pkg/api/unversioned" "revision.aeip.apigee.net/spatel/k8s-influxdb/influxdb/Godeps/_workspace/src/k8s.io/kubernetes/pkg/conversion" "revision.aeip.apigee.net/spatel/k8s-influxdb/influxdb/Godeps/_workspace/src/k8s.io/kubernetes/pkg/fields" "revision.aeip.apigee.net/spatel/k8s-influxdb/influxdb/Godeps/_workspace/src/k8s.io/kubernetes/pkg/labels" "revision.aeip.apigee.net/spatel/k8s-influxdb/influxdb/Godeps/_workspace/src/k8s.io/kubernetes/pkg/runtime" "revision.aeip.apigee.net/spatel/k8s-influxdb/influxdb/Godeps/_workspace/src/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() { Scheme.AddDefaultingFuncs( func(obj *ListOptions) { if obj.LabelSelector == nil { obj.LabelSelector = labels.Everything() } if obj.FieldSelector == nil { obj.FieldSelector = fields.Everything() } }, ) Scheme.AddConversionFuncs( Convert_unversioned_TypeMeta_To_unversioned_TypeMeta, Convert_unversioned_ListMeta_To_unversioned_ListMeta,