@@ -24,6 +24,7 @@ type PublicEndpoint struct {
2424const (
2525 controllerStackName string = "kubernetes-ingress-lbs"
2626 controllerExternalIDPrefix string = "kubernetes-ingress-lbs://"
27+ lbSvcNameSeparator string = "-rancherlb-"
2728)
2829
2930type LBProvider struct {
@@ -125,10 +126,16 @@ func (lbp *LBProvider) ApplyConfig(lbConfig *config.LoadBalancerConfig) error {
125126}
126127
127128func (lbp * LBProvider ) CleanupConfig (name string ) error {
128- fmtName := lbp .formatLBName (name )
129- logrus .Infof ("Deleting lb service [%s]" , fmtName )
130-
131- return lbp .deleteLBService (fmtName , false )
129+ lb , err := lbp .getLBServiceForConfig (name )
130+ if err != nil {
131+ return err
132+ }
133+ if lb == nil {
134+ logrus .Infof ("LB [%s] doesn't exist, no need to cleanup " , name )
135+ return nil
136+ }
137+ logrus .Infof ("Deleting lb service [%s]" , lb .Name )
138+ return lbp .deleteLBService (lb , false )
132139}
133140
134141func (lbp * LBProvider ) Stop () error {
@@ -160,29 +167,22 @@ func (lbp *LBProvider) syncupEndpoints() error {
160167 continue
161168 }
162169 for _ , lb := range lbs {
163- splitted := strings .SplitN (lb .Name , "-" , 2 )
170+ splitted := strings .SplitN (lb .Name , lbSvcNameSeparator , 2 )
171+ if len (splitted ) != 2 {
172+ // to support legacy code when we used "-"" as a separator
173+ splitted = strings .SplitN (lb .Name , "-" , 2 )
174+ }
175+ // handle the case when lb was created outside of ingress scope
176+ if len (splitted ) < 2 {
177+ continue
178+ }
164179 lbp .syncEndpointsQueue .Enqueue (fmt .Sprintf ("%v/%v" , splitted [0 ], splitted [1 ]))
165180 }
166181 }
167182}
168183
169- func (lbp * LBProvider ) deleteLBService (name string , waitForRemoval bool ) error {
170- stack , err := lbp .getStack (controllerStackName )
171- if err != nil {
172- return err
173- }
174- if stack == nil {
175- logrus .Infof ("Ingress controller stack [%s] doesn't exist, no need to cleanup LB " , controllerStackName )
176- }
177- lb , err := lbp .getLBServiceByName (name )
178- if err != nil {
179- return err
180- }
181- if lb == nil {
182- logrus .Infof ("LB [%s] doesn't exist, no need to cleanup " , name )
183- return nil
184- }
185- _ , err = lbp .client .LoadBalancerService .ActionRemove (lb )
184+ func (lbp * LBProvider ) deleteLBService (lb * client.LoadBalancerService , waitForRemoval bool ) error {
185+ _ , err := lbp .client .LoadBalancerService .ActionRemove (lb )
186186 if err != nil {
187187 return err
188188 }
@@ -204,8 +204,11 @@ func (lbp *LBProvider) deleteLBService(name string, waitForRemoval bool) error {
204204 return err
205205}
206206
207- func (lbp * LBProvider ) formatLBName (name string ) string {
208- return strings .Replace (name , "/" , "-" , - 1 )
207+ func (lbp * LBProvider ) formatLBName (name string , legacy bool ) string {
208+ if legacy {
209+ return strings .Replace (name , "/" , "-" , - 1 )
210+ }
211+ return strings .Replace (name , "/" , lbSvcNameSeparator , - 1 )
209212}
210213
211214func (lbp * LBProvider ) GetName () string {
@@ -214,33 +217,32 @@ func (lbp *LBProvider) GetName() string {
214217
215218func (lbp * LBProvider ) GetPublicEndpoints (configName string ) []string {
216219 epStr := []string {}
217- lbFmt := lbp .formatLBName (configName )
218- lb , err := lbp .getLBServiceByName (lbFmt )
220+ lb , err := lbp .getLBServiceForConfig (configName )
219221 if err != nil {
220- logrus .Errorf ("Failed to find LB [%s]: %v" , lbFmt , err )
222+ logrus .Errorf ("Failed to find LB [%s]: %v" , configName , err )
221223 return epStr
222224 }
223225 if lb == nil {
224- logrus .Infof ("LB [%s] is not ready yet, skipping endpoint update" , lbFmt )
226+ logrus .Infof ("LB [%s] is not ready yet, skipping endpoint update" , configName )
225227 return epStr
226228 }
227229
228230 epChannel := lbp .waitForLBPublicEndpoints (1 , lb )
229231 _ , ok := <- epChannel
230232 if ! ok {
231- logrus .Infof ("Couldn't get publicEndpoints for LB [%s], skipping endpoint update" , lbFmt )
233+ logrus .Infof ("Couldn't get publicEndpoints for LB [%s], skipping endpoint update" , lb . Name )
232234 return epStr
233235 }
234236
235237 lb , err = lbp .reloadLBService (lb )
236238 if err != nil {
237- logrus .Infof ("Failed to reload LB [%s], skipping endpoint update" , lbFmt )
239+ logrus .Infof ("Failed to reload LB [%s], skipping endpoint update" , lb . Name )
238240 return epStr
239241 }
240242
241243 eps := lb .PublicEndpoints
242244 if len (eps ) == 0 {
243- logrus .Infof ("No public endpoints found for LB [%s], skipping endpoint update" , lbFmt )
245+ logrus .Infof ("No public endpoints found for LB [%s], skipping endpoint update" , lb . Name )
244246 return epStr
245247 }
246248
@@ -249,7 +251,7 @@ func (lbp *LBProvider) GetPublicEndpoints(configName string) []string {
249251
250252 err = convertObject (epObj , & ep )
251253 if err != nil {
252- logrus .Errorf ("Faield to convert public endpoints for LB [%s], skipping endpoint update %v" , lbFmt , err )
254+ logrus .Errorf ("Faield to convert public endpoints for LB [%s], skipping endpoint update %v" , lb . Name , err )
253255 return epStr
254256 }
255257 epStr = append (epStr , ep .IPAddress )
@@ -276,7 +278,7 @@ func (lbp *LBProvider) getOrCreateSystemStack() (*client.Environment, error) {
276278 opts := client .NewListOpts ()
277279 opts .Filters ["name" ] = controllerStackName
278280 opts .Filters ["removed_null" ] = "1"
279- opts .Filters ["external_id " ] = controllerExternalIDPrefix
281+ opts .Filters ["externalId " ] = controllerExternalIDPrefix
280282
281283 envs , err := lbp .client .Environment .List (opts )
282284 if err != nil {
@@ -365,15 +367,30 @@ func (lbp *LBProvider) cleanupLBService(lb *client.LoadBalancerService, lbConfig
365367 }
366368
367369 if portsChanged (newPorts , oldPorts ) {
368- fmtName := lbp .formatLBName (lbConfig .Name )
369370 logrus .Infof ("Ports changed for LB service [%s], need to recreate" , lb .Name )
370- lbp .deleteLBService (fmtName , true )
371+ lbp .deleteLBService (lb , true )
371372 return nil
372373 }
373374
374375 return lb
375376}
376377
378+ func (lbp * LBProvider ) getLBServiceForConfig (lbConfigName string ) (* client.LoadBalancerService , error ) {
379+ fmtName := lbp .formatLBName (lbConfigName , false )
380+ lb , err := lbp .getLBServiceByName (fmtName )
381+ if err != nil {
382+ return nil , err
383+ }
384+
385+ if lb != nil {
386+ return lb , nil
387+ }
388+ // legacy code where "-" was used as a separator
389+ fmtName = lbp .formatLBName (lbConfigName , true )
390+ logrus .Infof ("Fetching service by name %v" , fmtName )
391+ return lbp .getLBServiceByName (fmtName )
392+ }
393+
377394func portsChanged (newPorts []string , oldPorts []string ) bool {
378395 if len (newPorts ) != len (oldPorts ) {
379396 return true
@@ -395,12 +412,11 @@ func portsChanged(newPorts []string, oldPorts []string) bool {
395412}
396413
397414func (lbp * LBProvider ) createLBService (lbConfig * config.LoadBalancerConfig ) (* client.LoadBalancerService , error ) {
398- name := lbp .formatLBName (lbConfig .Name )
399415 stack , err := lbp .getOrCreateSystemStack ()
400416 if err != nil {
401417 return nil , err
402418 }
403- lb , err := lbp .getLBServiceByName ( name )
419+ lb , err := lbp .getLBServiceForConfig ( lbConfig . Name )
404420 if err != nil {
405421 return nil , err
406422 }
@@ -436,7 +452,7 @@ func (lbp *LBProvider) createLBService(lbConfig *config.LoadBalancerConfig) (*cl
436452 if err != nil {
437453 return nil , err
438454 }
439-
455+ name := lbp . formatLBName ( lbConfig . Name , false )
440456 lb = & client.LoadBalancerService {
441457 Name : name ,
442458 EnvironmentId : stack .Id ,
@@ -615,7 +631,7 @@ func (lbp *LBProvider) getAllLBServices() ([]client.LoadBalancerService, error)
615631 }
616632 opts := client .NewListOpts ()
617633 opts .Filters ["removed_null" ] = "1"
618- opts .Filters ["environment_id " ] = stack .Id
634+ opts .Filters ["environmentId " ] = stack .Id
619635 lbs , err := lbp .client .LoadBalancerService .List (opts )
620636 if err != nil {
621637 return nil , fmt .Errorf ("Coudln't get all lb services. Error: %#v" , err )
@@ -633,7 +649,7 @@ func (lbp *LBProvider) getLBServiceByName(name string) (*client.LoadBalancerServ
633649 opts := client .NewListOpts ()
634650 opts .Filters ["name" ] = name
635651 opts .Filters ["removed_null" ] = "1"
636- opts .Filters ["environment_id " ] = stack .Id
652+ opts .Filters ["environmentId " ] = stack .Id
637653 lbs , err := lbp .client .LoadBalancerService .List (opts )
638654 if err != nil {
639655 return nil , fmt .Errorf ("Coudln't get LB service by name [%s]. Error: %#v" , name , err )
@@ -659,7 +675,7 @@ func (lbp *LBProvider) getKubernetesServiceByName(name string, stackName string)
659675 opts := client .NewListOpts ()
660676 opts .Filters ["name" ] = name
661677 opts .Filters ["removed_null" ] = "1"
662- opts .Filters ["environment_id " ] = stack .Id
678+ opts .Filters ["environmentId " ] = stack .Id
663679 lbs , err := lbp .client .KubernetesService .List (opts )
664680 if err != nil {
665681 return nil , fmt .Errorf ("Coudln't get service by name [%s]. Error: %#v" , name , err )
0 commit comments