@@ -2,11 +2,14 @@ package controllers
22
33import (
44 "context"
5+ "fmt"
6+
57 rabbitmqv1beta1 "github.com/rabbitmq/cluster-operator/api/v1beta1"
68 appsv1 "k8s.io/api/apps/v1"
79 corev1 "k8s.io/api/core/v1"
810 "k8s.io/apimachinery/pkg/api/errors"
911 "k8s.io/apimachinery/pkg/api/meta"
12+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1013 "k8s.io/apimachinery/pkg/types"
1114 "k8s.io/client-go/util/retry"
1215 "sigs.k8s.io/controller-runtime/pkg/client"
@@ -64,6 +67,23 @@ func (r *RabbitmqClusterReconciler) statefulSet(ctx context.Context, rmq *rabbit
6467 return sts , nil
6568}
6669
70+ // statefulSetUID only returns the UID successfully when the controller reference uid matches the rmq uid
71+ func (r * RabbitmqClusterReconciler ) statefulSetUID (ctx context.Context , rmq * rabbitmqv1beta1.RabbitmqCluster ) (types.UID , error ) {
72+ var err error
73+ var sts * appsv1.StatefulSet
74+ var ref * metav1.OwnerReference
75+ if sts , err = r .statefulSet (ctx , rmq ); err != nil {
76+ return "" , fmt .Errorf ("failed to get statefulSet: %s" , err .Error ())
77+ }
78+ if ref = metav1 .GetControllerOf (sts ); ref == nil {
79+ return "" , fmt .Errorf ("failed to get controller reference for statefulSet %s" , sts .GetName ())
80+ }
81+ if string (rmq .GetUID ()) != string (ref .UID ) {
82+ return "" , fmt .Errorf ("statefulSet %s not owned by current RabbitmqCluster %s" , sts .GetName (), rmq .GetName ())
83+ }
84+ return sts .UID , nil
85+ }
86+
6787func (r * RabbitmqClusterReconciler ) configMap (ctx context.Context , rmq * rabbitmqv1beta1.RabbitmqCluster , name string ) (* corev1.ConfigMap , error ) {
6888 configMap := & corev1.ConfigMap {}
6989 if err := r .Get (ctx , types.NamespacedName {Namespace : rmq .Namespace , Name : name }, configMap ); err != nil {
0 commit comments