Skip to content

Commit 4881d46

Browse files
committed
Do not requeue error when disableNonTLSListen is set to
- true but TLS is not enabled; this is a user confguration error and need to be fixed by user updating the rabbitmqcluster - reconcileTLS returns a special error so the controller will exit
1 parent eef774f commit 4881d46

File tree

3 files changed

+19
-11
lines changed

3 files changed

+19
-11
lines changed

controllers/rabbitmqcluster_controller.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ package controllers
1313
import (
1414
"context"
1515
"encoding/json"
16+
"errors"
1617
"fmt"
1718
"reflect"
1819
"strings"
@@ -150,8 +151,11 @@ func (r *RabbitmqClusterReconciler) Reconcile(ctx context.Context, req ctrl.Requ
150151
return ctrl.Result{RequeueAfter: requeueAfter}, err
151152
}
152153

153-
if err := r.reconcileTLS(ctx, rabbitmqCluster); err != nil {
154-
return ctrl.Result{}, err
154+
tlsErr := r.reconcileTLS(ctx, rabbitmqCluster)
155+
if errors.Is(tlsErr, disableNonTLSConfigErr) {
156+
return ctrl.Result{}, nil
157+
} else if tlsErr != nil {
158+
return ctrl.Result{}, tlsErr
155159
}
156160

157161
sts, err := r.statefulSet(ctx, rabbitmqCluster)

controllers/reconcile_tls.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,27 @@ package controllers
22

33
import (
44
"context"
5+
"errors"
56
"fmt"
67

78
ctrl "sigs.k8s.io/controller-runtime"
89

910
rabbitmqv1beta1 "github.com/rabbitmq/cluster-operator/api/v1beta1"
1011
corev1 "k8s.io/api/core/v1"
11-
"k8s.io/apimachinery/pkg/api/errors"
12+
k8serrors "k8s.io/apimachinery/pkg/api/errors"
1213
"k8s.io/apimachinery/pkg/types"
1314
)
1415

16+
var disableNonTLSConfigErr = errors.New("TLS must be enabled if disableNonTLSListeners is set to true")
17+
1518
func (r *RabbitmqClusterReconciler) reconcileTLS(ctx context.Context, rabbitmqCluster *rabbitmqv1beta1.RabbitmqCluster) error {
19+
// if tls.disableNonTLSListeners set to true and TLS is not enabled, it's a configuration error
20+
// reconcileTLS() will return a special error so the operator won't requeue
1621
if rabbitmqCluster.DisableNonTLSListeners() && !rabbitmqCluster.TLSEnabled() {
17-
err := errors.NewBadRequest("TLS must be enabled if disableNonTLSListeners is set to true")
18-
r.Recorder.Event(rabbitmqCluster, corev1.EventTypeWarning, "TLSError", err.Error())
19-
ctrl.LoggerFrom(ctx).Error(err, "Error setting up TLS")
20-
r.setReconcileSuccess(ctx, rabbitmqCluster, corev1.ConditionFalse, "TLSError", err.Error())
21-
return err
22+
r.Recorder.Event(rabbitmqCluster, corev1.EventTypeWarning, "TLSError", disableNonTLSConfigErr.Error())
23+
ctrl.LoggerFrom(ctx).Error(disableNonTLSConfigErr, "Error setting up TLS")
24+
r.setReconcileSuccess(ctx, rabbitmqCluster, corev1.ConditionFalse, "TLSError", disableNonTLSConfigErr.Error())
25+
return disableNonTLSConfigErr
2226
}
2327

2428
if rabbitmqCluster.SecretTLSEnabled() {
@@ -47,7 +51,7 @@ func (r *RabbitmqClusterReconciler) checkTLSSecrets(ctx context.Context, rabbitm
4751
_, hasTLSKey := secret.Data["tls.key"]
4852
_, hasTLSCert := secret.Data["tls.crt"]
4953
if !hasTLSCert || !hasTLSKey {
50-
err := errors.NewBadRequest(fmt.Sprintf("TLS secret %s in namespace %s does not have the fields tls.crt and tls.key", secretName, rabbitmqCluster.Namespace))
54+
err := k8serrors.NewBadRequest(fmt.Sprintf("TLS secret %s in namespace %s does not have the fields tls.crt and tls.key", secretName, rabbitmqCluster.Namespace))
5155
r.Recorder.Event(rabbitmqCluster, corev1.EventTypeWarning, "TLSError", err.Error())
5256
logger.Error(err, "Error setting up TLS")
5357
return err
@@ -71,7 +75,7 @@ func (r *RabbitmqClusterReconciler) checkTLSSecrets(ctx context.Context, rabbitm
7175

7276
// Mutual TLS: verify that CA certificate is present in secret
7377
if _, hasCaCert := secret.Data["ca.crt"]; !hasCaCert {
74-
err := errors.NewBadRequest(fmt.Sprintf("TLS secret %s in namespace %s does not have the field ca.crt", rabbitmqCluster.Spec.TLS.CaSecretName, rabbitmqCluster.Namespace))
78+
err := k8serrors.NewBadRequest(fmt.Sprintf("TLS secret %s in namespace %s does not have the field ca.crt", rabbitmqCluster.Spec.TLS.CaSecretName, rabbitmqCluster.Namespace))
7579
r.Recorder.Event(rabbitmqCluster, corev1.EventTypeWarning, "TLSError", err.Error())
7680
logger.Error(err, "Error setting up TLS")
7781
return err

controllers/reconcile_tls_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ var _ = Describe("Reconcile TLS", func() {
228228
})
229229

230230
When("DiableNonTLSListeners set to true", func() {
231-
It("returns an error, logs TLSError and set ReconcileSuccess to false when TLS is not enabled", func() {
231+
It("logs TLSError and set ReconcileSuccess to false when TLS is not enabled", func() {
232232
tlsSpec := rabbitmqv1beta1.TLSSpec{
233233
DisableNonTLSListeners: true,
234234
}

0 commit comments

Comments
 (0)