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+
164181func 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}
0 commit comments