Skip to content

Commit b17bec0

Browse files
authored
Merge pull request #1721 from hxyannay/main
Add connection_string secret to default_user secret
2 parents 86e948e + 58996bf commit b17bec0

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed

internal/resource/default_user_secret.go

+10
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ func (builder *DefaultUserSecretBuilder) Build() (client.Object, error) {
7474
},
7575
}
7676
builder.updatePorts(secret)
77+
builder.updateConnectionString(secret)
7778

7879
return secret, nil
7980
}
@@ -87,6 +88,7 @@ func (builder *DefaultUserSecretBuilder) Update(object client.Object) error {
8788
secret.Labels = metadata.GetLabels(builder.Instance.Name, builder.Instance.Labels)
8889
secret.Annotations = metadata.ReconcileAndFilterAnnotations(secret.GetAnnotations(), builder.Instance.Annotations)
8990
builder.updatePorts(secret)
91+
builder.updateConnectionString(secret)
9092

9193
if err := controllerutil.SetControllerReference(builder.Instance, secret, builder.Scheme); err != nil {
9294
return fmt.Errorf("failed setting controller reference: %w", err)
@@ -145,6 +147,14 @@ func (builder *DefaultUserSecretBuilder) updatePorts(secret *corev1.Secret) {
145147
}
146148
}
147149

150+
func (builder *DefaultUserSecretBuilder) updateConnectionString(secret *corev1.Secret) {
151+
if builder.Instance.Spec.TLS.SecretName != "" {
152+
secret.Data["connection_string"] = []byte(fmt.Sprintf("amqps://%s:%s@%s:%s/", secret.Data["username"], secret.Data["password"], secret.Data["host"], secret.Data["port"]))
153+
} else {
154+
secret.Data["connection_string"] = []byte(fmt.Sprintf("amqp://%s:%s@%s:%s/", secret.Data["username"], secret.Data["password"], secret.Data["host"], secret.Data["port"]))
155+
}
156+
}
157+
148158
// generateUsername returns a base64 string that has "default_user_" as prefix
149159
// returned string has length 'l' when base64 decoded
150160
func generateUsername(l int) (string, error) {

internal/resource/default_user_secret_test.go

+20-6
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ package resource_test
1111

1212
import (
1313
b64 "encoding/base64"
14+
"fmt"
15+
1416
. "github.com/onsi/ginkgo/v2"
1517
. "github.com/onsi/gomega"
1618
rabbitmqv1beta1 "github.com/rabbitmq/cluster-operator/v2/api/v1beta1"
@@ -100,6 +102,16 @@ var _ = Describe("DefaultUserSecret", func() {
100102
Expect(port).To(BeEquivalentTo("5672"))
101103
})
102104

105+
By("Setting a connection string", func() {
106+
Expect(secret.Data).To(HaveKey("username"), "Failed to find a key \"username\" in the generated Secret")
107+
Expect(secret.Data).To(HaveKey("password"), "Failed to find a key \"password\" in the generated Secret")
108+
Expect(secret.Data).To(HaveKey("host"), "Failed to find a key \"host\" in the generated Secret")
109+
Expect(secret.Data).To(HaveKey("port"), "Failed to find a key \"port\" in the generated Secret")
110+
111+
expectedConnectionString := []byte(fmt.Sprintf("amqp://%s:%s@%s:%s/", secret.Data["username"], secret.Data["password"], secret.Data["host"], secret.Data["port"]))
112+
Expect(secret.Data).To(HaveKeyWithValue("connection_string", expectedConnectionString))
113+
})
114+
103115
By("creating a default_user.conf file that contains the correct sysctl config format to be parsed by RabbitMQ", func() {
104116
defaultUserConf, ok := secret.Data["default_user.conf"]
105117
Expect(ok).To(BeTrue(), "Failed to find a key \"default_user.conf\" in the generated Secret")
@@ -167,18 +179,18 @@ var _ = Describe("DefaultUserSecret", func() {
167179
})
168180

169181
Context("when TLS is enabled", func() {
170-
It("Uses the AMQPS port in the user secret", func() {
171-
var port []byte
172-
182+
It("Uses the AMQPS protocol in the user secret", func() {
173183
instance.Spec.TLS.SecretName = "tls-secret"
174184

175185
obj, err := defaultUserSecretBuilder.Build()
176186
Expect(err).NotTo(HaveOccurred())
177187
secret = obj.(*corev1.Secret)
178188

179-
port, ok := secret.Data["port"]
180-
Expect(ok).To(BeTrue(), "Failed to find key \"port\" in the generated Secret")
181-
Expect(port).To(BeEquivalentTo("5671"))
189+
By("Setting the AMQPS port in the user secret")
190+
Expect(secret.Data).To(HaveKeyWithValue("port", []byte("5671")))
191+
192+
By("setting the connection string to use the AMQPS protocol")
193+
Expect(secret.Data).To(HaveKeyWithValue("connection_string", MatchRegexp("amqps:.*:5671/")))
182194
})
183195

184196
Context("when MQTT, STOMP, streams, WebMQTT, and WebSTOMP are enabled", func() {
@@ -338,6 +350,8 @@ var _ = Describe("DefaultUserSecret", func() {
338350
Expect(ok).To(BeTrue())
339351
Expect(port).To(BeEquivalentTo("5671"))
340352

353+
Expect(secret.Data).To(HaveKeyWithValue("connection_string", MatchRegexp("amqps:.*:5671/")))
354+
341355
port, ok = secret.Data["mqtt-port"]
342356
Expect(ok).To(BeTrue())
343357
Expect(port).To(BeEquivalentTo("8883"))

0 commit comments

Comments
 (0)