Skip to content

Commit 5a50a82

Browse files
committed
Support BYOIP
1 parent b65911e commit 5a50a82

File tree

2 files changed

+331
-10
lines changed

2 files changed

+331
-10
lines changed

pkg/deploy/aga/accelerator_manager.go

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
"slices"
8+
79
"github.com/aws/aws-sdk-go-v2/aws"
810
awssdk "github.com/aws/aws-sdk-go-v2/aws"
911
"github.com/aws/aws-sdk-go-v2/service/globalaccelerator"
@@ -60,10 +62,10 @@ func (m *defaultAcceleratorManager) buildSDKCreateAcceleratorInput(_ context.Con
6062
IdempotencyToken: aws.String(idempotencyToken),
6163
}
6264

63-
//TODO: BYOIP feature
64-
//if len(resAccelerator.Spec.IpAddresses) > 0 {
65-
// createInput.IpAddresses = resAccelerator.Spec.IpAddresses
66-
//}
65+
// BYOIP feature: Set IP addresses if provided
66+
if len(resAccelerator.Spec.IpAddresses) > 0 {
67+
createInput.IpAddresses = resAccelerator.Spec.IpAddresses
68+
}
6769

6870
// Add tags
6971
tags := m.trackingProvider.ResourceTags(resAccelerator.Stack(), resAccelerator, resAccelerator.Spec.Tags)
@@ -103,11 +105,8 @@ func (m *defaultAcceleratorManager) buildSDKUpdateAcceleratorInput(ctx context.C
103105
IpAddressType: agatypes.IpAddressType(resAccelerator.Spec.IPAddressType),
104106
Enabled: resAccelerator.Spec.Enabled,
105107
}
108+
// BYOIP is only supported during accelerator creation, not updates
106109

107-
//TODO: BYOIP feature
108-
//if len(resAccelerator.Spec.IpAddresses) > 0 {
109-
// updateInput.IpAddresses = resAccelerator.Spec.IpAddresses
110-
//}
111110
return updateInput
112111
}
113112

@@ -272,10 +271,43 @@ func (m *defaultAcceleratorManager) isSDKAcceleratorSettingsDrifted(resAccelerat
272271
return true
273272
}
274273

275-
//TODO : BYOIP feature
274+
// Check if user attempts to change IP addresses (BYOIP only supported at creation)
275+
if len(resAccelerator.Spec.IpAddresses) > 0 && !m.areIPAddressesEqual(resAccelerator.Spec.IpAddresses, sdkAccelerator.Accelerator.IpSets) {
276+
m.logger.Info("IP addresses cannot be updated after accelerator creation, ignoring IP address changes")
277+
}
278+
276279
return false
277280
}
278281

282+
func (m *defaultAcceleratorManager) areIPAddressesEqual(desiredIPs []string, actualIPSets []agatypes.IpSet) bool {
283+
284+
// IPv6 BYOIP is not supported at this time
285+
return m.areIPv4AddressesEqual(desiredIPs, actualIPSets)
286+
}
287+
288+
// areIPv4AddressesEqual compares desired IPv4 addresses with actual IP sets from AWS
289+
func (m *defaultAcceleratorManager) areIPv4AddressesEqual(desiredIPs []string, actualIPSets []agatypes.IpSet) bool {
290+
actualIPv4s := extractIPv4Addresses(actualIPSets)
291+
if len(desiredIPs) != len(actualIPv4s) {
292+
return false
293+
}
294+
295+
slices.Sort(desiredIPs)
296+
slices.Sort(actualIPv4s)
297+
return slices.Equal(desiredIPs, actualIPv4s)
298+
}
299+
300+
// extractIPv4Addresses extracts IPv4 addresses from IPSets
301+
func extractIPv4Addresses(ipSets []agatypes.IpSet) []string {
302+
ips := make([]string, 0)
303+
for _, ipSet := range ipSets {
304+
if ipSet.IpAddressFamily == "IPv4" {
305+
ips = append(ips, ipSet.IpAddresses...)
306+
}
307+
}
308+
return ips
309+
}
310+
279311
func (m *defaultAcceleratorManager) getIdempotencyToken(resAccelerator *agamodel.Accelerator) string {
280312
// Use the CRD's UID as the idempotency token as its unique
281313
return resAccelerator.GetCRDUID()

0 commit comments

Comments
 (0)