Skip to content

Commit f9e5774

Browse files
author
jennybuckley
committed
Fix version converter
1 parent 0b4275b commit f9e5774

File tree

2 files changed

+24
-11
lines changed

2 files changed

+24
-11
lines changed

staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanager.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ func NewCRDFieldManager(objectConverter runtime.ObjectConvertor, objectDefaulter
7272
groupVersion: gv,
7373
hubVersion: hub,
7474
updater: merge.Updater{
75-
Converter: internal.NewVersionConverter(internal.DeducedTypeConverter{}, objectConverter, hub),
75+
Converter: internal.NewCRDVersionConverter(internal.DeducedTypeConverter{}, objectConverter, hub),
7676
},
7777
}
7878
}

staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/versionconverter.go

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ limitations under the License.
1717
package internal
1818

1919
import (
20-
"fmt"
21-
2220
"k8s.io/apimachinery/pkg/runtime"
2321
"k8s.io/apimachinery/pkg/runtime/schema"
2422
"sigs.k8s.io/structured-merge-diff/fieldpath"
@@ -31,7 +29,7 @@ import (
3129
type versionConverter struct {
3230
typeConverter TypeConverter
3331
objectConvertor runtime.ObjectConvertor
34-
hubVersion schema.GroupVersion
32+
hubGetter func(from schema.GroupVersion) schema.GroupVersion
3533
}
3634

3735
var _ merge.Converter = &versionConverter{}
@@ -41,7 +39,23 @@ func NewVersionConverter(t TypeConverter, o runtime.ObjectConvertor, h schema.Gr
4139
return &versionConverter{
4240
typeConverter: t,
4341
objectConvertor: o,
44-
hubVersion: h,
42+
hubGetter: func(from schema.GroupVersion) schema.GroupVersion {
43+
return schema.GroupVersion{
44+
Group: from.Group,
45+
Version: h.Version,
46+
}
47+
},
48+
}
49+
}
50+
51+
// NewCRDVersionConverter builds a VersionConverter for CRDs from a TypeConverter and an ObjectConvertor.
52+
func NewCRDVersionConverter(t TypeConverter, o runtime.ObjectConvertor, h schema.GroupVersion) merge.Converter {
53+
return &versionConverter{
54+
typeConverter: t,
55+
objectConvertor: o,
56+
hubGetter: func(from schema.GroupVersion) schema.GroupVersion {
57+
return h
58+
},
4559
}
4660
}
4761

@@ -60,22 +74,21 @@ func (v *versionConverter) Convert(object typed.TypedValue, version fieldpath.AP
6074
}
6175

6276
// If attempting to convert to the same version as we already have, just return it.
63-
if objectToConvert.GetObjectKind().GroupVersionKind().GroupVersion() == groupVersion {
77+
fromVersion := objectToConvert.GetObjectKind().GroupVersionKind().GroupVersion()
78+
if fromVersion == groupVersion {
6479
return object, nil
6580
}
6681

6782
// Convert to internal
68-
internalObject, err := v.objectConvertor.ConvertToVersion(objectToConvert, v.hubVersion)
83+
internalObject, err := v.objectConvertor.ConvertToVersion(objectToConvert, v.hubGetter(fromVersion))
6984
if err != nil {
70-
return object, fmt.Errorf("failed to convert object (%v to %v): %v",
71-
objectToConvert.GetObjectKind().GroupVersionKind(), v.hubVersion, err)
85+
return object, err
7286
}
7387

7488
// Convert the object into the target version
7589
convertedObject, err := v.objectConvertor.ConvertToVersion(internalObject, groupVersion)
7690
if err != nil {
77-
return object, fmt.Errorf("failed to convert object (%v to %v): %v",
78-
internalObject.GetObjectKind().GroupVersionKind(), groupVersion, err)
91+
return object, err
7992
}
8093

8194
// Convert the object back to a smd typed value and return it.

0 commit comments

Comments
 (0)