mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-26 05:03:09 +00:00
remove mutation of liveObj in fieldManager.Apply
also document manager interface
This commit is contained in:
parent
14b67bece4
commit
0963704178
@ -56,10 +56,18 @@ type Manager interface {
|
|||||||
// Update is used when the object has already been merged (non-apply
|
// Update is used when the object has already been merged (non-apply
|
||||||
// use-case), and simply updates the managed fields in the output
|
// use-case), and simply updates the managed fields in the output
|
||||||
// object.
|
// object.
|
||||||
|
// * `liveObj` is not mutated by this function
|
||||||
|
// * `newObj` may be mutated by this function
|
||||||
|
// Returns the new object with managedFields removed, and the object's new
|
||||||
|
// proposed managedFields separately.
|
||||||
Update(liveObj, newObj runtime.Object, managed Managed, manager string) (runtime.Object, Managed, error)
|
Update(liveObj, newObj runtime.Object, managed Managed, manager string) (runtime.Object, Managed, error)
|
||||||
|
|
||||||
// Apply is used when server-side apply is called, as it merges the
|
// Apply is used when server-side apply is called, as it merges the
|
||||||
// object and updates the managed fields.
|
// object and updates the managed fields.
|
||||||
|
// * `liveObj` is not mutated by this function
|
||||||
|
// * `newObj` may be mutated by this function
|
||||||
|
// Returns the new object with managedFields removed, and the object's new
|
||||||
|
// proposed managedFields separately.
|
||||||
Apply(liveObj, appliedObj runtime.Object, managed Managed, fieldManager string, force bool) (runtime.Object, Managed, error)
|
Apply(liveObj, appliedObj runtime.Object, managed Managed, fieldManager string, force bool) (runtime.Object, Managed, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,7 +181,6 @@ func (f *FieldManager) Update(liveObj, newObj runtime.Object, manager string) (o
|
|||||||
return newObj, nil
|
return newObj, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
internal.RemoveObjectManagedFields(liveObj)
|
|
||||||
internal.RemoveObjectManagedFields(newObj)
|
internal.RemoveObjectManagedFields(newObj)
|
||||||
|
|
||||||
if object, managed, err = f.fieldManager.Update(liveObj, newObj, managed, manager); err != nil {
|
if object, managed, err = f.fieldManager.Update(liveObj, newObj, managed, manager); err != nil {
|
||||||
@ -242,8 +249,6 @@ func (f *FieldManager) Apply(liveObj, appliedObj runtime.Object, manager string,
|
|||||||
return nil, fmt.Errorf("failed to decode managed fields: %v", err)
|
return nil, fmt.Errorf("failed to decode managed fields: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal.RemoveObjectManagedFields(liveObj)
|
|
||||||
|
|
||||||
object, managed, err = f.fieldManager.Apply(liveObj, appliedObj, managed, manager, force)
|
object, managed, err = f.fieldManager.Apply(liveObj, appliedObj, managed, manager, force)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if conflicts, ok := err.(merge.Conflicts); ok {
|
if conflicts, ok := err.(merge.Conflicts); ok {
|
||||||
|
@ -21,6 +21,7 @@ import (
|
|||||||
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
|
||||||
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -80,7 +81,8 @@ func (f *managedFieldsUpdater) Apply(liveObj, appliedObj runtime.Object, managed
|
|||||||
managed.Times()[fieldManager] = &metav1.Time{Time: time.Now().UTC()}
|
managed.Times()[fieldManager] = &metav1.Time{Time: time.Now().UTC()}
|
||||||
}
|
}
|
||||||
if object == nil {
|
if object == nil {
|
||||||
object = liveObj
|
object = liveObj.DeepCopyObject()
|
||||||
|
internal.RemoveObjectManagedFields(object)
|
||||||
}
|
}
|
||||||
return object, managed, nil
|
return object, managed, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user