FieldManager: use hub version everywhere

This commit is contained in:
Antoine Pelisse
2018-12-18 10:14:17 -08:00
parent ce014899b1
commit 00dd33d333
4 changed files with 12 additions and 12 deletions

View File

@@ -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)
}

View File

@@ -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

View File

@@ -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 {

View File

@@ -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)