Skip to content

Commit 23c63f7

Browse files
author
邹默
committed
fix: conflict with server-side apply
1 parent da48e39 commit 23c63f7

1 file changed

Lines changed: 11 additions & 4 deletions

File tree

client/clientsideapply/clientapply.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,21 +46,28 @@ func (f *clientApplyFieldManager) Apply(liveObj, appliedObj client.Object, field
4646
appliedObj.GetObjectKind().SetGroupVersionKind(f.gvk)
4747
}
4848

49+
// we need to store server-side managed fields and clean managedFields in liveObj to let client-side apply work
50+
originManagedFields := liveObj.GetManagedFields()
51+
if len(originManagedFields) > 0 {
52+
liveObj.SetManagedFields(nil)
53+
}
54+
4955
f.decodeManagedFieldsFromAnnotation(liveObj)
5056
obj, err := f.fieldmanager.Apply(liveObj, appliedObj, fieldManager, force)
5157
if err != nil {
5258
return nil, err
5359
}
5460
clientObj := obj.(client.Object)
5561
f.encodeManagedFieldsFromAnnotation(clientObj)
62+
63+
// restore server-side managed fields
64+
if len(originManagedFields) > 0 {
65+
clientObj.SetManagedFields(originManagedFields)
66+
}
5667
return clientObj, nil
5768
}
5869

5970
func (f *clientApplyFieldManager) decodeManagedFieldsFromAnnotation(obj client.Object) {
60-
if len(obj.GetManagedFields()) > 0 {
61-
// managedFields already exist, skip
62-
return
63-
}
6471
// get managed fields from annotation
6572
annotations := obj.GetAnnotations()
6673
if len(annotations) == 0 {

0 commit comments

Comments
 (0)