Skip to content

Commit 93feff5

Browse files
committed
wip
1 parent 02437d4 commit 93feff5

File tree

3 files changed

+98
-3
lines changed

3 files changed

+98
-3
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ require (
197197
google.golang.org/protobuf v1.28.0 // indirect
198198
gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect
199199
gopkg.in/inf.v0 v0.9.1 // indirect
200+
gopkg.in/ini.v1 v1.66.6 // indirect
200201
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
201202
gopkg.in/square/go-jose.v2 v2.5.1 // indirect
202203
gopkg.in/yaml.v2 v2.4.0 // indirect

rabbitmqclient/cluster_reference.go

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
rabbitmqv1beta1 "github.com/rabbitmq/cluster-operator/api/v1beta1"
1111
topology "github.com/rabbitmq/messaging-topology-operator/api/v1beta1"
12+
"gopkg.in/ini.v1"
1213
corev1 "k8s.io/api/core/v1"
1314
"k8s.io/apimachinery/pkg/types"
1415
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -99,7 +100,10 @@ func ParseReference(ctx context.Context, c client.Client, rmq topology.RabbitmqC
99100
return nil, false, err
100101
}
101102

102-
endpoint, err := managementURI(svc, cluster.TLSEnabled(), clusterDomain)
103+
var pathPrefix string
104+
pathPrefix = readClusterPathPrefix(cluster)
105+
106+
endpoint, err := managementURI(svc, cluster.TLSEnabled(), clusterDomain, pathPrefix)
103107
if err != nil {
104108
return nil, false, fmt.Errorf("failed to get endpoint from specified rabbitmqcluster: %w", err)
105109
}
@@ -161,6 +165,19 @@ func readCredentialsFromKubernetesSecret(secret *corev1.Secret) (ConnectionCrede
161165
}, tlsEnabled, nil
162166
}
163167

168+
func readClusterPathPrefix(cluster *rabbitmqv1beta1.RabbitmqCluster) string {
169+
additionalConfig := cluster.Spec.Rabbitmq.AdditionalConfig
170+
171+
if additionalConfig == "" {
172+
return ""
173+
}
174+
cfg, _ := ini.Load(
175+
[]byte(additionalConfig),
176+
)
177+
178+
return cfg.Section("management").Key("path_prefix").String()
179+
}
180+
164181
func readUsernamePassword(secret *corev1.Secret) (string, string, error) {
165182
if secret == nil {
166183
return "", "", errors.New("unable to extract data from nil secret")
@@ -169,7 +186,7 @@ func readUsernamePassword(secret *corev1.Secret) (string, string, error) {
169186
return string(secret.Data["username"]), string(secret.Data["password"]), nil
170187
}
171188

172-
func managementURI(svc *corev1.Service, tlsEnabled bool, clusterDomain string) (string, error) {
189+
func managementURI(svc *corev1.Service, tlsEnabled bool, clusterDomain string, pathPrefix string) (string, error) {
173190
var managementUiPort int
174191
for _, port := range svc.Spec.Ports {
175192
if port.Name == "management-tls" {
@@ -190,5 +207,11 @@ func managementURI(svc *corev1.Service, tlsEnabled bool, clusterDomain string) (
190207
if tlsEnabled {
191208
scheme = "https"
192209
}
193-
return fmt.Sprintf("%s://%s.%s.svc%s:%d", scheme, svc.Name, svc.Namespace, clusterDomain, managementUiPort), nil
210+
url := url.URL{
211+
Scheme: scheme,
212+
Host: fmt.Sprintf("%s.%s.svc%s:%d", svc.Name, svc.Namespace, clusterDomain, managementUiPort),
213+
Path: pathPrefix,
214+
}
215+
return url.String(), nil
216+
// return fmt.Sprintf("%s://%s.%s.svc%s:%d", scheme, svc.Name, svc.Namespace, clusterDomain, pathPrefix, managementUiPort), nil
194217
}

rabbitmqclient/cluster_reference_test.go

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,77 @@ var _ = Describe("ParseReference", func() {
283283
})
284284
})
285285

286+
When("the RabbitmqCluster is configured with management path_prefix", func() {
287+
BeforeEach(func() {
288+
existingRabbitMQCluster = &rabbitmqv1beta1.RabbitmqCluster{
289+
ObjectMeta: metav1.ObjectMeta{
290+
Name: "rmq",
291+
Namespace: namespace,
292+
},
293+
Spec: rabbitmqv1beta1.RabbitmqClusterSpec{
294+
Rabbitmq: rabbitmqv1beta1.RabbitmqClusterConfigurationSpec{
295+
AdditionalConfig: `
296+
[management]
297+
path_prefix = /my/prefix
298+
`,
299+
},
300+
},
301+
Status: rabbitmqv1beta1.RabbitmqClusterStatus{
302+
Binding: &corev1.LocalObjectReference{
303+
Name: "rmq-default-user-credentials",
304+
},
305+
DefaultUser: &rabbitmqv1beta1.RabbitmqClusterDefaultUser{
306+
ServiceReference: &rabbitmqv1beta1.RabbitmqClusterServiceReference{
307+
Name: "rmq",
308+
Namespace: namespace,
309+
},
310+
},
311+
},
312+
}
313+
existingCredentialSecret = &corev1.Secret{
314+
ObjectMeta: metav1.ObjectMeta{
315+
Name: "rmq-default-user-credentials",
316+
Namespace: namespace,
317+
},
318+
Data: map[string][]byte{
319+
"username": []byte(existingRabbitMQUsername),
320+
"password": []byte(existingRabbitMQPassword),
321+
},
322+
}
323+
existingService = &corev1.Service{
324+
ObjectMeta: metav1.ObjectMeta{
325+
Name: "rmq",
326+
Namespace: namespace,
327+
},
328+
Spec: corev1.ServiceSpec{
329+
ClusterIP: "1.2.3.4",
330+
Ports: []corev1.ServicePort{
331+
{
332+
Name: "management-tls",
333+
Port: int32(15671),
334+
},
335+
},
336+
},
337+
}
338+
objs = []runtime.Object{existingRabbitMQCluster, existingCredentialSecret, existingService}
339+
})
340+
341+
It("returns correct creds in connectionCredentials", func() {
342+
credsProvider, _, err := rabbitmqclient.ParseReference(ctx, fakeClient,
343+
topology.RabbitmqClusterReference{Name: existingRabbitMQCluster.Name},
344+
existingRabbitMQCluster.Namespace,
345+
"")
346+
Expect(err).NotTo(HaveOccurred())
347+
348+
usernameBytes, _ := credsProvider.Data("username")
349+
passwordBytes, _ := credsProvider.Data("password")
350+
uriBytes, _ := credsProvider.Data("uri")
351+
Expect(usernameBytes).To(Equal([]byte(existingRabbitMQUsername)))
352+
Expect(passwordBytes).To(Equal([]byte(existingRabbitMQPassword)))
353+
Expect(uriBytes).To(Equal([]byte("http://rmq.rabbitmq-system.svc:15671/my/prefix")))
354+
})
355+
})
356+
286357
Context("spec.rabbitmqClusterReference.connectionSecret is set", func() {
287358
When("uri has no scheme defined", func() {
288359
BeforeEach(func() {

0 commit comments

Comments
 (0)