From 25bf12395b36600c0f927fba3b5c21df7131bc10 Mon Sep 17 00:00:00 2001 From: Troy Connor Date: Fri, 24 Nov 2023 10:09:24 -0500 Subject: [PATCH] remove owner passed in to RemoveControlleReference only when that owner controller equals true Signed-off-by: Troy Connor --- .../controllerutil/controllerutil.go | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/pkg/controller/controllerutil/controllerutil.go b/pkg/controller/controllerutil/controllerutil.go index 7b10d78582..c8e30bd173 100644 --- a/pkg/controller/controllerutil/controllerutil.go +++ b/pkg/controller/controllerutil/controllerutil.go @@ -171,7 +171,27 @@ func RemoveControllerReference(owner, object metav1.Object, scheme *runtime.Sche if ok := HasControllerReference(object); !ok { return fmt.Errorf("%T does not have a owner reference with controller equals true", object) } - return RemoveOwnerReference(owner, object, scheme) + ro, ok := owner.(runtime.Object) + if !ok { + return fmt.Errorf("%T is not a runtime.Object, cannot call RemoveControllerReference", owner) + } + gvk, err := apiutil.GVKForObject(ro, scheme) + if err != nil { + return err + } + ownerRefs := object.GetOwnerReferences() + index := indexOwnerRef(ownerRefs, metav1.OwnerReference{ + APIVersion: gvk.GroupVersion().String(), + Name: owner.GetName(), + Kind: gvk.Kind, + Controller: ptr.To(true), + }) + if index == -1 { + return fmt.Errorf("%T does not have an controller reference for %T", object, owner) + } + ownerRefs = append(ownerRefs[:index], ownerRefs[index+1:]...) + object.SetOwnerReferences(ownerRefs) + return nil } func upsertOwnerRef(ref metav1.OwnerReference, object metav1.Object) {