Skip to content

Commit 659afe9

Browse files
authored
✨ Add HasOwnerReference (#2882)
* add HasOwnerReference Signed-off-by: sivchari <shibuuuu5@gmail.com> * revise API Signed-off-by: sivchari <shibuuuu5@gmail.com> * add new suite test Signed-off-by: sivchari <shibuuuu5@gmail.com> * fix: test Signed-off-by: sivchari <shibuuuu5@gmail.com> --------- Signed-off-by: sivchari <shibuuuu5@gmail.com>
1 parent 62834f9 commit 659afe9

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

pkg/controller/controllerutil/controllerutil.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,21 @@ func HasControllerReference(object metav1.Object) bool {
181181
return false
182182
}
183183

184+
// HasOwnerReference returns true if the owners list contains an owner reference
185+
// that matches the object's group, kind, and name.
186+
func HasOwnerReference(ownerRefs []metav1.OwnerReference, obj client.Object, scheme *runtime.Scheme) (bool, error) {
187+
gvk, err := apiutil.GVKForObject(obj, scheme)
188+
if err != nil {
189+
return false, err
190+
}
191+
idx := indexOwnerRef(ownerRefs, metav1.OwnerReference{
192+
APIVersion: gvk.GroupVersion().String(),
193+
Name: obj.GetName(),
194+
Kind: gvk.Kind,
195+
})
196+
return idx != -1, nil
197+
}
198+
184199
// RemoveControllerReference removes an owner reference where the controller
185200
// equals true
186201
func RemoveControllerReference(owner, object metav1.Object, scheme *runtime.Scheme) error {

pkg/controller/controllerutil/controllerutil_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -957,6 +957,33 @@ var _ = Describe("Controllerutil", func() {
957957
Expect(controllerutil.ContainsFinalizer(deploy, testFinalizer)).To(BeFalse())
958958
})
959959
})
960+
961+
Describe("HasOwnerReference", func() {
962+
It("should return true if the object has the owner reference", func() {
963+
rs := &appsv1.ReplicaSet{
964+
ObjectMeta: metav1.ObjectMeta{Name: "foo", UID: "foo-uid"},
965+
}
966+
dep := &extensionsv1beta1.Deployment{
967+
ObjectMeta: metav1.ObjectMeta{Name: "foo", UID: "foo-uid"},
968+
}
969+
Expect(controllerutil.SetOwnerReference(dep, rs, scheme.Scheme)).ToNot(HaveOccurred())
970+
b, err := controllerutil.HasOwnerReference(rs.GetOwnerReferences(), dep, scheme.Scheme)
971+
Expect(err).NotTo(HaveOccurred())
972+
Expect(b).To(BeTrue())
973+
})
974+
975+
It("should return false if the object does not have the owner reference", func() {
976+
rs := &appsv1.ReplicaSet{
977+
ObjectMeta: metav1.ObjectMeta{Name: "foo", UID: "foo-uid"},
978+
}
979+
dep := &extensionsv1beta1.Deployment{
980+
ObjectMeta: metav1.ObjectMeta{Name: "foo", UID: "foo-uid"},
981+
}
982+
b, err := controllerutil.HasOwnerReference(rs.GetOwnerReferences(), dep, scheme.Scheme)
983+
Expect(err).NotTo(HaveOccurred())
984+
Expect(b).To(BeFalse())
985+
})
986+
})
960987
})
961988
})
962989

0 commit comments

Comments
 (0)