Skip to content

Commit 34aaa05

Browse files
committed
remove owner passed in to RemoveControlleReference only when that owner controller equals true
Signed-off-by: Troy Connor <troy0820@users.noreply.github.com>
1 parent 2154ffb commit 34aaa05

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

pkg/controller/controllerutil/controllerutil.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ func RemoveOwnerReference(owner, object metav1.Object, scheme *runtime.Scheme) e
142142
APIVersion: gvk.GroupVersion().String(),
143143
Name: owner.GetName(),
144144
Kind: gvk.Kind,
145+
Controller: ptr.To(true),
145146
})
146147
if index == -1 {
147148
return fmt.Errorf("%T does not have an owner reference for %T", object, owner)
@@ -171,7 +172,26 @@ func RemoveControllerReference(owner, object metav1.Object, scheme *runtime.Sche
171172
if ok := HasControllerReference(object); !ok {
172173
return fmt.Errorf("%T does not have a owner reference with controller equals true", object)
173174
}
174-
return RemoveOwnerReference(owner, object, scheme)
175+
ro, ok := owner.(runtime.Object)
176+
if !ok {
177+
return fmt.Errorf("%T is not a runtime.Object, cannot call RemoveControllerReference", owner)
178+
}
179+
gvk, err := apiutil.GVKForObject(ro, scheme)
180+
if err != nil {
181+
return err
182+
}
183+
ownerRefs := object.GetOwnerReferences()
184+
index := indexOwnerRef(ownerRefs, metav1.OwnerReference{
185+
APIVersion: gvk.GroupVersion().String(),
186+
Name: owner.GetName(),
187+
Kind: gvk.Kind,
188+
})
189+
if index == -1 {
190+
return fmt.Errorf("%T does not have an controller reference for %T", object, owner)
191+
}
192+
ownerRefs = append(ownerRefs[:index], ownerRefs[index+1:]...)
193+
object.SetOwnerReferences(ownerRefs)
194+
return nil
175195
}
176196

177197
func upsertOwnerRef(ref metav1.OwnerReference, object metav1.Object) {

0 commit comments

Comments
 (0)