From f9e57744d3e760b1473cb22e655d20c254af03b6 Mon Sep 17 00:00:00 2001 From: jennybuckley Date: Thu, 7 Mar 2019 17:44:21 -0800 Subject: [PATCH] Fix version converter --- .../handlers/fieldmanager/fieldmanager.go | 2 +- .../fieldmanager/internal/versionconverter.go | 33 +++++++++++++------ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanager.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanager.go index f761c8b87e0..7879dacb477 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanager.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanager.go @@ -72,7 +72,7 @@ func NewCRDFieldManager(objectConverter runtime.ObjectConvertor, objectDefaulter groupVersion: gv, hubVersion: hub, updater: merge.Updater{ - Converter: internal.NewVersionConverter(internal.DeducedTypeConverter{}, objectConverter, hub), + Converter: internal.NewCRDVersionConverter(internal.DeducedTypeConverter{}, objectConverter, hub), }, } } diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/versionconverter.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/versionconverter.go index 66c63c38772..67d058b5264 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/versionconverter.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/versionconverter.go @@ -17,8 +17,6 @@ limitations under the License. package internal import ( - "fmt" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "sigs.k8s.io/structured-merge-diff/fieldpath" @@ -31,7 +29,7 @@ import ( type versionConverter struct { typeConverter TypeConverter objectConvertor runtime.ObjectConvertor - hubVersion schema.GroupVersion + hubGetter func(from schema.GroupVersion) schema.GroupVersion } var _ merge.Converter = &versionConverter{} @@ -41,7 +39,23 @@ func NewVersionConverter(t TypeConverter, o runtime.ObjectConvertor, h schema.Gr return &versionConverter{ typeConverter: t, objectConvertor: o, - hubVersion: h, + hubGetter: func(from schema.GroupVersion) schema.GroupVersion { + return schema.GroupVersion{ + Group: from.Group, + Version: h.Version, + } + }, + } +} + +// NewCRDVersionConverter builds a VersionConverter for CRDs from a TypeConverter and an ObjectConvertor. +func NewCRDVersionConverter(t TypeConverter, o runtime.ObjectConvertor, h schema.GroupVersion) merge.Converter { + return &versionConverter{ + typeConverter: t, + objectConvertor: o, + hubGetter: func(from schema.GroupVersion) schema.GroupVersion { + return h + }, } } @@ -60,22 +74,21 @@ func (v *versionConverter) Convert(object typed.TypedValue, version fieldpath.AP } // If attempting to convert to the same version as we already have, just return it. - if objectToConvert.GetObjectKind().GroupVersionKind().GroupVersion() == groupVersion { + fromVersion := objectToConvert.GetObjectKind().GroupVersionKind().GroupVersion() + if fromVersion == groupVersion { return object, nil } // Convert to internal - internalObject, err := v.objectConvertor.ConvertToVersion(objectToConvert, v.hubVersion) + internalObject, err := v.objectConvertor.ConvertToVersion(objectToConvert, v.hubGetter(fromVersion)) if err != nil { - return object, fmt.Errorf("failed to convert object (%v to %v): %v", - objectToConvert.GetObjectKind().GroupVersionKind(), v.hubVersion, err) + return object, err } // Convert the object into the target version convertedObject, err := v.objectConvertor.ConvertToVersion(internalObject, groupVersion) if err != nil { - return object, fmt.Errorf("failed to convert object (%v to %v): %v", - internalObject.GetObjectKind().GroupVersionKind(), groupVersion, err) + return object, err } // Convert the object back to a smd typed value and return it.