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