github.com/percona/percona-xtradb-cluster-operator@v1.14.0/pkg/k8s/setowner.go (about) 1 package k8s 2 3 import ( 4 "k8s.io/apimachinery/pkg/api/meta" 5 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 6 "k8s.io/apimachinery/pkg/runtime" 7 "sigs.k8s.io/controller-runtime/pkg/client/apiutil" 8 ) 9 10 // SetControllerReference sets owner as a owner for the object obj 11 func SetControllerReference(owner runtime.Object, obj metav1.Object, scheme *runtime.Scheme) error { 12 ownerRef, err := OwnerRef(owner, scheme) 13 if err != nil { 14 return err 15 } 16 obj.SetOwnerReferences(append(obj.GetOwnerReferences(), ownerRef)) 17 return nil 18 } 19 20 // OwnerRef returns OwnerReference to object 21 func OwnerRef(ro runtime.Object, scheme *runtime.Scheme) (metav1.OwnerReference, error) { 22 gvk, err := apiutil.GVKForObject(ro, scheme) 23 if err != nil { 24 return metav1.OwnerReference{}, err 25 } 26 27 trueVar := true 28 29 ca, err := meta.Accessor(ro) 30 if err != nil { 31 return metav1.OwnerReference{}, err 32 } 33 34 return metav1.OwnerReference{ 35 APIVersion: gvk.GroupVersion().String(), 36 Kind: gvk.Kind, 37 Name: ca.GetName(), 38 UID: ca.GetUID(), 39 Controller: &trueVar, 40 }, nil 41 }