Skip to content

Commit a37776d

Browse files
Added ipv6 suppport to SG
1 parent 3d8cebe commit a37776d

File tree

2 files changed

+94
-3
lines changed

2 files changed

+94
-3
lines changed

internal/alb/sg/security_group.go

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@ func ipPermissionEquals(source *ec2.IpPermission, target *ec2.IpPermission) bool
105105
if len(diffIPRanges(target.IpRanges, source.IpRanges)) != 0 {
106106
return false
107107
}
108+
if len(diffIPv6Ranges(source.Ipv6Ranges, target.Ipv6Ranges)) != 0 {
109+
return false
110+
}
111+
if len(diffIPv6Ranges(target.Ipv6Ranges, source.Ipv6Ranges)) != 0 {
112+
return false
113+
}
108114
if len(diffUserIDGroupPairs(source.UserIdGroupPairs, target.UserIdGroupPairs)) != 0 {
109115
return false
110116
}
@@ -115,12 +121,29 @@ func ipPermissionEquals(source *ec2.IpPermission, target *ec2.IpPermission) bool
115121
return true
116122
}
117123

124+
// diffIPv6Ranges calculates set_difference as source - target
125+
func diffIPv6Ranges(source []*ec2.Ipv6Range, target []*ec2.Ipv6Range) (diffs []*ec2.Ipv6Range) {
126+
for _, sRange := range source {
127+
containsInTarget := false
128+
for _, tRange := range target {
129+
if ipRangeEquals(sRange.CidrIpv6, tRange.CidrIpv6) {
130+
containsInTarget = true
131+
break
132+
}
133+
}
134+
if !containsInTarget {
135+
diffs = append(diffs, sRange)
136+
}
137+
}
138+
return diffs
139+
}
140+
118141
// diffIPRanges calculates set_difference as source - target
119142
func diffIPRanges(source []*ec2.IpRange, target []*ec2.IpRange) (diffs []*ec2.IpRange) {
120143
for _, sRange := range source {
121144
containsInTarget := false
122145
for _, tRange := range target {
123-
if ipRangeEquals(sRange, tRange) {
146+
if ipRangeEquals(sRange.CidrIp, tRange.CidrIp) {
124147
containsInTarget = true
125148
break
126149
}
@@ -133,8 +156,8 @@ func diffIPRanges(source []*ec2.IpRange, target []*ec2.IpRange) (diffs []*ec2.Ip
133156
}
134157

135158
// ipRangeEquals test whether two IPRange instance are equals
136-
func ipRangeEquals(source *ec2.IpRange, target *ec2.IpRange) bool {
137-
return aws.StringValue(source.CidrIp) == aws.StringValue(target.CidrIp)
159+
func ipRangeEquals(source *string, target *string) bool {
160+
return aws.StringValue(source) == aws.StringValue(target)
138161
}
139162

140163
// diffUserIDGroupPairs calculates set_difference as source - target

internal/alb/sg/security_group_test.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,11 @@ func TestDiffIPPermissions(t *testing.T) {
390390
CidrIp: aws.String("192.168.1.1/32"),
391391
},
392392
},
393+
Ipv6Ranges: []*ec2.Ipv6Range{
394+
{
395+
CidrIpv6: aws.String("::/0"),
396+
},
397+
},
393398
UserIdGroupPairs: []*ec2.UserIdGroupPair{
394399
{
395400
GroupId: aws.String("groupA"),
@@ -398,6 +403,69 @@ func TestDiffIPPermissions(t *testing.T) {
398403
},
399404
},
400405
target: []*ec2.IpPermission{},
406+
expectedDiffs: []*ec2.IpPermission{
407+
{
408+
IpProtocol: aws.String("tcp"),
409+
FromPort: aws.Int64(80),
410+
ToPort: aws.Int64(81),
411+
IpRanges: []*ec2.IpRange{
412+
{
413+
CidrIp: aws.String("192.168.1.1/32"),
414+
},
415+
},
416+
Ipv6Ranges: []*ec2.Ipv6Range{
417+
{
418+
CidrIpv6: aws.String("::/0"),
419+
},
420+
},
421+
UserIdGroupPairs: []*ec2.UserIdGroupPair{
422+
{
423+
GroupId: aws.String("groupA"),
424+
},
425+
},
426+
},
427+
},
428+
},
429+
{
430+
source: []*ec2.IpPermission{
431+
{
432+
IpProtocol: aws.String("tcp"),
433+
FromPort: aws.Int64(80),
434+
ToPort: aws.Int64(81),
435+
IpRanges: []*ec2.IpRange{
436+
{
437+
CidrIp: aws.String("192.168.1.1/32"),
438+
},
439+
},
440+
UserIdGroupPairs: []*ec2.UserIdGroupPair{
441+
{
442+
GroupId: aws.String("groupA"),
443+
},
444+
},
445+
},
446+
},
447+
target: []*ec2.IpPermission{
448+
{
449+
IpProtocol: aws.String("tcp"),
450+
FromPort: aws.Int64(80),
451+
ToPort: aws.Int64(81),
452+
IpRanges: []*ec2.IpRange{
453+
{
454+
CidrIp: aws.String("192.168.1.1/32"),
455+
},
456+
},
457+
Ipv6Ranges: []*ec2.Ipv6Range{
458+
{
459+
CidrIpv6: aws.String("::/0"),
460+
},
461+
},
462+
UserIdGroupPairs: []*ec2.UserIdGroupPair{
463+
{
464+
GroupId: aws.String("groupA"),
465+
},
466+
},
467+
},
468+
},
401469
expectedDiffs: []*ec2.IpPermission{
402470
{
403471
IpProtocol: aws.String("tcp"),

0 commit comments

Comments
 (0)