Skip to content

Commit 5f98b43

Browse files
authored
Allow a default to be set for imagePullSecrets on operator scope (#926)
This change allows for the operator to set a configurable list of imagePullSecrets as the default to use on all Pods created in RabbitmqClusters. If a RabbitmqClusterSpec does not specify imagePullSecrets, the operator will use the value of the environment variable `DEFAULT_IMAGE_PULL_SECRETS` if set to update the RabbitmqClusterSpec. This closes #870
1 parent 6d9a96b commit 5f98b43

File tree

4 files changed

+42
-2
lines changed

4 files changed

+42
-2
lines changed

controllers/rabbitmqcluster_controller.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ type RabbitmqClusterReconciler struct {
6666
PodExecutor PodExecutor
6767
DefaultRabbitmqImage string
6868
DefaultUserUpdaterImage string
69+
DefaultImagePullSecrets string
6970
}
7071

7172
// the rbac rule requires an empty row at the end to render
@@ -129,6 +130,21 @@ func (r *RabbitmqClusterReconciler) Reconcile(ctx context.Context, req ctrl.Requ
129130
}
130131
}
131132

133+
if rabbitmqCluster.Spec.ImagePullSecrets == nil {
134+
for _, reference := range strings.Split(r.DefaultImagePullSecrets, ",") {
135+
rabbitmqCluster.Spec.ImagePullSecrets = append(rabbitmqCluster.Spec.ImagePullSecrets, corev1.LocalObjectReference{Name: reference})
136+
}
137+
if err = r.Update(ctx, rabbitmqCluster); err != nil {
138+
if k8serrors.IsConflict(err) {
139+
logger.Info("failed to update image pull secrets because of conflict; requeueing...",
140+
"namespace", rabbitmqCluster.Namespace,
141+
"name", rabbitmqCluster.Name)
142+
return ctrl.Result{RequeueAfter: 2 * time.Second}, nil
143+
}
144+
return ctrl.Result{}, err
145+
}
146+
}
147+
132148
if rabbitmqCluster.UsesDefaultUserUpdaterImage() {
133149
rabbitmqCluster.Spec.SecretBackend.Vault.DefaultUserUpdaterImage = &r.DefaultUserUpdaterImage
134150
if err = r.Update(ctx, rabbitmqCluster); err != nil {

controllers/rabbitmqcluster_controller_test.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,16 +74,32 @@ var _ = Describe("RabbitmqClusterController", func() {
7474
Expect(fetchedCluster.Spec.Image).To(Equal(defaultRabbitmqImage))
7575
})
7676

77+
var sts *appsv1.StatefulSet
7778
By("creating a statefulset with default configurations", func() {
78-
sts := statefulSet(ctx, cluster)
79+
sts = statefulSet(ctx, cluster)
7980

8081
Expect(sts.Name).To(Equal(cluster.ChildResourceName("server")))
81-
Expect(sts.Spec.Template.Spec.ImagePullSecrets).To(BeEmpty())
8282

8383
Expect(len(sts.Spec.VolumeClaimTemplates)).To(Equal(1))
8484
Expect(sts.Spec.VolumeClaimTemplates[0].Spec.StorageClassName).To(BeNil())
8585
})
8686

87+
By("setting the default imagePullSecrets", func() {
88+
Expect(sts.Spec.Template.Spec.ImagePullSecrets).To(ConsistOf(
89+
[]corev1.LocalObjectReference{
90+
{
91+
Name: "image-secret-1",
92+
},
93+
{
94+
Name: "image-secret-2",
95+
},
96+
{
97+
Name: "image-secret-3",
98+
},
99+
},
100+
))
101+
})
102+
87103
By("creating the server conf configmap", func() {
88104
cfm := configMap(ctx, cluster, "server-conf")
89105
Expect(cfm.Name).To(Equal(cluster.ChildResourceName("server-conf")))

controllers/suite_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const (
3737
controllerName = "rabbitmqcluster-controller"
3838
defaultRabbitmqImage = "default-rabbit-image:stable"
3939
defaultUserUpdaterImage = "default-UU-image:unstable"
40+
defaultImagePullSecrets = "image-secret-1,image-secret-2,image-secret-3"
4041
)
4142

4243
var (
@@ -94,6 +95,7 @@ var _ = BeforeSuite(func() {
9495
PodExecutor: fakeExecutor,
9596
DefaultRabbitmqImage: defaultRabbitmqImage,
9697
DefaultUserUpdaterImage: defaultUserUpdaterImage,
98+
DefaultImagePullSecrets: defaultImagePullSecrets,
9799
}).SetupWithManager(mgr)
98100
Expect(err).ToNot(HaveOccurred())
99101

main.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ func main() {
4747
metricsAddr string
4848
defaultRabbitmqImage = "rabbitmq:3.8.21-management"
4949
defaultUserUpdaterImage = "rabbitmqoperator/default-user-credential-updater:1.0.0"
50+
defaultImagePullSecrets = ""
5051
)
5152

5253
flag.StringVar(&metricsAddr, "metrics-bind-address", ":9782", "The address the metric endpoint binds to.")
@@ -75,6 +76,10 @@ func main() {
7576
defaultUserUpdaterImage = configuredDefaultUserUpdaterImage
7677
}
7778

79+
if configuredDefaultImagePullSecrets, ok := os.LookupEnv("DEFAULT_IMAGE_PULL_SECRETS"); ok {
80+
defaultImagePullSecrets = configuredDefaultImagePullSecrets
81+
}
82+
7883
options := ctrl.Options{
7984
Scheme: scheme,
8085
MetricsBindAddress: metricsAddr,
@@ -127,6 +132,7 @@ func main() {
127132
PodExecutor: controllers.NewPodExecutor(),
128133
DefaultRabbitmqImage: defaultRabbitmqImage,
129134
DefaultUserUpdaterImage: defaultUserUpdaterImage,
135+
DefaultImagePullSecrets: defaultImagePullSecrets,
130136
}).SetupWithManager(mgr)
131137
if err != nil {
132138
log.Error(err, "unable to create controller", controllerName)

0 commit comments

Comments
 (0)