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 92b8f202798..d3e303f3feb 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 @@ -36,12 +36,13 @@ type FieldManager struct { objectConverter runtime.ObjectConvertor objectDefaulter runtime.ObjectDefaulter groupVersion schema.GroupVersion + hubVersion schema.GroupVersion updater merge.Updater } // NewFieldManager creates a new FieldManager that merges apply requests // and update managed fields for other types of requests. -func NewFieldManager(models openapiproto.Models, objectConverter runtime.ObjectConvertor, objectDefaulter runtime.ObjectDefaulter, gv schema.GroupVersion) (*FieldManager, error) { +func NewFieldManager(models openapiproto.Models, objectConverter runtime.ObjectConvertor, objectDefaulter runtime.ObjectDefaulter, gv schema.GroupVersion, hub schema.GroupVersion) (*FieldManager, error) { typeConverter, err := internal.NewTypeConverter(models) if err != nil { return nil, err @@ -51,8 +52,9 @@ func NewFieldManager(models openapiproto.Models, objectConverter runtime.ObjectC objectConverter: objectConverter, objectDefaulter: objectDefaulter, groupVersion: gv, + hubVersion: hub, updater: merge.Updater{ - Converter: internal.NewVersionConverter(typeConverter, objectConverter), + Converter: internal.NewVersionConverter(typeConverter, objectConverter, hub), }, }, nil } @@ -166,5 +168,5 @@ func (f *FieldManager) toVersioned(obj runtime.Object) (runtime.Object, error) { } func (f *FieldManager) toUnversioned(obj runtime.Object) (runtime.Object, error) { - return f.objectConverter.ConvertToVersion(obj, schema.GroupVersion{Group: f.groupVersion.Group, Version: runtime.APIVersionInternal}) + return f.objectConverter.ConvertToVersion(obj, f.hubVersion) } 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 d2578c131f3..66ea5016aab 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 @@ -31,15 +31,17 @@ import ( type versionConverter struct { typeConverter TypeConverter objectConvertor runtime.ObjectConvertor + hubVersion schema.GroupVersion } var _ merge.Converter = &versionConverter{} // NewVersionConverter builds a VersionConverter from a TypeConverter and an ObjectConvertor. -func NewVersionConverter(t TypeConverter, o runtime.ObjectConvertor) merge.Converter { +func NewVersionConverter(t TypeConverter, o runtime.ObjectConvertor, h schema.GroupVersion) merge.Converter { return &versionConverter{ typeConverter: t, objectConvertor: o, + hubVersion: h, } } @@ -58,14 +60,10 @@ func (v *versionConverter) Convert(object typed.TypedValue, version fieldpath.AP } // Convert to internal - internalVersion := schema.GroupVersion{ - Group: objectToConvert.GetObjectKind().GroupVersionKind().Group, - Version: runtime.APIVersionInternal, - } - internalObject, err := v.objectConvertor.ConvertToVersion(objectToConvert, internalVersion) + internalObject, err := v.objectConvertor.ConvertToVersion(objectToConvert, v.hubVersion) if err != nil { return object, fmt.Errorf("failed to convert object (%v to %v): %v", - objectToConvert.GetObjectKind().GroupVersionKind(), internalVersion, err) + objectToConvert.GetObjectKind().GroupVersionKind(), v.hubVersion, err) } // Convert the object into the target version diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/versionconverter_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/versionconverter_test.go index f710f7ec349..18365f6d3a1 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/versionconverter_test.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/versionconverter_test.go @@ -25,7 +25,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal" - "k8s.io/kube-openapi/pkg/util/proto" "sigs.k8s.io/structured-merge-diff/fieldpath" ) @@ -48,7 +47,7 @@ func TestVersionConverter(t *testing.T) { gvkForVersion("v1beta1"): objForGroupVersion("apps/v1beta1"), gvkForVersion("v1"): objForGroupVersion("apps/v1"), } - vc := internal.NewVersionConverter(tc, oc) + vc := internal.NewVersionConverter(tc, oc, schema.GroupVersion{Group: "apps", Version: runtime.APIVersionInternal}) input, err := tc.ObjectToTyped(objForGroupVersion("apps/v1beta1")) if err != nil { diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/installer.go b/staging/src/k8s.io/apiserver/pkg/endpoints/installer.go index c9bcbd4628e..0a6c83ad0d1 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/installer.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/installer.go @@ -521,6 +521,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag a.group.UnsafeConvertor, a.group.Defaulter, fqKindToRegister.GroupVersion(), + reqScope.HubGroupVersion, ) if err != nil { return nil, fmt.Errorf("failed to create field manager: %v", err)