mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-15 06:43:54 +00:00
Fix version converter
This commit is contained in:
parent
0b4275b6c7
commit
f9e57744d3
@ -72,7 +72,7 @@ func NewCRDFieldManager(objectConverter runtime.ObjectConvertor, objectDefaulter
|
|||||||
groupVersion: gv,
|
groupVersion: gv,
|
||||||
hubVersion: hub,
|
hubVersion: hub,
|
||||||
updater: merge.Updater{
|
updater: merge.Updater{
|
||||||
Converter: internal.NewVersionConverter(internal.DeducedTypeConverter{}, objectConverter, hub),
|
Converter: internal.NewCRDVersionConverter(internal.DeducedTypeConverter{}, objectConverter, hub),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,8 +17,6 @@ limitations under the License.
|
|||||||
package internal
|
package internal
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"sigs.k8s.io/structured-merge-diff/fieldpath"
|
"sigs.k8s.io/structured-merge-diff/fieldpath"
|
||||||
@ -31,7 +29,7 @@ import (
|
|||||||
type versionConverter struct {
|
type versionConverter struct {
|
||||||
typeConverter TypeConverter
|
typeConverter TypeConverter
|
||||||
objectConvertor runtime.ObjectConvertor
|
objectConvertor runtime.ObjectConvertor
|
||||||
hubVersion schema.GroupVersion
|
hubGetter func(from schema.GroupVersion) schema.GroupVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ merge.Converter = &versionConverter{}
|
var _ merge.Converter = &versionConverter{}
|
||||||
@ -41,7 +39,23 @@ func NewVersionConverter(t TypeConverter, o runtime.ObjectConvertor, h schema.Gr
|
|||||||
return &versionConverter{
|
return &versionConverter{
|
||||||
typeConverter: t,
|
typeConverter: t,
|
||||||
objectConvertor: o,
|
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 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
|
return object, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert to internal
|
// Convert to internal
|
||||||
internalObject, err := v.objectConvertor.ConvertToVersion(objectToConvert, v.hubVersion)
|
internalObject, err := v.objectConvertor.ConvertToVersion(objectToConvert, v.hubGetter(fromVersion))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return object, fmt.Errorf("failed to convert object (%v to %v): %v",
|
return object, err
|
||||||
objectToConvert.GetObjectKind().GroupVersionKind(), v.hubVersion, err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert the object into the target version
|
// Convert the object into the target version
|
||||||
convertedObject, err := v.objectConvertor.ConvertToVersion(internalObject, groupVersion)
|
convertedObject, err := v.objectConvertor.ConvertToVersion(internalObject, groupVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return object, fmt.Errorf("failed to convert object (%v to %v): %v",
|
return object, err
|
||||||
internalObject.GetObjectKind().GroupVersionKind(), groupVersion, err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert the object back to a smd typed value and return it.
|
// Convert the object back to a smd typed value and return it.
|
||||||
|
Loading…
Reference in New Issue
Block a user