Skip to content

Commit 005efae

Browse files
committed
fix management of finalizer for referenced objects
Signed-off-by: Helder Santana <[email protected]>
1 parent 923320f commit 005efae

File tree

2 files changed

+33
-8
lines changed

2 files changed

+33
-8
lines changed

internal/controller/object/object.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -799,18 +799,17 @@ func (f *objFinalizer) AddFinalizer(ctx context.Context, res resource.Object) er
799799
return errors.New(errNotKubernetesObject)
800800
}
801801

802-
if meta.FinalizerExists(obj, objFinalizerName) {
803-
return nil
804-
}
805-
meta.AddFinalizer(obj, objFinalizerName)
802+
if !meta.FinalizerExists(obj, objFinalizerName) {
803+
meta.AddFinalizer(obj, objFinalizerName)
806804

807-
err := f.client.Update(ctx, obj)
808-
if err != nil {
809-
return errors.Wrap(err, errAddFinalizer)
805+
err := f.client.Update(ctx, obj)
806+
if err != nil {
807+
return errors.Wrap(err, errAddFinalizer)
808+
}
810809
}
811810

812811
// Add finalizer to referenced resources if not exists
813-
err = f.handleRefFinalizer(ctx, obj, func(
812+
err := f.handleRefFinalizer(ctx, obj, func(
814813
ctx context.Context, res *unstructured.Unstructured, finalizer string,
815814
) error {
816815
if !meta.FinalizerExists(res, finalizer) {

internal/controller/object/object_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1066,6 +1066,32 @@ func TestAddFinalizer(t *testing.T) {
10661066
err: nil,
10671067
},
10681068
},
1069+
"SuccessfullyAddReferenceFinalizerOnRetry": {
1070+
args: args{
1071+
mg: kubernetesObject(func(obj *v1alpha2.Object) {
1072+
obj.ObjectMeta.Finalizers = append(obj.ObjectMeta.Finalizers, objFinalizerName)
1073+
obj.Spec.References = objectReferences()
1074+
}),
1075+
client: resource.ClientApplicator{
1076+
Client: &test.MockClient{
1077+
MockGet: test.NewMockGetFn(nil, func(obj client.Object) error {
1078+
*obj.(*unstructured.Unstructured) = *referenceObject()
1079+
return nil
1080+
}),
1081+
MockUpdate: test.NewMockUpdateFn(nil, func(obj client.Object) error {
1082+
name := obj.GetName()
1083+
if name == testReferenceObjectName {
1084+
return nil
1085+
}
1086+
return errBoom
1087+
}),
1088+
},
1089+
},
1090+
},
1091+
want: want{
1092+
err: nil,
1093+
},
1094+
},
10691095
}
10701096
for name, tc := range cases {
10711097
t.Run(name, func(t *testing.T) {

0 commit comments

Comments
 (0)