Skip to content

Commit 54184a4

Browse files
authored
Set metadata.ownerReferences on cluster resources (oxia-db#309)
1 parent 2a73d96 commit 54184a4

File tree

2 files changed

+46
-15
lines changed

2 files changed

+46
-15
lines changed

kubernetes/cluster_test.go

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,15 @@ func TestCluster(t *testing.T) {
6868
err := client.Apply(cluster)
6969
assert.NoError(t, err)
7070

71-
assertClusterResources(t, _kubernetes, _monitoring, cluster.Namespace, 1)
71+
assertClusterResources(t, &cluster, _kubernetes, _monitoring, cluster.Namespace, 1)
7272

7373
err = client.Delete(cluster.Namespace, cluster.Name, true)
7474
assert.NoError(t, err)
7575

76-
assertClusterResources(t, _kubernetes, _monitoring, cluster.Namespace, 0)
76+
assertClusterResources(t, &cluster, _kubernetes, _monitoring, cluster.Namespace, 0)
7777
}
7878

79-
func assertClusterResources(t *testing.T, _kubernetes kubernetes.Interface, _monitoring monitoring.Interface, namespace string, length int) {
79+
func assertClusterResources(t *testing.T, cluster *v1alpha1.OxiaCluster, _kubernetes kubernetes.Interface, _monitoring monitoring.Interface, namespace string, length int) {
8080
serviceAccounts, err := _kubernetes.CoreV1().ServiceAccounts(namespace).
8181
List(context.Background(), v1.ListOptions{})
8282
assert.NoError(t, err)
@@ -96,19 +96,35 @@ func assertClusterResources(t *testing.T, _kubernetes kubernetes.Interface, _mon
9696
List(context.Background(), v1.ListOptions{})
9797
assert.NoError(t, err)
9898
assert.Len(t, deployments.Items, length)
99+
for _, deployment := range deployments.Items {
100+
assert.Equal(t, cluster.Name, deployment.OwnerReferences[0].Name)
101+
assert.Equal(t, true, *deployment.OwnerReferences[0].Controller)
102+
}
99103

100104
statefulsets, err := _kubernetes.AppsV1().StatefulSets(namespace).
101105
List(context.Background(), v1.ListOptions{})
102106
assert.NoError(t, err)
103107
assert.Len(t, statefulsets.Items, length)
108+
for _, statefulset := range statefulsets.Items {
109+
assert.Equal(t, cluster.Name, statefulset.OwnerReferences[0].Name)
110+
assert.Equal(t, true, *statefulset.OwnerReferences[0].Controller)
111+
}
104112

105113
services, err := _kubernetes.CoreV1().Services(namespace).
106114
List(context.Background(), v1.ListOptions{})
107115
assert.NoError(t, err)
108116
assert.Len(t, services.Items, length*2)
117+
for _, service := range services.Items {
118+
assert.Equal(t, cluster.Name, service.OwnerReferences[0].Name)
119+
assert.Equal(t, true, *service.OwnerReferences[0].Controller)
120+
}
109121

110122
serviceMonitors, err := _monitoring.MonitoringV1().ServiceMonitors(namespace).
111123
List(context.Background(), v1.ListOptions{})
112124
assert.NoError(t, err)
113125
assert.Len(t, serviceMonitors.Items, length*2)
126+
for _, serviceMonitor := range serviceMonitors.Items {
127+
assert.Equal(t, cluster.Name, serviceMonitor.OwnerReferences[0].Name)
128+
assert.Equal(t, true, *serviceMonitor.OwnerReferences[0].Controller)
129+
}
114130
}

kubernetes/resources.go

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,27 @@ func resourceName(component Component, name string) string {
4444
return name
4545
}
4646

47-
func objectMeta(component Component, name string) metaV1.ObjectMeta {
47+
func objectMeta(component Component, name string, cluster *v1alpha1.OxiaCluster) metaV1.ObjectMeta {
4848
_resourceName := resourceName(component, name)
49-
return metaV1.ObjectMeta{
49+
_objectMeta := metaV1.ObjectMeta{
5050
Name: _resourceName,
5151
Labels: allLabels(component, name),
5252
}
53+
if cluster != nil {
54+
_objectMeta.OwnerReferences = []metaV1.OwnerReference{*controllerOwnerReference(cluster)}
55+
}
56+
return _objectMeta
57+
}
58+
59+
func controllerOwnerReference(cluster *v1alpha1.OxiaCluster) *metaV1.OwnerReference {
60+
isController := true
61+
return &metaV1.OwnerReference{
62+
Name: cluster.Name,
63+
APIVersion: cluster.APIVersion,
64+
UID: cluster.GetUID(),
65+
Kind: cluster.GetObjectKind().GroupVersionKind().Kind,
66+
Controller: &isController,
67+
}
5368
}
5469

5570
func allLabels(component Component, name string) map[string]string {
@@ -78,7 +93,7 @@ func additionalLabels(version string) map[string]string {
7893

7994
func serviceAccount(component Component, cluster v1alpha1.OxiaCluster) *coreV1.ServiceAccount {
8095
_serviceAccount := &coreV1.ServiceAccount{
81-
ObjectMeta: objectMeta(component, cluster.Name),
96+
ObjectMeta: objectMeta(component, cluster.Name, &cluster),
8297
}
8398
if cluster.Spec.Image.PullSecrets != nil {
8499
_serviceAccount.ImagePullSecrets = []coreV1.LocalObjectReference{{Name: *cluster.Spec.Image.PullSecrets}}
@@ -88,7 +103,7 @@ func serviceAccount(component Component, cluster v1alpha1.OxiaCluster) *coreV1.S
88103

89104
func role(cluster v1alpha1.OxiaCluster) *rbacV1.Role {
90105
return &rbacV1.Role{
91-
ObjectMeta: objectMeta(Coordinator, cluster.Name),
106+
ObjectMeta: objectMeta(Coordinator, cluster.Name, &cluster),
92107
Rules: policyRules(),
93108
}
94109
}
@@ -105,7 +120,7 @@ func policyRules() []rbacV1.PolicyRule {
105120
func roleBinding(cluster v1alpha1.OxiaCluster) *rbacV1.RoleBinding {
106121
_resourceName := resourceName(Coordinator, cluster.Name)
107122
return &rbacV1.RoleBinding{
108-
ObjectMeta: objectMeta(Coordinator, cluster.Name),
123+
ObjectMeta: objectMeta(Coordinator, cluster.Name, &cluster),
109124
Subjects: []rbacV1.Subject{{
110125
Kind: "ServiceAccount",
111126
Name: _resourceName,
@@ -127,7 +142,7 @@ func service(component Component, cluster v1alpha1.OxiaCluster, ports []NamedPor
127142
publishNotReadyAddresses = true
128143
}
129144
service := &coreV1.Service{
130-
ObjectMeta: objectMeta(component, cluster.Name),
145+
ObjectMeta: objectMeta(component, cluster.Name, &cluster),
131146
Spec: coreV1.ServiceSpec{
132147
Selector: selectorLabels(component, cluster.Name),
133148
Ports: transform(ports, servicePort),
@@ -169,7 +184,7 @@ func configMap(cluster v1alpha1.OxiaCluster) *coreV1.ConfigMap {
169184
log.Fatal().Err(err).Msg("unable to marshal cluster config to yaml")
170185
}
171186
return &coreV1.ConfigMap{
172-
ObjectMeta: objectMeta(Coordinator, cluster.Name),
187+
ObjectMeta: objectMeta(Coordinator, cluster.Name, &cluster),
173188
Data: map[string]string{
174189
"config.yaml": string(bytes),
175190
},
@@ -194,12 +209,12 @@ func coordinatorDeployment(cluster v1alpha1.OxiaCluster) *appsV1.Deployment {
194209
command = append(command, "--profile")
195210
}
196211
deployment := &appsV1.Deployment{
197-
ObjectMeta: objectMeta(Coordinator, cluster.Name),
212+
ObjectMeta: objectMeta(Coordinator, cluster.Name, &cluster),
198213
Spec: appsV1.DeploymentSpec{
199214
Replicas: pointer.Int32(1),
200215
Selector: &metaV1.LabelSelector{MatchLabels: selectorLabels(Coordinator, cluster.Name)},
201216
Template: coreV1.PodTemplateSpec{
202-
ObjectMeta: objectMeta(Coordinator, cluster.Name),
217+
ObjectMeta: objectMeta(Coordinator, cluster.Name, nil),
203218
Spec: coreV1.PodSpec{
204219
ServiceAccountName: _resourceName,
205220
Containers: []coreV1.Container{{
@@ -246,13 +261,13 @@ func serverStatefulSet(cluster v1alpha1.OxiaCluster) *appsV1.StatefulSet {
246261
command = append(command, "--profile")
247262
}
248263
statefulSet := &appsV1.StatefulSet{
249-
ObjectMeta: objectMeta(Server, cluster.Name),
264+
ObjectMeta: objectMeta(Server, cluster.Name, &cluster),
250265
Spec: appsV1.StatefulSetSpec{
251266
Replicas: pointer.Int32(int32(cluster.Spec.Server.Replicas)),
252267
Selector: &metaV1.LabelSelector{MatchLabels: selectorLabels(Server, cluster.Name)},
253268
ServiceName: _resourceName,
254269
Template: coreV1.PodTemplateSpec{
255-
ObjectMeta: objectMeta(Server, cluster.Name),
270+
ObjectMeta: objectMeta(Server, cluster.Name, nil),
256271
Spec: coreV1.PodSpec{
257272
ServiceAccountName: _resourceName,
258273
Containers: []coreV1.Container{{
@@ -310,7 +325,7 @@ func probe() *coreV1.Probe {
310325

311326
func serviceMonitor(component Component, cluster v1alpha1.OxiaCluster) *monitoringV1.ServiceMonitor {
312327
return &monitoringV1.ServiceMonitor{
313-
ObjectMeta: objectMeta(component, cluster.Name),
328+
ObjectMeta: objectMeta(component, cluster.Name, &cluster),
314329
Spec: monitoringV1.ServiceMonitorSpec{
315330
Selector: metaV1.LabelSelector{MatchLabels: selectorLabels(component, cluster.Name)},
316331
Endpoints: []monitoringV1.Endpoint{{Port: MetricsPort.Name}},

0 commit comments

Comments
 (0)