Skip to content

Commit a11a989

Browse files
committed
check for drifted coIPv4Pool settings
1 parent 93e23fe commit a11a989

File tree

3 files changed

+118
-1
lines changed

3 files changed

+118
-1
lines changed

docs/guide/ingress/annotations.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ Traffic Listening can be controlled with following annotations:
132132

133133
!!!example
134134
```
135-
alb.ingress.kubernetes.io/customer-owned-ipv4-poole: ipv4pool-coip-xxxxxxxx
135+
alb.ingress.kubernetes.io/customer-owned-ipv4-pool: ipv4pool-coip-xxxxxxxx
136136
```
137137

138138
## Traffic Routing

pkg/deploy/elbv2/load_balancer_manager.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
awssdk "github.com/aws/aws-sdk-go/aws"
77
elbv2sdk "github.com/aws/aws-sdk-go/service/elbv2"
88
"github.com/go-logr/logr"
9+
"github.com/pkg/errors"
910
"k8s.io/apimachinery/pkg/util/sets"
1011
"sigs.k8s.io/aws-load-balancer-controller/pkg/aws/services"
1112
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/tracking"
@@ -92,6 +93,9 @@ func (m *defaultLoadBalancerManager) Update(ctx context.Context, resLB *elbv2mod
9293
if err := m.attributesReconciler.Reconcile(ctx, resLB, sdkLB); err != nil {
9394
return elbv2model.LoadBalancerStatus{}, err
9495
}
96+
if err := m.checkSDKLoadBalancerWithCOIPv4Pool(ctx, resLB, sdkLB); err != nil {
97+
return elbv2model.LoadBalancerStatus{}, err
98+
}
9599
return buildResLoadBalancerStatus(sdkLB), nil
96100
}
97101

@@ -206,6 +210,13 @@ func (m *defaultLoadBalancerManager) updateSDKLoadBalancerWithSecurityGroups(ctx
206210
return nil
207211
}
208212

