Skip to content

Commit daf21c0

Browse files
Add OwnerRef to clusterResourceSetBinding on each reconcile
Signed-off-by: killianmuldoon <[email protected]>
1 parent d761e1b commit daf21c0

File tree

4 files changed

+35
-14
lines changed

4 files changed

+35
-14
lines changed

exp/addons/api/v1beta1/clusterresourcesetbinding_types.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import (
2020
"reflect"
2121

2222
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
23+
24+
"sigs.k8s.io/cluster-api/util"
2325
)
2426

2527
// ANCHOR: ResourceBinding
@@ -100,6 +102,11 @@ func (c *ClusterResourceSetBinding) DeleteBinding(clusterResourceSet *ClusterRes
100102
break
101103
}
102104
}
105+
clusterResourceSet.OwnerReferences = util.RemoveOwnerRef(c.OwnerReferences, metav1.OwnerReference{
106+
APIVersion: clusterResourceSet.APIVersion,
107+
Kind: clusterResourceSet.Kind,
108+
Name: clusterResourceSet.Name,
109+
})
103110
}
104111

105112
// +kubebuilder:object:root=true

exp/addons/internal/controllers/clusterresourceset_controller.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ func (r *ClusterResourceSetReconciler) ApplyClusterResourceSet(ctx context.Conte
264264
}
265265
}()
266266

267+
// Ensure that the owner references are set on the ClusterResourceSetBinding.
268+
clusterResourceSetBinding.OwnerReferences = ensureOwnerRefs(clusterResourceSetBinding, clusterResourceSet, cluster)
267269
errList := []error{}
268270
resourceSetBinding := clusterResourceSetBinding.GetOrCreateBinding(clusterResourceSet)
269271

exp/addons/internal/controllers/clusterresourceset_controller_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -518,8 +518,8 @@ metadata:
518518
if err != nil {
519519
return false
520520
}
521-
return len(binding.Spec.Bindings) == 2
522-
}, timeout).Should(BeTrue())
521+
return len(binding.Spec.Bindings) == 2 && len(binding.OwnerReferences) == 3
522+
}, timeout).Should(BeTrue(), "Expected 2 ClusterResourceSets and 3 OwnerReferences")
523523

524524
t.Log("Verifying deleted CRS is deleted from ClusterResourceSetBinding")
525525
// Delete one of the CRS instances and wait until it is removed from the binding list.
@@ -534,8 +534,8 @@ metadata:
534534
if err != nil {
535535
return false
536536
}
537-
return len(binding.Spec.Bindings) == 1
538-
}, timeout).Should(BeTrue())
537+
return len(binding.Spec.Bindings) == 1 && len(binding.OwnerReferences) == 2
538+
}, timeout).Should(BeTrue(), "ClusterResourceSetBinding should have 1 ClusterResourceSet and 2 OwnerReferences")
539539

540540
t.Log("Verifying ClusterResourceSetBinding is deleted after deleting all matching CRS objects")
541541
// Delete one of the CRS instances and wait until it is removed from the binding list.

exp/addons/internal/controllers/clusterresourceset_helpers.go

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -120,18 +120,11 @@ func (r *ClusterResourceSetReconciler) getOrCreateClusterResourceSetBinding(ctx
120120
if !apierrors.IsNotFound(err) {
121121
return nil, err
122122
}
123-
124123
clusterResourceSetBinding.Name = cluster.Name
125124
clusterResourceSetBinding.Namespace = cluster.Namespace
126-
clusterResourceSetBinding.OwnerReferences = util.EnsureOwnerRef(clusterResourceSetBinding.OwnerReferences, metav1.OwnerReference{
127-
APIVersion: clusterv1.GroupVersion.String(),
128-
Kind: "Cluster",
129-
Name: cluster.Name,
130-
UID: cluster.UID,
131-
})
132-
clusterResourceSetBinding.OwnerReferences = util.EnsureOwnerRef(clusterResourceSetBinding.OwnerReferences, *metav1.NewControllerRef(clusterResourceSet, clusterResourceSet.GroupVersionKind()))
133-
125+
clusterResourceSetBinding.OwnerReferences = ensureOwnerRefs(clusterResourceSetBinding, clusterResourceSet, cluster)
134126
clusterResourceSetBinding.Spec.Bindings = []*addonsv1.ResourceSetBinding{}
127+
135128
if err := r.Client.Create(ctx, clusterResourceSetBinding); err != nil {
136129
if apierrors.IsAlreadyExists(err) {
137130
if err = r.Client.Get(ctx, clusterResourceSetBindingKey, clusterResourceSetBinding); err != nil {
@@ -142,10 +135,29 @@ func (r *ClusterResourceSetReconciler) getOrCreateClusterResourceSetBinding(ctx
142135
return nil, errors.Wrapf(err, "failed to create clusterResourceSetBinding for cluster: %s/%s", cluster.Namespace, cluster.Name)
143136
}
144137
}
145-
146138
return clusterResourceSetBinding, nil
147139
}
148140

141+
// ensureOwnerRefs ensures Cluster and ClusterResourceSet owner references are set on the ClusterResourceSetBinding.
142+
func ensureOwnerRefs(clusterResourceSetBinding *addonsv1.ClusterResourceSetBinding, clusterResourceSet *addonsv1.ClusterResourceSet, cluster *clusterv1.Cluster) []metav1.OwnerReference {
143+
ownerRefs := make([]metav1.OwnerReference, len(clusterResourceSetBinding.GetOwnerReferences()))
144+
copy(ownerRefs, clusterResourceSetBinding.GetOwnerReferences())
145+
ownerRefs = util.EnsureOwnerRef(ownerRefs, metav1.OwnerReference{
146+
APIVersion: clusterv1.GroupVersion.String(),
147+
Kind: "Cluster",
148+
Name: cluster.Name,
149+
UID: cluster.UID,
150+
})
151+
ownerRefs = util.EnsureOwnerRef(ownerRefs,
152+
metav1.OwnerReference{
153+
APIVersion: clusterResourceSet.GroupVersionKind().String(),
154+
Kind: clusterResourceSet.GroupVersionKind().Kind,
155+
Name: clusterResourceSet.Name,
156+
UID: clusterResourceSet.UID,
157+
})
158+
return ownerRefs
159+
}
160+
149161
// getConfigMap retrieves any ConfigMap from the given name and namespace.
150162
func getConfigMap(ctx context.Context, c client.Client, configmapName types.NamespacedName) (*corev1.ConfigMap, error) {
151163
configMap := &corev1.ConfigMap{}

0 commit comments

Comments
 (0)