Skip to content

Commit 0152d48

Browse files
committed
Set owner reference in builders instead of controller
1 parent 00b5c53 commit 0152d48

17 files changed

+186
-6
lines changed

controllers/rabbitmqcluster_controller.go

-5
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,6 @@ func (r *RabbitmqClusterReconciler) Reconcile(req ctrl.Request) (ctrl.Result, er
171171
return ctrl.Result{}, err
172172
}
173173

174-
//TODO this should be done in the builders
175-
if err := controllerutil.SetControllerReference(rabbitmqCluster, resource.(metav1.Object), r.Scheme); err != nil {
176-
return ctrl.Result{}, err
177-
}
178-
179174
var operationResult controllerutil.OperationResult
180175
err = clientretry.RetryOnConflict(clientretry.DefaultRetry, func() error {
181176
var apiError error

internal/resource/admin_secret.go

+9
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ package resource
1111

1212
import (
1313
"bytes"
14+
"fmt"
15+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
1416

1517
rabbitmqv1beta1 "github.com/rabbitmq/cluster-operator/api/v1beta1"
1618
"github.com/rabbitmq/cluster-operator/internal/metadata"
@@ -26,11 +28,13 @@ const (
2628

2729
type AdminSecretBuilder struct {
2830
Instance *rabbitmqv1beta1.RabbitmqCluster
31+
Scheme *runtime.Scheme
2932
}
3033

3134
func (builder *RabbitmqResourceBuilder) AdminSecret() *AdminSecretBuilder {
3235
return &AdminSecretBuilder{
3336
Instance: builder.Instance,
37+
Scheme: builder.Scheme,
3438
}
3539
}
3640

@@ -67,6 +71,11 @@ func (builder *AdminSecretBuilder) Update(object runtime.Object) error {
6771
secret := object.(*corev1.Secret)
6872
secret.Labels = metadata.GetLabels(builder.Instance.Name, builder.Instance.Labels)
6973
secret.Annotations = metadata.ReconcileAndFilterAnnotations(secret.GetAnnotations(), builder.Instance.Annotations)
74+
75+
if err := controllerutil.SetControllerReference(builder.Instance, secret, builder.Scheme); err != nil {
76+
return fmt.Errorf("failed setting controller reference: %v", err)
77+
}
78+
7079
return nil
7180
}
7281

internal/resource/admin_secret_test.go

+18-1
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ package resource_test
1111

1212
import (
1313
b64 "encoding/base64"
14-
1514
"gopkg.in/ini.v1"
1615
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1716
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
17+
"k8s.io/apimachinery/pkg/runtime"
18+
defaultscheme "k8s.io/client-go/kubernetes/scheme"
1819

1920
. "github.com/onsi/ginkgo"
2021
. "github.com/onsi/gomega"
@@ -29,9 +30,13 @@ var _ = Describe("AdminSecret", func() {
2930
instance rabbitmqv1beta1.RabbitmqCluster
3031
builder *resource.RabbitmqResourceBuilder
3132
adminSecretBuilder *resource.AdminSecretBuilder
33+
scheme *runtime.Scheme
3234
)
3335

3436
BeforeEach(func() {
37+
scheme = runtime.NewScheme()
38+
Expect(rabbitmqv1beta1.AddToScheme(scheme)).To(Succeed())
39+
Expect(defaultscheme.AddToScheme(scheme)).To(Succeed())
3540
instance = rabbitmqv1beta1.RabbitmqCluster{
3641
ObjectMeta: v1.ObjectMeta{
3742
Name: "a name",
@@ -40,6 +45,7 @@ var _ = Describe("AdminSecret", func() {
4045
}
4146
builder = &resource.RabbitmqResourceBuilder{
4247
Instance: &instance,
48+
Scheme: scheme,
4349
}
4450
adminSecretBuilder = builder.AdminSecret()
4551
})
@@ -183,4 +189,15 @@ var _ = Describe("AdminSecret", func() {
183189
})
184190
})
185191
})
192+
193+
It("sets owner reference", func() {
194+
secret = &corev1.Secret{}
195+
instance = rabbitmqv1beta1.RabbitmqCluster{
196+
ObjectMeta: metav1.ObjectMeta{
197+
Name: "rabbit1",
198+
},
199+
}
200+
Expect(adminSecretBuilder.Update(secret)).NotTo(HaveOccurred())
201+
Expect(secret.OwnerReferences[0].Name).To(Equal(instance.Name))
202+
})
186203
})

internal/resource/configmap.go

+7
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ package resource
1212
import (
1313
"bytes"
1414
"fmt"
15+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
1516

1617
"gopkg.in/ini.v1"
1718

@@ -41,11 +42,13 @@ listeners.ssl.default = 5671`
4142

4243
type ServerConfigMapBuilder struct {
4344
Instance *rabbitmqv1beta1.RabbitmqCluster
45+
Scheme *runtime.Scheme
4446
}
4547

4648
func (builder *RabbitmqResourceBuilder) ServerConfigMap() *ServerConfigMapBuilder {
4749
return &ServerConfigMapBuilder{
4850
Instance: builder.Instance,
51+
Scheme: builder.Scheme,
4952
}
5053
}
5154

@@ -103,6 +106,10 @@ func (builder *ServerConfigMapBuilder) Update(object runtime.Object) error {
103106
updateProperty(configMap.Data, "advanced.config", rmqProperties.AdvancedConfig)
104107
updateProperty(configMap.Data, "rabbitmq-env.conf", rmqProperties.EnvConfig)
105108

109+
if err := controllerutil.SetControllerReference(builder.Instance, configMap, builder.Scheme); err != nil {
110+
return fmt.Errorf("failed setting controller reference: %v", err)
111+
}
112+
106113
return nil
107114
}
108115

internal/resource/configmap_test.go

+17
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,22 @@ import (
1717
corev1 "k8s.io/api/core/v1"
1818
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1919
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
20+
"k8s.io/apimachinery/pkg/runtime"
21+
defaultscheme "k8s.io/client-go/kubernetes/scheme"
2022
)
2123

2224
var _ = Describe("GenerateServerConfigMap", func() {
2325
var (
2426
instance rabbitmqv1beta1.RabbitmqCluster
2527
configMapBuilder *resource.ServerConfigMapBuilder
2628
builder *resource.RabbitmqResourceBuilder
29+
scheme *runtime.Scheme
2730
)
2831

2932
BeforeEach(func() {
33+
scheme = runtime.NewScheme()
34+
Expect(rabbitmqv1beta1.AddToScheme(scheme)).To(Succeed())
35+
Expect(defaultscheme.AddToScheme(scheme)).To(Succeed())
3036
instance = rabbitmqv1beta1.RabbitmqCluster{
3137
ObjectMeta: v1.ObjectMeta{
3238
Name: "a name",
@@ -35,6 +41,7 @@ var _ = Describe("GenerateServerConfigMap", func() {
3541
}
3642
builder = &resource.RabbitmqResourceBuilder{
3743
Instance: &instance,
44+
Scheme: scheme,
3845
}
3946
configMapBuilder = builder.ServerConfigMap()
4047
})
@@ -66,6 +73,16 @@ var _ = Describe("GenerateServerConfigMap", func() {
6673
}
6774
})
6875

76+
It("sets owner reference", func() {
77+
instance = rabbitmqv1beta1.RabbitmqCluster{
78+
ObjectMeta: metav1.ObjectMeta{
79+
Name: "rabbit1",
80+
},
81+
}
82+
Expect(configMapBuilder.Update(configMap)).To(Succeed())
83+
Expect(configMap.OwnerReferences[0].Name).To(Equal(instance.Name))
84+
})
85+
6986
When("additionalConfig is not provided", func() {
7087
It("returns the default rabbitmq conf", func() {
7188
builder.Instance.Spec.Rabbitmq.AdditionalConfig = ""

internal/resource/erlang_cookie.go

+9
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ package resource
1212
import (
1313
"crypto/rand"
1414
"encoding/base64"
15+
"fmt"
16+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
1517

1618
rabbitmqv1beta1 "github.com/rabbitmq/cluster-operator/api/v1beta1"
1719
"github.com/rabbitmq/cluster-operator/internal/metadata"
@@ -26,11 +28,13 @@ const (
2628

2729
type ErlangCookieBuilder struct {
2830
Instance *rabbitmqv1beta1.RabbitmqCluster
31+
Scheme *runtime.Scheme
2932
}
3033

3134
func (builder *RabbitmqResourceBuilder) ErlangCookie() *ErlangCookieBuilder {
3235
return &ErlangCookieBuilder{
3336
Instance: builder.Instance,
37+
Scheme: builder.Scheme,
3438
}
3539
}
3640

@@ -60,6 +64,11 @@ func (builder *ErlangCookieBuilder) Update(object runtime.Object) error {
6064
secret := object.(*corev1.Secret)
6165
secret.Labels = metadata.GetLabels(builder.Instance.Name, builder.Instance.Labels)
6266
secret.Annotations = metadata.ReconcileAndFilterAnnotations(secret.GetAnnotations(), builder.Instance.Annotations)
67+
68+
if err := controllerutil.SetControllerReference(builder.Instance, secret, builder.Scheme); err != nil {
69+
return fmt.Errorf("failed setting controller reference: %v", err)
70+
}
71+
6372
return nil
6473
}
6574

internal/resource/erlang_cookie_test.go

+18
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ package resource_test
1111

1212
import (
1313
b64 "encoding/base64"
14+
"k8s.io/apimachinery/pkg/runtime"
15+
defaultscheme "k8s.io/client-go/kubernetes/scheme"
1416

1517
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1618
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -28,9 +30,13 @@ var _ = Describe("ErlangCookie", func() {
2830
instance rabbitmqv1beta1.RabbitmqCluster
2931
builder *resource.RabbitmqResourceBuilder
3032
erlangCookieBuilder *resource.ErlangCookieBuilder
33+
scheme *runtime.Scheme
3134
)
3235

3336
BeforeEach(func() {
37+
scheme = runtime.NewScheme()
38+
Expect(rabbitmqv1beta1.AddToScheme(scheme)).To(Succeed())
39+
Expect(defaultscheme.AddToScheme(scheme)).To(Succeed())
3440
instance = rabbitmqv1beta1.RabbitmqCluster{
3541
ObjectMeta: v1.ObjectMeta{
3642
Name: "a name",
@@ -39,6 +45,7 @@ var _ = Describe("ErlangCookie", func() {
3945
}
4046
builder = &resource.RabbitmqResourceBuilder{
4147
Instance: &instance,
48+
Scheme: scheme,
4249
}
4350
erlangCookieBuilder = builder.ErlangCookie()
4451
})
@@ -155,4 +162,15 @@ var _ = Describe("ErlangCookie", func() {
155162
Expect(secret.Annotations).To(Equal(expectedAnnotations))
156163
})
157164
})
165+
166+
It("sets owner reference", func() {
167+
instance = rabbitmqv1beta1.RabbitmqCluster{
168+
ObjectMeta: metav1.ObjectMeta{
169+
Name: "rabbit1",
170+
},
171+
}
172+
secret = &corev1.Secret{}
173+
Expect(erlangCookieBuilder.Update(secret)).NotTo(HaveOccurred())
174+
Expect(secret.OwnerReferences[0].Name).To(Equal(instance.Name))
175+
})
158176
})

internal/resource/headless_service.go

+8
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
package resource
1111

1212
import (
13+
"fmt"
1314
rabbitmqv1beta1 "github.com/rabbitmq/cluster-operator/api/v1beta1"
1415
"github.com/rabbitmq/cluster-operator/internal/metadata"
1516
corev1 "k8s.io/api/core/v1"
1617
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1718
"k8s.io/apimachinery/pkg/runtime"
19+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
1820
)
1921

2022
const (
@@ -23,11 +25,13 @@ const (
2325

2426
type HeadlessServiceBuilder struct {
2527
Instance *rabbitmqv1beta1.RabbitmqCluster
28+
Scheme *runtime.Scheme
2629
}
2730

2831
func (builder *RabbitmqResourceBuilder) HeadlessService() *HeadlessServiceBuilder {
2932
return &HeadlessServiceBuilder{
3033
Instance: builder.Instance,
34+
Scheme: builder.Scheme,
3135
}
3236
}
3337

@@ -66,5 +70,9 @@ func (builder *HeadlessServiceBuilder) Update(object runtime.Object) error {
6670
PublishNotReadyAddresses: true,
6771
}
6872

73+
if err := controllerutil.SetControllerReference(builder.Instance, service, builder.Scheme); err != nil {
74+
return fmt.Errorf("failed setting controller reference: %v", err)
75+
}
76+
6977
return nil
7078
}

internal/resource/headless_service_test.go

+18
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import (
1616
"github.com/rabbitmq/cluster-operator/internal/resource"
1717
corev1 "k8s.io/api/core/v1"
1818
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
19+
"k8s.io/apimachinery/pkg/runtime"
20+
defaultscheme "k8s.io/client-go/kubernetes/scheme"
1921
)
2022

2123
var _ = Describe("HeadlessService", func() {
@@ -24,14 +26,19 @@ var _ = Describe("HeadlessService", func() {
2426
builder *resource.RabbitmqResourceBuilder
2527
serviceBuilder *resource.HeadlessServiceBuilder
2628
service *corev1.Service
29+
scheme *runtime.Scheme
2730
)
2831

2932
BeforeEach(func() {
33+
scheme = runtime.NewScheme()
34+
Expect(rabbitmqv1beta1.AddToScheme(scheme)).To(Succeed())
35+
Expect(defaultscheme.AddToScheme(scheme)).To(Succeed())
3036
instance = rabbitmqv1beta1.RabbitmqCluster{}
3137
instance.Namespace = "foo"
3238
instance.Name = "foo"
3339
builder = &resource.RabbitmqResourceBuilder{
3440
Instance: &instance,
41+
Scheme: scheme,
3542
}
3643
serviceBuilder = builder.HeadlessService()
3744
})
@@ -190,4 +197,15 @@ var _ = Describe("HeadlessService", func() {
190197
Expect(service.Spec).To(Equal(expectedSpec))
191198
})
192199
})
200+
201+
It("sets owner reference", func() {
202+
instance = rabbitmqv1beta1.RabbitmqCluster{
203+
ObjectMeta: metav1.ObjectMeta{
204+
Name: "rabbit1",
205+
},
206+
}
207+
service = &corev1.Service{}
208+
Expect(serviceBuilder.Update(service)).NotTo(HaveOccurred())
209+
Expect(service.OwnerReferences[0].Name).To(Equal(instance.Name))
210+
})
193211
})

internal/resource/rabbitmq_plugins.go

+8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package resource
22

33
import (
4+
"fmt"
5+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
46
"strings"
57

68
rabbitmqv1beta1 "github.com/rabbitmq/cluster-operator/api/v1beta1"
@@ -25,6 +27,7 @@ type RabbitmqPlugins struct {
2527

2628
type RabbitmqPluginsConfigMapBuilder struct {
2729
Instance *rabbitmqv1beta1.RabbitmqCluster
30+
Scheme *runtime.Scheme
2831
}
2932

3033
func NewRabbitmqPlugins(plugins []rabbitmqv1beta1.Plugin) RabbitmqPlugins {
@@ -60,6 +63,7 @@ func (r *RabbitmqPlugins) AsString(sep string) string {
6063
func (builder *RabbitmqResourceBuilder) RabbitmqPluginsConfigMap() *RabbitmqPluginsConfigMapBuilder {
6164
return &RabbitmqPluginsConfigMapBuilder{
6265
Instance: builder.Instance,
66+
Scheme: builder.Scheme,
6367
}
6468
}
6569

@@ -76,6 +80,10 @@ func (builder *RabbitmqPluginsConfigMapBuilder) Update(object runtime.Object) er
7680
configMap.Data = make(map[string]string)
7781
}
7882
configMap.Data["enabled_plugins"] = desiredPluginsAsString(builder.Instance.Spec.Rabbitmq.AdditionalPlugins)
83+
84+
if err := controllerutil.SetControllerReference(builder.Instance, configMap, builder.Scheme); err != nil {
85+
return fmt.Errorf("failed setting controller reference: %v", err)
86+
}
7987
return nil
8088
}
8189

0 commit comments

Comments
 (0)