Skip to content
This repository was archived by the owner on Mar 25, 2024. It is now read-only.

Commit 4e142af

Browse files
author
Alena Prokharchyk
authored
Merge pull request #16 from alena1108/ingressname
Bug fixes
2 parents 838ac03 + ee5efce commit 4e142af

File tree

2 files changed

+59
-43
lines changed

2 files changed

+59
-43
lines changed

main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import (
1111
)
1212

1313
var (
14-
lbControllerName = flag.String("lb-controller", "kubernetes", "Ingress controller name")
15-
lbProviderName = flag.String("lb-provider", "haproxy", "Lb controller name")
14+
lbControllerName = flag.String("controller", "kubernetes", "Controller plugin name")
15+
lbProviderName = flag.String("provider", "haproxy", "Provider plugin name")
1616

1717
lbc controller.LBController
1818
lbp provider.LBProvider

provider/rancher/rancher.go

Lines changed: 57 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ type PublicEndpoint struct {
2424
const (
2525
controllerStackName string = "kubernetes-ingress-lbs"
2626
controllerExternalIDPrefix string = "kubernetes-ingress-lbs://"
27+
lbSvcNameSeparator string = "-rancherlb-"
2728
)
2829

2930
type LBProvider struct {
@@ -125,10 +126,16 @@ func (lbp *LBProvider) ApplyConfig(lbConfig *config.LoadBalancerConfig) error {
125126
}
126127

127128
func (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

134141
func (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

211214
func (lbp *LBProvider) GetName() string {
@@ -214,33 +217,32 @@ func (lbp *LBProvider) GetName() string {
214217

215218
func (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+
377394
func 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

397414
func (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

Comments
 (0)