Skip to content

Commit 44660b8

Browse files
Merge pull request #126 from okokes-akamai/nb_filter
Filter NodeBalancers when we know their ipv4
2 parents 0e0250e + 5847874 commit 44660b8

3 files changed

Lines changed: 17 additions & 22 deletions

File tree

cloud/linode/fake_linode_test.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,6 @@ type fakeRequest struct {
3232
Method string
3333
}
3434

35-
type filterStruct struct {
36-
Label string `json:"label,omitempty"`
37-
NbID string `json:"nodebalancer_id,omitempty"`
38-
}
39-
4035
func newFake(t *testing.T) *fakeAPI {
4136
return &fakeAPI{
4237
t: t,
@@ -156,13 +151,13 @@ func (f *fakeAPI) ServeHTTP(w http.ResponseWriter, r *http.Request) {
156151
data = append(data, *n)
157152
}
158153
} else {
159-
var fs filterStruct
154+
var fs map[string]string
160155
err := json.Unmarshal([]byte(filter), &fs)
161156
if err != nil {
162157
f.t.Fatal(err)
163158
}
164159
for _, n := range f.nbc {
165-
if strconv.Itoa(n.NodeBalancerID) == fs.NbID {
160+
if strconv.Itoa(n.NodeBalancerID) == fs["nodebalancer_id"] {
166161
data = append(data, *n)
167162
}
168163
}
@@ -209,13 +204,14 @@ func (f *fakeAPI) ServeHTTP(w http.ResponseWriter, r *http.Request) {
209204
data = append(data, *n)
210205
}
211206
} else {
212-
var fs filterStruct
207+
var fs map[string]string
213208
err := json.Unmarshal([]byte(filter), &fs)
214209
if err != nil {
215210
f.t.Fatal(err)
216211
}
217212
for _, n := range f.nb {
218-
if *n.Label == fs.Label {
213+
if (n.Label != nil && fs["label"] != "" && *n.Label == fs["label"]) ||
214+
(fs["ipv4"] != "" && n.IPv4 != nil && *n.IPv4 == fs["ipv4"]) {
219215
data = append(data, *n)
220216
}
221217
}

cloud/linode/loadbalancers.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -450,17 +450,16 @@ func (l *loadbalancers) getNodeBalancerByHostname(ctx context.Context, service *
450450
}
451451

452452
func (l *loadbalancers) getNodeBalancerByIPv4(ctx context.Context, service *v1.Service, ipv4 string) (*linodego.NodeBalancer, error) {
453-
lbs, err := l.client.ListNodeBalancers(ctx, nil)
453+
filter := fmt.Sprintf(`{"ipv4": "%v"}`, ipv4)
454+
lbs, err := l.client.ListNodeBalancers(ctx, &linodego.ListOptions{Filter: filter})
454455
if err != nil {
455456
return nil, err
456457
}
457-
for _, lb := range lbs {
458-
if *lb.IPv4 == ipv4 {
459-
klog.V(2).Infof("found NodeBalancer (%d) for service (%s) via IPv4 (%s)", lb.ID, getServiceNn(service), ipv4)
460-
return &lb, nil
461-
}
458+
if len(lbs) == 0 {
459+
return nil, lbNotFoundError{serviceNn: getServiceNn(service)}
462460
}
463-
return nil, lbNotFoundError{serviceNn: getServiceNn(service)}
461+
klog.V(2).Infof("found NodeBalancer (%d) for service (%s) via IPv4 (%s)", lbs[0].ID, getServiceNn(service), ipv4)
462+
return &lbs[0], nil
464463
}
465464

466465
func (l *loadbalancers) getNodeBalancerByID(ctx context.Context, service *v1.Service, id int) (*linodego.NodeBalancer, error) {

cloud/linode/loadbalancers_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -379,17 +379,17 @@ func testUpdateLoadBalancerAddPortAnnotation(t *testing.T, client *linodego.Clie
379379

380380
err = lb.UpdateLoadBalancer(context.TODO(), "linodelb", svc, nodes)
381381
if err != nil {
382-
t.Errorf("UpdateLoadBalancer returned an error while updated annotations: %s", err)
382+
t.Fatalf("UpdateLoadBalancer returned an error while updated annotations: %s", err)
383383
}
384384

385385
nb, err := lb.getNodeBalancerByStatus(context.TODO(), svc)
386386
if err != nil {
387-
t.Errorf("failed to get NodeBalancer by status: %v", err)
387+
t.Fatalf("failed to get NodeBalancer by status: %v", err)
388388
}
389389

390390
cfgs, errConfigs := client.ListNodeBalancerConfigs(context.TODO(), nb.ID, nil)
391391
if errConfigs != nil {
392-
t.Errorf("error getting NodeBalancer configs: %v", errConfigs)
392+
t.Fatalf("error getting NodeBalancer configs: %v", errConfigs)
393393
}
394394

395395
expectedPortConfigs := map[int]string{
@@ -468,17 +468,17 @@ func testUpdateLoadBalancerAddTLSPort(t *testing.T, client *linodego.Client, _ *
468468
})
469469
err = lb.UpdateLoadBalancer(context.TODO(), "linodelb", svc, nodes)
470470
if err != nil {
471-
t.Errorf("UpdateLoadBalancer returned an error while updated annotations: %s", err)
471+
t.Fatalf("UpdateLoadBalancer returned an error while updated annotations: %s", err)
472472
}
473473

474474
nb, err := lb.getNodeBalancerByStatus(context.TODO(), svc)
475475
if err != nil {
476-
t.Errorf("unexpected error: %v", err)
476+
t.Fatalf("unexpected error: %v", err)
477477
}
478478

479479
cfgs, errConfigs := client.ListNodeBalancerConfigs(context.TODO(), nb.ID, nil)
480480
if errConfigs != nil {
481-
t.Errorf("error getting NodeBalancer configs: %v", errConfigs)
481+
t.Fatalf("error getting NodeBalancer configs: %v", errConfigs)
482482
}
483483

484484
expectedPorts := map[int]struct{}{

0 commit comments

Comments
 (0)