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  }