213+
func (m *defaultLoadBalancerManager) checkSDKLoadBalancerWithCOIPv4Pool(_ context.Context, resLB *elbv2model.LoadBalancer, sdkLB LoadBalancerWithTags) error {
214+
if awssdk.StringValue(resLB.Spec.CustomerOwnedIPv4Pool) != awssdk.StringValue(sdkLB.LoadBalancer.CustomerOwnedIpv4Pool) {
215+
return errors.New("loadBalancer has drifted CustomerOwnedIPv4Pool setting")
216+
}
217+
return nil
218+
}
219+
209220
func (m *defaultLoadBalancerManager) updateSDKLoadBalancerWithTags(ctx context.Context, resLB *elbv2model.LoadBalancer, sdkLB LoadBalancerWithTags) error {
210221
desiredLBTags := m.trackingProvider.ResourceTags(resLB.Stack(), resLB, resLB.Spec.Tags)
211222
return m.taggingManager.ReconcileTags(ctx, awssdk.StringValue(sdkLB.LoadBalancer.LoadBalancerArn), desiredLBTags,

pkg/deploy/elbv2/load_balancer_manager_test.go

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package elbv2
22

33
import (
4+
"context"
5+
"errors"
46
awssdk "github.com/aws/aws-sdk-go/aws"
57
elbv2sdk "github.com/aws/aws-sdk-go/service/elbv2"
68
"github.com/stretchr/testify/assert"
@@ -304,3 +306,107 @@ func Test_buildResLoadBalancerStatus(t *testing.T) {
304306
})
305307
}
306308
}
309+
310+
func Test_defaultLoadBalancerManager_checkSDKLoadBalancerWithCOIPv4Pool(t *testing.T) {
311+
type args struct {
312+
resLB *elbv2model.LoadBalancer
313+
sdkLB LoadBalancerWithTags
314+
}
315+
tests := []struct {
316+
name string
317+
args args
318+
wantErr error
319+
}{
320+
{
321+
name: "both resLB and sdkLB don't have CustomerOwnedIPv4Pool setting",
322+
args: args{
323+
resLB: &elbv2model.LoadBalancer{
324+
Spec: elbv2model.LoadBalancerSpec{
325+
CustomerOwnedIPv4Pool: nil,
326+
},
327+
},
328+
sdkLB: LoadBalancerWithTags{
329+
LoadBalancer: &elbv2sdk.LoadBalancer{
330+
CustomerOwnedIpv4Pool: nil,
331+
},
332+
},
333+
},
334+
wantErr: nil,
335+
},
336+
{
337+
name: "both resLB and sdkLB have same CustomerOwnedIPv4Pool setting",
338+
args: args{
339+
resLB: &elbv2model.LoadBalancer{
340+
Spec: elbv2model.LoadBalancerSpec{
341+
CustomerOwnedIPv4Pool: awssdk.String("ipv4pool-coip-abc"),
342+
},
343+
},
344+
sdkLB: LoadBalancerWithTags{
345+
LoadBalancer: &elbv2sdk.LoadBalancer{
346+
CustomerOwnedIpv4Pool: awssdk.String("ipv4pool-coip-abc"),
347+
},
348+
},
349+
},
350+
wantErr: nil,
351+
},
352+
{
353+
name: "both resLB and sdkLB have different CustomerOwnedIPv4Pool setting",
354+
args: args{
355+
resLB: &elbv2model.LoadBalancer{
356+
Spec: elbv2model.LoadBalancerSpec{
357+
CustomerOwnedIPv4Pool: awssdk.String("ipv4pool-coip-abc"),
358+
},
359+
},
360+
sdkLB: LoadBalancerWithTags{
361+
LoadBalancer: &elbv2sdk.LoadBalancer{
362+
CustomerOwnedIpv4Pool: awssdk.String("ipv4pool-coip-def"),
363+
},
364+
},
365+
},
366+
wantErr: errors.New("loadBalancer has drifted CustomerOwnedIPv4Pool setting"),
367+
},
368+
{
369+
name: "only resLB have CustomerOwnedIPv4Pool setting",
370+
args: args{
371+
resLB: &elbv2model.LoadBalancer{
372+
Spec: elbv2model.LoadBalancerSpec{
373+
CustomerOwnedIPv4Pool: awssdk.String("ipv4pool-coip-abc"),
374+
},
375+
},
376+
sdkLB: LoadBalancerWithTags{
377+
LoadBalancer: &elbv2sdk.LoadBalancer{
378+
CustomerOwnedIpv4Pool: nil,
379+
},
380+
},
381+
},
382+
wantErr: errors.New("loadBalancer has drifted CustomerOwnedIPv4Pool setting"),
383+
},
384+
{
385+
name: "only sdkLB have CustomerOwnedIPv4Pool setting",
386+
args: args{
387+
resLB: &elbv2model.LoadBalancer{
388+
Spec: elbv2model.LoadBalancerSpec{
389+
CustomerOwnedIPv4Pool: nil,
390+
},
391+
},
392+
sdkLB: LoadBalancerWithTags{
393+
LoadBalancer: &elbv2sdk.LoadBalancer{
394+
CustomerOwnedIpv4Pool: awssdk.String("ipv4pool-coip-abc"),
395+
},
396+
},
397+
},
398+
wantErr: errors.New("loadBalancer has drifted CustomerOwnedIPv4Pool setting"),
399+
},
400+
}
401+
for _, tt := range tests {
402+
t.Run(tt.name, func(t *testing.T) {
403+
m := &defaultLoadBalancerManager{}
404+
err := m.checkSDKLoadBalancerWithCOIPv4Pool(context.Background(), tt.args.resLB, tt.args.sdkLB)
405+
if tt.wantErr != nil {
406+
assert.EqualError(t, err, tt.wantErr.Error())
407+
} else {
408+
assert.NoError(t, err)
409+
}
410+
})
411+
}
412+
}

0 commit comments

Comments
 (0)