@@ -23,6 +23,7 @@ type HAProxyTemplate struct {
2323 ClusterName string
2424 SslCert string
2525 sslEnabledServer bool
26+ IsPathBased bool
2627}
2728
2829type HAProxyConfig struct {
@@ -32,17 +33,17 @@ type HAProxyConfig struct {
3233}
3334
3435type FrontEndConfig struct {
35- FrontendName string
36- PathBasedRouting bool
37- Port int
38- TargetPort int
39- Path string
40- BackendName string
36+ FrontendName string
37+ IsPathBased bool
38+ Port int
39+ TargetPort int
40+ Path string
41+ BackendName string
4142}
4243
4344type BackendConfig struct {
44- IsPathBased bool
4545 BackendName string
46+ IsPathBased bool
4647 GroupName string
4748 Port int
4849 TargetPort int
@@ -67,11 +68,9 @@ func generateHAProxyConfig(cr *marklogicv1.MarklogicCluster) *HAProxyConfig {
6768 }
6869 }
6970 appServers := group .HAProxy .AppServers
70- var groupPathBased bool
71+ groupPathBased := * cr . Spec . HAProxy . PathBasedRouting
7172 if group .HAProxy .PathBasedRouting != nil {
7273 groupPathBased = * group .HAProxy .PathBasedRouting
73- } else {
74- groupPathBased = * cr .Spec .HAProxy .PathBasedRouting
7574 }
7675 if len (appServers ) == 0 {
7776 appServers = defaultAppServer
@@ -82,15 +81,15 @@ func generateHAProxyConfig(cr *marklogicv1.MarklogicCluster) *HAProxyConfig {
8281 targetPort = int (appServer .Port )
8382 }
8483 var key string
85- if groupPathBased {
84+ if ! groupPathBased {
8685 if int (appServer .Port ) == targetPort {
8786 key = fmt .Sprintf ("%d" , appServer .Port )
8887 } else {
8988 key = fmt .Sprintf ("%d-%d" , appServer .Port , targetPort )
9089 }
9190 } else {
9291 pathWithoutSlashes := strings .ReplaceAll (appServer .Path , "/" , "" )
93- key = fmt .Sprintf ("%d-%s-path" , appServer .Port , pathWithoutSlashes )
92+ key = fmt .Sprintf ("%d-%s-path" , appServer .TargetPort , pathWithoutSlashes )
9493 }
9594
9695 backendName := "marklogic-" + key + "-backend"
@@ -99,11 +98,11 @@ func generateHAProxyConfig(cr *marklogicv1.MarklogicCluster) *HAProxyConfig {
9998 frontendName := "marklogic-" + key + "-frontend"
10099 if _ , exists := frontendMap [key ]; ! exists {
101100 frontend := FrontEndConfig {
102- FrontendName : frontendName ,
103- PathBasedRouting : * cr . Spec . HAProxy . PathBasedRouting ,
104- Port : int (appServer .Port ),
105- TargetPort : targetPort ,
106- BackendName : backendName ,
101+ FrontendName : frontendName ,
102+ IsPathBased : groupPathBased ,
103+ Port : int (appServer .Port ),
104+ TargetPort : targetPort ,
105+ BackendName : backendName ,
107106 }
108107 frontendMap [key ] = frontend
109108 }
@@ -148,13 +147,20 @@ frontend marklogic-pathbased-frontend
148147 }
149148 result = parseTemplateToString (frontEndDef , data )
150149 for _ , backends := range config .BackendConfigMap {
151- data = & HAProxyTemplate {
152- PortNumber : int (backends [0 ].Port ),
153- TargetPortNumber : int (backends [0 ].TargetPort ),
154- Path : backends [0 ].Path ,
155- BackendName : backends [0 ].BackendName ,
150+ for _ , babackend := range backends {
151+ if ! babackend .IsPathBased {
152+ continue
153+ }
154+ data = & HAProxyTemplate {
155+ PortNumber : int (babackend .Port ),
156+ TargetPortNumber : int (babackend .TargetPort ),
157+ Path : babackend .Path ,
158+ IsPathBased : babackend .IsPathBased ,
159+ BackendName : babackend .BackendName ,
160+ }
161+ result += getFrontendForPathbased (data )
162+
156163 }
157- result += getFrontendForPathbased (data )
158164 }
159165 }
160166 // front end configuration for non-path based routing
@@ -180,7 +186,6 @@ frontend {{ .FrontendName }}
180186// generates backend config for HAProxy depending on pathBasedRouting flag and appServers
181187func generateBackendConfig (cr * marklogicv1.MarklogicCluster , config * HAProxyConfig ) string {
182188 backendConfigs := config .BackendConfigMap
183- pathBasedRouting := cr .Spec .HAProxy .PathBasedRouting
184189 var result string
185190
186191 backendTemplate := `
@@ -195,11 +200,6 @@ backend {{ .BackendName }}
195200 stick match req.cook(HostId)
196201 stick match req.cook(SessionId)
197202 default-server check`
198-
199- if * pathBasedRouting {
200- backendTemplate += `
201- http-request replace-path {{.Path}}(/)?(.*) /\2`
202- }
203203 for _ , backends := range backendConfigs {
204204 data := & HAProxyTemplate {
205205 BackendName : backends [0 ].BackendName ,
@@ -210,6 +210,10 @@ backend {{ .BackendName }}
210210 for _ , backend := range backends {
211211 name := backend .GroupName
212212 groupReplicas := backend .Replicas
213+ if backend .IsPathBased {
214+ backendTemplate += `
215+ http-request replace-path {{.Path}}(/)?(.*) /\2`
216+ }
213217 for i := 0 ; i < groupReplicas ; i ++ {
214218 data := & HAProxyTemplate {
215219 PortNumber : backend .TargetPort ,
0 commit comments