Skip to content

Commit 6d2c66a

Browse files
authored
Merge pull request #542 from rabbitmq/controller-runtime-0.7
Bump controller-runtime to 0.7 and k8s.io dependencies to v.0.19.2 * Update leader election role to have permission for leases.coordination.k8s.io instead of ConfigMap. Related controller runtime change: kubernetes-sigs/controller-runtime#1144 * Use client.Object instead of runtime.Object in controller runtime helper methods. A number of controller runtime methods that previously took runtime.Object & internally type-asserted them to metav1.Object now take client.Object and client.ObjectList. Related controller runtime change: kubernetes-sigs/controller-runtime#1195 * Update how envTest starts the test manager since Manager.Start() now takes context instead of a channel
2 parents cffa917 + b2fd594 commit 6d2c66a

21 files changed

+474
-74
lines changed

config/crd/bases/rabbitmq.com_rabbitmqclusters.yaml

+117
Original file line numberDiff line numberDiff line change
@@ -1239,6 +1239,15 @@ spec:
12391239
user:
12401240
type: string
12411241
type: object
1242+
seccompProfile:
1243+
properties:
1244+
localhostProfile:
1245+
type: string
1246+
type:
1247+
type: string
1248+
required:
1249+
- type
1250+
type: object
12421251
windowsOptions:
12431252
properties:
12441253
gmsaCredentialSpec:
@@ -1796,6 +1805,15 @@ spec:
17961805
user:
17971806
type: string
17981807
type: object
1808+
seccompProfile:
1809+
properties:
1810+
localhostProfile:
1811+
type: string
1812+
type:
1813+
type: string
1814+
required:
1815+
- type
1816+
type: object
17991817
windowsOptions:
18001818
properties:
18011819
gmsaCredentialSpec:
@@ -2361,6 +2379,15 @@ spec:
23612379
user:
23622380
type: string
23632381
type: object
2382+
seccompProfile:
2383+
properties:
2384+
localhostProfile:
2385+
type: string
2386+
type:
2387+
type: string
2388+
required:
2389+
- type
2390+
type: object
23642391
windowsOptions:
23652392
properties:
23662393
gmsaCredentialSpec:
@@ -2546,6 +2573,15 @@ spec:
25462573
user:
25472574
type: string
25482575
type: object
2576+
seccompProfile:
2577+
properties:
2578+
localhostProfile:
2579+
type: string
2580+
type:
2581+
type: string
2582+
required:
2583+
- type
2584+
type: object
25492585
supplementalGroups:
25502586
items:
25512587
format: int64
@@ -2577,6 +2613,8 @@ spec:
25772613
type: string
25782614
serviceAccountName:
25792615
type: string
2616+
setHostnameAsFQDN:
2617+
type: boolean
25802618
shareProcessNamespace:
25812619
type: boolean
25822620
subdomain:
@@ -2826,6 +2864,85 @@ spec:
28262864
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
28272865
x-kubernetes-int-or-string: true
28282866
type: object
2867+
ephemeral:
2868+
properties:
2869+
readOnly:
2870+
type: boolean
2871+
volumeClaimTemplate:
2872+
properties:
2873+
metadata:
2874+
type: object
2875+
spec:
2876+
properties:
2877+
accessModes:
2878+
items:
2879+
type: string
2880+
type: array
2881+
dataSource:
2882+
properties:
2883+
apiGroup:
2884+
type: string
2885+
kind:
2886+
type: string
2887+
name:
2888+
type: string
2889+
required:
2890+
- kind
2891+
- name
2892+
type: object
2893+
resources:
2894+
properties:
2895+
limits:
2896+
additionalProperties:
2897+
anyOf:
2898+
- type: integer
2899+
- type: string
2900+
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
2901+
x-kubernetes-int-or-string: true
2902+
type: object
2903+
requests:
2904+
additionalProperties:
2905+
anyOf:
2906+
- type: integer
2907+
- type: string
2908+
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
2909+
x-kubernetes-int-or-string: true
2910+
type: object
2911+
type: object
2912+
selector:
2913+
properties:
2914+
matchExpressions:
2915+
items:
2916+
properties:
2917+
key:
2918+
type: string
2919+
operator:
2920+
type: string
2921+
values:
2922+
items:
2923+
type: string
2924+
type: array
2925+
required:
2926+
- key
2927+
- operator
2928+
type: object
2929+
type: array
2930+
matchLabels:
2931+
additionalProperties:
2932+
type: string
2933+
type: object
2934+
type: object
2935+
storageClassName:
2936+
type: string
2937+
volumeMode:
2938+
type: string
2939+
volumeName:
2940+
type: string
2941+
type: object
2942+
required:
2943+
- spec
2944+
type: object
2945+
type: object
28292946
fc:
28302947
properties:
28312948
fsType:

