@@ -265,14 +265,14 @@ func (r *Reconciler) reconcileCRwithConfig(ctx context.Context, service *operato
265265 if err != nil && ! apierrors .IsNotFound (err ) {
266266 merr .Add (errors .Wrapf (err , "failed to get k8s resource %s/%s" , k8sResNs , res .Name ))
267267 } else if apierrors .IsNotFound (err ) {
268- if err := r .createK8sResource (ctx , k8sRes , res .Data , res .Labels , res .Annotations ); err != nil {
268+ if err := r .createK8sResource (ctx , k8sRes , res .Data , res .Labels , res .Annotations , & res . OwnerReferences ); err != nil {
269269 merr .Add (err )
270270 }
271271 } else {
272272 if res .Force {
273273 // Update k8s resource
274274 klog .V (3 ).Info ("Found existing k8s resource: " + res .Name )
275- if err := r .updateK8sResource (ctx , k8sRes , res .Data , res .Labels , res .Annotations ); err != nil {
275+ if err := r .updateK8sResource (ctx , k8sRes , res .Data , res .Labels , res .Annotations , & res . OwnerReferences ); err != nil {
276276 merr .Add (err )
277277 }
278278 } else {
@@ -939,7 +939,7 @@ func (r *Reconciler) checkCustomResource(ctx context.Context, requestInstance *o
939939 return nil
940940}
941941
942- func (r * Reconciler ) createK8sResource (ctx context.Context , k8sResTemplate unstructured.Unstructured , k8sResConfig * runtime.RawExtension , newLabels , newAnnotations map [string ]string ) error {
942+ func (r * Reconciler ) createK8sResource (ctx context.Context , k8sResTemplate unstructured.Unstructured , k8sResConfig * runtime.RawExtension , newLabels , newAnnotations map [string ]string , ownerReferences * []operatorv1alpha1. OwnerReference ) error {
943943 kind := k8sResTemplate .GetKind ()
944944 name := k8sResTemplate .GetName ()
945945 namespace := k8sResTemplate .GetNamespace ()
@@ -959,6 +959,9 @@ func (r *Reconciler) createK8sResource(ctx context.Context, k8sResTemplate unstr
959959 r .EnsureLabel (k8sResTemplate , map [string ]string {constant .OpreqLabel : "true" })
960960 r .EnsureLabel (k8sResTemplate , newLabels )
961961 r .EnsureAnnotation (k8sResTemplate , newAnnotations )
962+ if err := r .setOwnerReferences (ctx , & k8sResTemplate , ownerReferences ); err != nil {
963+ return errors .Wrap (err , "failed to set ownerReferences for k8s resource" )
964+ }
962965
963966 // Create the k8s resource
964967 err := r .Create (ctx , & k8sResTemplate )
@@ -971,7 +974,7 @@ func (r *Reconciler) createK8sResource(ctx context.Context, k8sResTemplate unstr
971974 return nil
972975}
973976
974- func (r * Reconciler ) updateK8sResource (ctx context.Context , existingK8sRes unstructured.Unstructured , k8sResConfig * runtime.RawExtension , newLabels , newAnnotations map [string ]string ) error {
977+ func (r * Reconciler ) updateK8sResource (ctx context.Context , existingK8sRes unstructured.Unstructured , k8sResConfig * runtime.RawExtension , newLabels , newAnnotations map [string ]string , ownerReferences * []operatorv1alpha1. OwnerReference ) error {
975978 kind := existingK8sRes .GetKind ()
976979 apiversion := existingK8sRes .GetAPIVersion ()
977980 name := existingK8sRes .GetName ()
@@ -1023,7 +1026,7 @@ func (r *Reconciler) updateK8sResource(ctx context.Context, existingK8sRes unstr
10231026 if err := r .deleteK8sResource (ctx , existingK8sRes , namespace ); err != nil {
10241027 return errors .Wrap (err , "failed to update k8s resource" )
10251028 }
1026- if err := r .createK8sResource (ctx , templatek8sRes , k8sResConfig , newLabels , newAnnotations ); err != nil {
1029+ if err := r .createK8sResource (ctx , templatek8sRes , k8sResConfig , newLabels , newAnnotations , ownerReferences ); err != nil {
10271030 return errors .Wrap (err , "failed to update k8s resource" )
10281031 }
10291032 }
@@ -1076,6 +1079,9 @@ func (r *Reconciler) updateK8sResource(ctx context.Context, existingK8sRes unstr
10761079
10771080 r .EnsureAnnotation (existingK8sRes , newAnnotations )
10781081 r .EnsureLabel (existingK8sRes , newLabels )
1082+ if err := r .setOwnerReferences (ctx , & existingK8sRes , ownerReferences ); err != nil {
1083+ return false , errors .Wrapf (err , "failed to set ownerReferences for k8s resource -- Kind: %s, NamespacedName: %s/%s" , kind , namespace , name )
1084+ }
10791085
10801086 klog .V (2 ).Infof ("updating k8s resource with apiversion: %s, kind: %s, %s/%s" , apiversion , kind , namespace , name )
10811087
@@ -1279,3 +1285,32 @@ func (r *Reconciler) ResourceForKind(gvk schema.GroupVersionKind, namespace stri
12791285 }
12801286 return & mapping .Resource , nil
12811287}
1288+
1289+ func (r * Reconciler ) setOwnerReferences (ctx context.Context , controlledRes * unstructured.Unstructured , ownerReferences * []operatorv1alpha1.OwnerReference ) error {
1290+ if ownerReferences != nil {
1291+ for _ , owner := range * ownerReferences {
1292+ ownerObj := unstructured.Unstructured {}
1293+ ownerObj .SetAPIVersion (owner .APIVersion )
1294+ ownerObj .SetKind (owner .Kind )
1295+ ownerObj .SetName (owner .Name )
1296+
1297+ if err := r .Reader .Get (ctx , types.NamespacedName {
1298+ Name : owner .Name ,
1299+ Namespace : controlledRes .GetNamespace (),
1300+ }, & ownerObj ); err != nil {
1301+ return errors .Wrapf (err , "failed to get owner object -- Kind: %s, NamespacedName: %s/%s" , owner .Kind , controlledRes .GetNamespace (), owner .Name )
1302+ }
1303+ if owner .Controller != nil && * owner .Controller {
1304+ if err := controllerutil .SetControllerReference (& ownerObj , controlledRes , r .Scheme ); err != nil {
1305+ return errors .Wrapf (err , "failed to set controller ownerReference for k8s resource -- Kind: %s, NamespacedName: %s/%s" , controlledRes .GetKind (), controlledRes .GetNamespace (), controlledRes .GetName ())
1306+ }
1307+ } else {
1308+ if err := controllerutil .SetOwnerReference (& ownerObj , controlledRes , r .Scheme ); err != nil {
1309+ return errors .Wrapf (err , "failed to set ownerReference for k8s resource -- Kind: %s, NamespacedName: %s/%s" , controlledRes .GetKind (), controlledRes .GetNamespace (), controlledRes .GetName ())
1310+ }
1311+ }
1312+ klog .Infof ("Set %s with name %s as Owner for k8s resource -- Kind: %s, NamespacedName: %s/%s" , owner .Kind , owner .Name , controlledRes .GetKind (), controlledRes .GetNamespace (), controlledRes .GetName ())
1313+ }
1314+ }
1315+ return nil
1316+ }
0 commit comments