@@ -17,8 +17,6 @@ limitations under the License.
17
17
package internal
18
18
19
19
import (
20
- "fmt"
21
-
22
20
"k8s.io/apimachinery/pkg/runtime"
23
21
"k8s.io/apimachinery/pkg/runtime/schema"
24
22
"sigs.k8s.io/structured-merge-diff/fieldpath"
@@ -31,7 +29,7 @@ import (
31
29
type versionConverter struct {
32
30
typeConverter TypeConverter
33
31
objectConvertor runtime.ObjectConvertor
34
- hubVersion schema.GroupVersion
32
+ hubGetter func ( from schema. GroupVersion ) schema.GroupVersion
35
33
}
36
34
37
35
var _ merge.Converter = & versionConverter {}
@@ -41,7 +39,23 @@ func NewVersionConverter(t TypeConverter, o runtime.ObjectConvertor, h schema.Gr
41
39
return & versionConverter {
42
40
typeConverter : t ,
43
41
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
+ },
45
59
}
46
60
}
47
61
@@ -60,22 +74,21 @@ func (v *versionConverter) Convert(object typed.TypedValue, version fieldpath.AP
60
74
}
61
75
62
76
// 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 {
64
79
return object , nil
65
80
}
66
81
67
82
// Convert to internal
68
- internalObject , err := v .objectConvertor .ConvertToVersion (objectToConvert , v .hubVersion )
83
+ internalObject , err := v .objectConvertor .ConvertToVersion (objectToConvert , v .hubGetter ( fromVersion ) )
69
84
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
72
86
}
73
87
74
88
// Convert the object into the target version
75
89
convertedObject , err := v .objectConvertor .ConvertToVersion (internalObject , groupVersion )
76
90
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
79
92
}
80
93
81
94
// Convert the object back to a smd typed value and return it.
0 commit comments