Unverified Commit 8fb909a6 authored by Matt Farina's avatar Matt Farina Committed by GitHub

Merge pull request #3459 from mattfarina/fix/3382

fix(api-machinery): Fixes patching for unstructured objects
parents f61a3cff e6137ff0
...@@ -399,14 +399,25 @@ func createPatch(mapping *meta.RESTMapping, target, current runtime.Object) ([]b ...@@ -399,14 +399,25 @@ func createPatch(mapping *meta.RESTMapping, target, current runtime.Object) ([]b
return nil, types.StrategicMergePatchType, fmt.Errorf("serializing target configuration: %s", err) return nil, types.StrategicMergePatchType, fmt.Errorf("serializing target configuration: %s", err)
} }
// While different objects need different merge types, the parent function
// that calls this does not try to create a patch when the data (first
// returned object) is nil. We can skip calculating the the merge type as
// the returned merge type is ignored.
if apiequality.Semantic.DeepEqual(oldData, newData) { if apiequality.Semantic.DeepEqual(oldData, newData) {
return nil, types.StrategicMergePatchType, nil return nil, types.StrategicMergePatchType, nil
} }
// Get a versioned object // Get a versioned object
versionedObject, err := mapping.ConvertToVersion(target, mapping.GroupVersionKind.GroupVersion()) versionedObject, err := mapping.ConvertToVersion(target, mapping.GroupVersionKind.GroupVersion())
// Unstructured objects, such as CRDs, may not have an not registered error
// returned from ConvertToVersion. Anything that's unstructured should
// use the jsonpatch.CreateMergePatch. Strategic Merge Patch is not supported
// on objects like CRDs.
_, isUnstructured := versionedObject.(runtime.Unstructured)
switch { switch {
case runtime.IsNotRegisteredError(err): case runtime.IsNotRegisteredError(err), isUnstructured:
// fall back to generic JSON merge patch // fall back to generic JSON merge patch
patch, err := jsonpatch.CreateMergePatch(oldData, newData) patch, err := jsonpatch.CreateMergePatch(oldData, newData)
return patch, types.MergePatchType, err return patch, types.MergePatchType, err
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment