Skip to content

Commit 008183c

Browse files
authored
Merge pull request #382 from rabbitmq/projected-keys-361
Mount configurations as projected keys
2 parents 9489e51 + 67b10d1 commit 008183c

File tree

3 files changed

+104
-86
lines changed

3 files changed

+104
-86
lines changed

controllers/rabbitmqcluster_controller_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1259,7 +1259,7 @@ var _ = Describe("RabbitmqClusterController", func() {
12591259
},
12601260

12611261
corev1.Volume{
1262-
Name: "rabbitmq-etc",
1262+
Name: "rabbitmq-plugins",
12631263
VolumeSource: corev1.VolumeSource{
12641264
EmptyDir: &corev1.EmptyDirVolumeSource{},
12651265
},

internal/resource/statefulset.go

+38-27
Original file line numberDiff line numberDiff line change
@@ -278,12 +278,6 @@ func (builder *StatefulSetBuilder) podTemplateSpec(annotations, labels map[strin
278278
},
279279
},
280280
},
281-
{
282-
Name: "rabbitmq-etc",
283-
VolumeSource: corev1.VolumeSource{
284-
EmptyDir: &corev1.EmptyDirVolumeSource{},
285-
},
286-
},
287281
{
288282
Name: "rabbitmq-confd",
289283
VolumeSource: corev1.VolumeSource{
@@ -320,6 +314,12 @@ func (builder *StatefulSetBuilder) podTemplateSpec(annotations, labels map[strin
320314
},
321315
},
322316
},
317+
{
318+
Name: "rabbitmq-plugins",
319+
VolumeSource: corev1.VolumeSource{
320+
EmptyDir: &corev1.EmptyDirVolumeSource{},
321+
},
322+
},
323323
{
324324
Name: "pod-info",
325325
VolumeSource: corev1.VolumeSource{
@@ -387,12 +387,18 @@ func (builder *StatefulSetBuilder) podTemplateSpec(annotations, labels map[strin
387387
MountPath: "/var/lib/rabbitmq/mnesia/",
388388
},
389389
{
390-
Name: "rabbitmq-etc",
391-
MountPath: "/etc/rabbitmq/",
390+
Name: "rabbitmq-plugins",
391+
MountPath: "/operator",
392+
},
393+
{
394+
Name: "server-conf",
395+
MountPath: "/etc/rabbitmq/rabbitmq.conf",
396+
SubPath: "rabbitmq.conf",
392397
},
393398
{
394399
Name: "rabbitmq-confd",
395-
MountPath: "/etc/rabbitmq/conf.d/",
400+
MountPath: "/etc/rabbitmq/conf.d/default_user.conf",
401+
SubPath: "default_user.conf",
396402
},
397403
{
398404
Name: "rabbitmq-erlang-cookie",
@@ -404,6 +410,18 @@ func (builder *StatefulSetBuilder) podTemplateSpec(annotations, labels map[strin
404410
},
405411
}
406412

413+
if builder.Instance.Spec.Rabbitmq.EnvConfig != "" {
414+
rabbitmqContainerVolumeMounts = append(rabbitmqContainerVolumeMounts, corev1.VolumeMount{
415+
Name: "server-conf", MountPath: "/etc/rabbitmq/rabbitmq-env.conf", SubPath: "rabbitmq-env.conf",
416+
})
417+
}
418+
419+
if builder.Instance.Spec.Rabbitmq.AdvancedConfig != "" {
420+
rabbitmqContainerVolumeMounts = append(rabbitmqContainerVolumeMounts, corev1.VolumeMount{
421+
Name: "server-conf", MountPath: "/etc/rabbitmq/advanced.config", SubPath: "advanced.config",
422+
})
423+
}
424+
407425
tlsSpec := builder.Instance.Spec.TLS
408426
if tlsSpec.SecretName != "" {
409427
// add tls port
@@ -506,18 +524,11 @@ func (builder *StatefulSetBuilder) podTemplateSpec(annotations, labels map[strin
506524
},
507525
},
508526
Command: []string{
509-
"sh", "-c", "cp /tmp/rabbitmq/rabbitmq.conf /etc/rabbitmq/rabbitmq.conf " +
510-
"&& chown 999:999 /etc/rabbitmq/rabbitmq.conf " +
511-
"&& echo '' >> /etc/rabbitmq/rabbitmq.conf ; " +
512-
"cp /tmp/rabbitmq/advanced.config /etc/rabbitmq/advanced.config " +
513-
"&& chown 999:999 /etc/rabbitmq/advanced.config ; " +
514-
"cp /tmp/rabbitmq/rabbitmq-env.conf /etc/rabbitmq/rabbitmq-env.conf " +
515-
"&& chown 999:999 /etc/rabbitmq/rabbitmq-env.conf ; " +
516-
"cp /tmp/erlang-cookie-secret/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie " +
527+
"sh", "-c", "cp /tmp/erlang-cookie-secret/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie " +
517528
"&& chown 999:999 /var/lib/rabbitmq/.erlang.cookie " +
518529
"&& chmod 600 /var/lib/rabbitmq/.erlang.cookie ; " +
519-
"cp /tmp/rabbitmq-plugins/enabled_plugins /etc/rabbitmq/enabled_plugins " +
520-
"&& chown 999:999 /etc/rabbitmq/enabled_plugins ; " +
530+
"cp /tmp/rabbitmq-plugins/enabled_plugins /operator/enabled_plugins " +
531+
"&& chown 999:999 /operator/enabled_plugins ; " +
521532
"chgrp 999 /var/lib/rabbitmq/mnesia/",
522533
},
523534
Resources: corev1.ResourceRequirements{
@@ -531,18 +542,10 @@ func (builder *StatefulSetBuilder) podTemplateSpec(annotations, labels map[strin
531542
},
532543
},
533544
VolumeMounts: []corev1.VolumeMount{
534-
{
535-
Name: "server-conf",
536-
MountPath: "/tmp/rabbitmq/",
537-
},
538545
{
539546
Name: "plugins-conf",
540547
MountPath: "/tmp/rabbitmq-plugins/",
541548
},
542-
{
543-
Name: "rabbitmq-etc",
544-
MountPath: "/etc/rabbitmq/",
545-
},
546549
{
547550
Name: "rabbitmq-erlang-cookie",
548551
MountPath: "/var/lib/rabbitmq/",
@@ -551,6 +554,10 @@ func (builder *StatefulSetBuilder) podTemplateSpec(annotations, labels map[strin
551554
Name: "erlang-cookie-secret",
552555
MountPath: "/tmp/erlang-cookie-secret/",
553556
},
557+
{
558+
Name: "rabbitmq-plugins",
559+
MountPath: "/operator",
560+
},
554561
{
555562
Name: "persistence",
556563
MountPath: "/var/lib/rabbitmq/mnesia/",
@@ -583,6 +590,10 @@ func (builder *StatefulSetBuilder) podTemplateSpec(annotations, labels map[strin
583590
},
584591
},
585592
},
593+
{
594+
Name: "RABBITMQ_ENABLED_PLUGINS_FILE",
595+
Value: "/operator/enabled_plugins",
596+
},
586597
{
587598
Name: "K8S_SERVICE_NAME",
588599
Value: builder.Instance.ChildResourceName("headless"),

internal/resource/statefulset_test.go

+65-58
Original file line numberDiff line numberDiff line change
@@ -759,6 +759,10 @@ var _ = Describe("StatefulSet", func() {
759759
},
760760
},
761761
},
762+
{
763+
Name: "RABBITMQ_ENABLED_PLUGINS_FILE",
764+
Value: "/operator/enabled_plugins",
765+
},
762766
{
763767
Name: "K8S_SERVICE_NAME",
764768
Value: instance.ChildResourceName("headless"),
@@ -781,33 +785,41 @@ var _ = Describe("StatefulSet", func() {
781785
Expect(container.Env).To(ConsistOf(requiredEnvVariables))
782786
})
783787

784-
It("creates required Volume Mounts for the rabbitmq container", func() {
785-
stsBuilder := builder.StatefulSet()
786-
Expect(stsBuilder.Update(statefulSet)).To(Succeed())
788+
Context("Rabbitmq container volume mounts", func() {
789+
DescribeTable("Volume mounts depending on spec configuration",
790+
func(rabbitmqEnv, advancedConfig string) {
791+
stsBuilder := builder.StatefulSet()
792+
stsBuilder.Instance.Spec.Rabbitmq.EnvConfig = rabbitmqEnv
793+
stsBuilder.Instance.Spec.Rabbitmq.AdvancedConfig = advancedConfig
794+
Expect(stsBuilder.Update(statefulSet)).To(Succeed())
787795

788-
container := extractContainer(statefulSet.Spec.Template.Spec.Containers, "rabbitmq")
789-
Expect(container.VolumeMounts).To(ConsistOf(
790-
corev1.VolumeMount{
791-
Name: "persistence",
792-
MountPath: "/var/lib/rabbitmq/mnesia/",
793-
},
794-
corev1.VolumeMount{
795-
Name: "rabbitmq-etc",
796-
MountPath: "/etc/rabbitmq/",
797-
},
798-
corev1.VolumeMount{
799-
Name: "rabbitmq-confd",
800-
MountPath: "/etc/rabbitmq/conf.d/",
801-
},
802-
corev1.VolumeMount{
803-
Name: "rabbitmq-erlang-cookie",
804-
MountPath: "/var/lib/rabbitmq/",
805-
},
806-
corev1.VolumeMount{
807-
Name: "pod-info",
808-
MountPath: "/etc/pod-info/",
796+
expectedVolumeMounts := []corev1.VolumeMount{
797+
{Name: "persistence", MountPath: "/var/lib/rabbitmq/mnesia/"},
798+
{Name: "rabbitmq-erlang-cookie", MountPath: "/var/lib/rabbitmq/"},
799+
{Name: "pod-info", MountPath: "/etc/pod-info/"},
800+
{Name: "rabbitmq-confd", MountPath: "/etc/rabbitmq/conf.d/default_user.conf", SubPath: "default_user.conf"},
801+
{Name: "server-conf", MountPath: "/etc/rabbitmq/rabbitmq.conf", SubPath: "rabbitmq.conf"},
802+
{Name: "rabbitmq-plugins", MountPath: "/operator"},
803+
}
804+
805+
if rabbitmqEnv != "" {
806+
expectedVolumeMounts = append(expectedVolumeMounts, corev1.VolumeMount{
807+
Name: "server-conf", MountPath: "/etc/rabbitmq/rabbitmq-env.conf", SubPath: "rabbitmq-env.conf"})
808+
}
809+
810+
if advancedConfig != "" {
811+
expectedVolumeMounts = append(expectedVolumeMounts, corev1.VolumeMount{
812+
Name: "server-conf", MountPath: "/etc/rabbitmq/advanced.config", SubPath: "advanced.config"})
813+
}
814+
815+
container := extractContainer(statefulSet.Spec.Template.Spec.Containers, "rabbitmq")
816+
Expect(container.VolumeMounts).To(ConsistOf(expectedVolumeMounts))
809817
},
810-
))
818+
Entry("Both env and advanced configs are set", "rabbitmq-env-is-set", "advanced-config-is-set"),
819+
Entry("Only env config is set", "rabbitmq-env-is-set", ""),
820+
Entry("Only advanced config is set", "", "advanced-config-is-set"),
821+
Entry("No configs are set", "", ""),
822+
)
811823
})
812824

813825
It("defines the expected volumes", func() {
@@ -835,12 +847,6 @@ var _ = Describe("StatefulSet", func() {
835847
},
836848
},
837849
},
838-
corev1.Volume{
839-
Name: "rabbitmq-etc",
840-
VolumeSource: corev1.VolumeSource{
841-
EmptyDir: &corev1.EmptyDirVolumeSource{},
842-
},
843-
},
844850
corev1.Volume{
845851
Name: "rabbitmq-confd",
846852
VolumeSource: corev1.VolumeSource{
@@ -877,6 +883,12 @@ var _ = Describe("StatefulSet", func() {
877883
},
878884
},
879885
},
886+
corev1.Volume{
887+
Name: "rabbitmq-plugins",
888+
VolumeSource: corev1.VolumeSource{
889+
EmptyDir: &corev1.EmptyDirVolumeSource{},
890+
},
891+
},
880892
corev1.Volume{
881893
Name: "pod-info",
882894
VolumeSource: corev1.VolumeSource{
@@ -950,33 +962,18 @@ var _ = Describe("StatefulSet", func() {
950962
})),
951963
})),
952964
"Command": ConsistOf(
953-
"sh", "-c", "cp /tmp/rabbitmq/rabbitmq.conf /etc/rabbitmq/rabbitmq.conf "+
954-
"&& chown 999:999 /etc/rabbitmq/rabbitmq.conf "+
955-
"&& echo '' >> /etc/rabbitmq/rabbitmq.conf ; "+
956-
"cp /tmp/rabbitmq/advanced.config /etc/rabbitmq/advanced.config "+
957-
"&& chown 999:999 /etc/rabbitmq/advanced.config ; "+
958-
"cp /tmp/rabbitmq/rabbitmq-env.conf /etc/rabbitmq/rabbitmq-env.conf "+
959-
"&& chown 999:999 /etc/rabbitmq/rabbitmq-env.conf ; "+
960-
"cp /tmp/erlang-cookie-secret/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie "+
965+
"sh", "-c", "cp /tmp/erlang-cookie-secret/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie "+
961966
"&& chown 999:999 /var/lib/rabbitmq/.erlang.cookie "+
962967
"&& chmod 600 /var/lib/rabbitmq/.erlang.cookie ; "+
963-
"cp /tmp/rabbitmq-plugins/enabled_plugins /etc/rabbitmq/enabled_plugins "+
964-
"&& chown 999:999 /etc/rabbitmq/enabled_plugins ; "+
968+
"cp /tmp/rabbitmq-plugins/enabled_plugins /operator/enabled_plugins "+
969+
"&& chown 999:999 /operator/enabled_plugins ; "+
965970
"chgrp 999 /var/lib/rabbitmq/mnesia/",
966971
),
967972
"VolumeMounts": ConsistOf(
968-
corev1.VolumeMount{
969-
Name: "server-conf",
970-
MountPath: "/tmp/rabbitmq/",
971-
},
972973
corev1.VolumeMount{
973974
Name: "plugins-conf",
974975
MountPath: "/tmp/rabbitmq-plugins/",
975976
},
976-
corev1.VolumeMount{
977-
Name: "rabbitmq-etc",
978-
MountPath: "/etc/rabbitmq/",
979-
},
980977
corev1.VolumeMount{
981978
Name: "rabbitmq-erlang-cookie",
982979
MountPath: "/var/lib/rabbitmq/",
@@ -985,6 +982,10 @@ var _ = Describe("StatefulSet", func() {
985982
Name: "erlang-cookie-secret",
986983
MountPath: "/tmp/erlang-cookie-secret/",
987984
},
985+
corev1.VolumeMount{
986+
Name: "rabbitmq-plugins",
987+
MountPath: "/operator",
988+
},
988989
corev1.VolumeMount{
989990
Name: "persistence",
990991
MountPath: "/var/lib/rabbitmq/mnesia/",
@@ -1012,7 +1013,6 @@ var _ = Describe("StatefulSet", func() {
10121013
})
10131014

10141015
Context("resources requirements", func() {
1015-
10161016
It("sets StatefulSet resource requirements", func() {
10171017
instance.Spec.Resources = &corev1.ResourceRequirements{
10181018
Requests: corev1.ResourceList{
@@ -1304,6 +1304,10 @@ var _ = Describe("StatefulSet", func() {
13041304
Name: "RABBITMQ_USE_LONGNAME",
13051305
Value: "true",
13061306
},
1307+
corev1.EnvVar{
1308+
Name: "RABBITMQ_ENABLED_PLUGINS_FILE",
1309+
Value: "/operator/enabled_plugins",
1310+
},
13071311
corev1.EnvVar{
13081312
Name: "RABBITMQ_NODENAME",
13091313
Value: "rabbit@$(MY_POD_NAME).$(K8S_SERVICE_NAME).$(MY_POD_NAMESPACE)",
@@ -1325,13 +1329,10 @@ var _ = Describe("StatefulSet", func() {
13251329
Name: "persistence",
13261330
MountPath: "/var/lib/rabbitmq/mnesia/",
13271331
},
1328-
corev1.VolumeMount{
1329-
Name: "rabbitmq-etc",
1330-
MountPath: "/etc/rabbitmq/",
1331-
},
13321332
corev1.VolumeMount{
13331333
Name: "rabbitmq-confd",
1334-
MountPath: "/etc/rabbitmq/conf.d/",
1334+
MountPath: "/etc/rabbitmq/conf.d/default_user.conf",
1335+
SubPath: "default_user.conf",
13351336
},
13361337
corev1.VolumeMount{
13371338
Name: "rabbitmq-erlang-cookie",
@@ -1341,10 +1342,17 @@ var _ = Describe("StatefulSet", func() {
13411342
Name: "pod-info",
13421343
MountPath: "/etc/pod-info/",
13431344
},
1345+
corev1.VolumeMount{
1346+
Name: "server-conf",
1347+
MountPath: "/etc/rabbitmq/rabbitmq.conf",
1348+
SubPath: "rabbitmq.conf",
1349+
},
1350+
corev1.VolumeMount{
1351+
Name: "rabbitmq-plugins",
1352+
MountPath: "/operator",
1353+
},
13441354
))
1345-
13461355
})
1347-
13481356
})
13491357

13501358
It("ensures override takes precedence when same property is set both at the top level and at the override level", func() {
@@ -1379,7 +1387,6 @@ var _ = Describe("StatefulSet", func() {
13791387
Expect(*statefulSet.Spec.Replicas).To(Equal(int32(4)))
13801388
Expect(extractContainer(statefulSet.Spec.Template.Spec.Containers, "rabbitmq").Image).To(Equal("override-image"))
13811389
})
1382-
13831390
})
13841391
})
13851392
})

0 commit comments

Comments
 (0)