config/rbac/leader_election_role.yaml

+2-10
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ metadata:
1818
app.kubernetes.io/part-of: rabbitmq
1919
rules:
2020
- apiGroups:
21-
- ""
21+
- coordination.k8s.io
2222
resources:
23-
- configmaps
23+
- leases
2424
verbs:
2525
- get
2626
- list
@@ -29,14 +29,6 @@ rules:
2929
- update
3030
- patch
3131
- delete
32-
- apiGroups:
33-
- ""
34-
resources:
35-
- configmaps/status
36-
verbs:
37-
- get
38-
- update
39-
- patch
4032
- apiGroups:
4133
- ""
4234
resources:

controllers/rabbitmqcluster_controller.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,7 @@ type RabbitmqClusterReconciler struct {
8181
// +kubebuilder:rbac:groups="rbac.authorization.k8s.io",resources=roles,verbs=get;list;watch;create;update
8282
// +kubebuilder:rbac:groups="rbac.authorization.k8s.io",resources=rolebindings,verbs=get;list;watch;create;update
8383

84-
func (r *RabbitmqClusterReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
85-
ctx := context.Background()
84+
func (r *RabbitmqClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
8685
logger := r.Log
8786

8887
rabbitmqCluster, err := r.getRabbitmqCluster(ctx, req.NamespacedName)
@@ -172,7 +171,7 @@ func (r *RabbitmqClusterReconciler) Reconcile(req ctrl.Request) (ctrl.Result, er
172171
var operationResult controllerutil.OperationResult
173172
err = clientretry.RetryOnConflict(clientretry.DefaultRetry, func() error {
174173
var apiError error
175-
operationResult, apiError = controllerutil.CreateOrUpdate(ctx, r, resource, func() error {
174+
operationResult, apiError = controllerutil.CreateOrUpdate(ctx, r.Client, resource, func() error {
176175
return builder.Update(resource)
177176
})
178177
return apiError
@@ -305,7 +304,7 @@ func (r *RabbitmqClusterReconciler) getRabbitmqCluster(ctx context.Context, name
305304
}
306305

307306
func (r *RabbitmqClusterReconciler) SetupWithManager(mgr ctrl.Manager) error {
308-
for _, resource := range []runtime.Object{&appsv1.StatefulSet{}, &corev1.ConfigMap{}, &corev1.Service{}} {
307+
for _, resource := range []client.Object{&appsv1.StatefulSet{}, &corev1.ConfigMap{}, &corev1.Service{}} {
309308
if err := mgr.GetFieldIndexer().IndexField(context.Background(), resource, ownerKey, addResourceToIndex); err != nil {
310309
return err
311310
}
@@ -323,7 +322,7 @@ func (r *RabbitmqClusterReconciler) SetupWithManager(mgr ctrl.Manager) error {
323322
Complete(r)
324323
}
325324

326-
func addResourceToIndex(rawObj runtime.Object) []string {
325+
func addResourceToIndex(rawObj client.Object) []string {
327326
switch resourceObject := rawObj.(type) {
328327
case *appsv1.StatefulSet:
329328
owner := metav1.GetControllerOf(resourceObject)

controllers/reconcile_rabbitmq_configurations.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
appsv1 "k8s.io/api/apps/v1"
1111
corev1 "k8s.io/api/core/v1"
1212
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
13-
"k8s.io/apimachinery/pkg/runtime"
1413
"k8s.io/apimachinery/pkg/types"
1514
clientretry "k8s.io/client-go/util/retry"
1615
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -28,7 +27,7 @@ const (
2827
// These annotations are temporary markers used in later reconcile loops to perform some action (such as restarting the StatefulSet or executing RabbitMQ CLI commands)
2928
func (r *RabbitmqClusterReconciler) annotateIfNeeded(ctx context.Context, builder resource.ResourceBuilder, operationResult controllerutil.OperationResult, rmq *rabbitmqv1beta1.RabbitmqCluster) error {
3029
var (
31-
obj runtime.Object
30+
obj client.Object
3231
objName string
3332
annotationKey string
3433
)

controllers/reconcile_tls_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ var _ = Describe("Reconcile TLS", func() {
4444

4545
sts, err := clientSet.AppsV1().StatefulSets(cluster.Namespace).Get(ctx, cluster.ChildResourceName("server"), metav1.GetOptions{})
4646
Expect(err).NotTo(HaveOccurred())
47-
47+
4848
Expect(sts.Spec.Template.Spec.Volumes).To(ContainElement(corev1.Volume{
4949
Name: "rabbitmq-tls",
5050
VolumeSource: corev1.VolumeSource{

controllers/suite_test.go

+8-19
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ package controllers_test
1313
import (
1414
"context"
1515
"path/filepath"
16-
"sync"
1716
"testing"
1817

1918
"k8s.io/client-go/util/retry"
@@ -43,22 +42,15 @@ var (
4342
testEnv *envtest.Environment
4443
client runtimeClient.Client
4544
clientSet *kubernetes.Clientset
46-
stopMgr chan struct{}
47-
mgrStopped *sync.WaitGroup
4845
scheme *runtime.Scheme
4946
fakeExecutor *fakePodExecutor
5047
ctx = context.Background()
48+
cancelFunc context.CancelFunc
5149
updateWithRetry = func(cr *rabbitmqv1beta1.RabbitmqCluster, mutateFn func(r *rabbitmqv1beta1.RabbitmqCluster)) error {
5250
return retry.RetryOnConflict(retry.DefaultRetry, func() error {
53-
objKey, err := runtimeClient.ObjectKeyFromObject(cr)
54-
if err != nil {
51+
if err := client.Get(ctx, runtimeClient.ObjectKeyFromObject(cr), cr); err != nil {
5552
return err
5653
}
57-
58-
if err := client.Get(ctx, objKey, cr); err != nil {
59-
return err
60-
}
61-
6254
mutateFn(cr)
6355
return client.Update(ctx, cr)
6456
})
@@ -93,17 +85,16 @@ var _ = BeforeSuite(func() {
9385
Expect(rabbitmqv1beta1.AddToScheme(scheme)).To(Succeed())
9486
Expect(defaultscheme.AddToScheme(scheme)).To(Succeed())
9587

96-
startManager(scheme)
88+
cancelFunc = startManager(scheme)
9789
})
9890

9991
var _ = AfterSuite(func() {
100-
close(stopMgr)
101-
mgrStopped.Wait()
92+
cancelFunc()
10293
By("tearing down the test environment")
10394
Expect(testEnv.Stop()).To(Succeed())
10495
})
10596

106-
func startManager(scheme *runtime.Scheme) {
97+
func startManager(scheme *runtime.Scheme) context.CancelFunc {
10798
mgr, err := ctrl.NewManager(cfg, ctrl.Options{Scheme: scheme})
10899
Expect(err).NotTo(HaveOccurred())
109100
client = mgr.GetClient()
@@ -119,13 +110,11 @@ func startManager(scheme *runtime.Scheme) {
119110
}
120111
Expect(reconciler.SetupWithManager(mgr)).To(Succeed())
121112

122-
stopMgr = make(chan struct{})
123-
mgrStopped = &sync.WaitGroup{}
124-
mgrStopped.Add(1)
113+
managerCtx, cancel := context.WithCancel(context.Background())
125114
go func() {
126-
defer mgrStopped.Done()
127-
Expect(mgr.Start(stopMgr)).To(Succeed())
115+
Expect(mgr.Start(managerCtx)).To(Succeed())
128116
}()
117+
return cancel
129118
}
130119

131120
type fakePodExecutor struct {

controllers/utils.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ package controllers
22

33
import (
44
"context"
5+
"sigs.k8s.io/controller-runtime/pkg/client"
56

67
rabbitmqv1beta1 "github.com/rabbitmq/cluster-operator/api/v1beta1"
78
appsv1 "k8s.io/api/apps/v1"
89
corev1 "k8s.io/api/core/v1"
910
"k8s.io/apimachinery/pkg/api/errors"
1011
"k8s.io/apimachinery/pkg/api/meta"
11-
"k8s.io/apimachinery/pkg/runtime"
1212
"k8s.io/apimachinery/pkg/types"
1313
"k8s.io/client-go/util/retry"
1414
)
@@ -17,7 +17,7 @@ func (r *RabbitmqClusterReconciler) exec(namespace, podName, containerName strin
1717
return r.PodExecutor.Exec(r.Clientset, r.ClusterConfig, namespace, podName, containerName, command...)
1818
}
1919

20-
func (r *RabbitmqClusterReconciler) deleteAnnotation(ctx context.Context, obj runtime.Object, annotation string) error {
20+
func (r *RabbitmqClusterReconciler) deleteAnnotation(ctx context.Context, obj client.Object, annotation string) error {
2121
accessor, err := meta.Accessor(obj)
2222
if err != nil {
2323
return err
@@ -31,7 +31,7 @@ func (r *RabbitmqClusterReconciler) deleteAnnotation(ctx context.Context, obj ru
3131
return r.Update(ctx, obj)
3232
}
3333

34-
func (r *RabbitmqClusterReconciler) updateAnnotation(ctx context.Context, obj runtime.Object, namespace, objName, key, value string) error {
34+
func (r *RabbitmqClusterReconciler) updateAnnotation(ctx context.Context, obj client.Object, namespace, objName, key, value string) error {
3535
return retry.OnError(
3636
retry.DefaultRetry,
3737
errorIsConflictOrNotFound, // StatefulSet needs time to be found after it got created

go.mod

+6-11
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,27 @@ module github.com/rabbitmq/cluster-operator
33
go 1.15
44

55
require (
6-
github.com/Azure/go-autorest/autorest v0.9.2 // indirect
7-
github.com/Azure/go-autorest/autorest/adal v0.8.0 // indirect
86
github.com/cespare/xxhash/v2 v2.1.1 // indirect
97
github.com/cloudflare/cfssl v1.5.0
108
github.com/eclipse/paho.mqtt.golang v1.3.1
119
github.com/go-delve/delve v1.5.1
12-
github.com/go-logr/logr v0.1.0
13-
github.com/go-logr/zapr v0.1.1 // indirect
10+
github.com/go-logr/logr v0.3.0
1411
github.com/go-stomp/stomp v2.1.0+incompatible
1512
github.com/gophercloud/gophercloud v0.5.0 // indirect
1613
github.com/michaelklishin/rabbit-hole/v2 v2.6.0
1714
github.com/onsi/ginkgo v1.14.2
1815
github.com/onsi/gomega v1.10.4
1916
github.com/pelletier/go-toml v1.8.1 // indirect
20-
github.com/prometheus/client_golang v1.2.1 // indirect
2117
github.com/sclevine/yj v0.0.0-20200815061347-554173e71934
2218
github.com/smartystreets/goconvey v1.6.4 // indirect
2319
github.com/streadway/amqp v0.0.0-20200108173154-1c71cc93ed71
24-
go.uber.org/multierr v1.2.0 // indirect
2520
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb
2621
gopkg.in/ini.v1 v1.62.0
27-
k8s.io/api v0.18.10
28-
k8s.io/apimachinery v0.18.10
29-
k8s.io/client-go v0.18.10
30-
k8s.io/utils v0.0.0-20200603063816-c1c6865ac451
31-
sigs.k8s.io/controller-runtime v0.6.4
22+
k8s.io/api v0.19.2
23+
k8s.io/apimachinery v0.19.2
24+
k8s.io/client-go v0.19.2
25+
k8s.io/utils v0.0.0-20200912215256-4140de9c8800
26+
sigs.k8s.io/controller-runtime v0.7.0
3227
sigs.k8s.io/controller-tools v0.4.1
3328
sigs.k8s.io/kind v0.9.0
3429
sigs.k8s.io/kustomize/kustomize/v3 v3.9.1

0 commit comments

Comments
 (0)