Skip to content

Commit 1b7cc23

Browse files
committed
setup AGA SDK client
1 parent b7ed907 commit 1b7cc23

File tree

9 files changed

+338
-32
lines changed

9 files changed

+338
-32
lines changed

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ require (
1111
github.com/aws/aws-sdk-go-v2/service/appmesh v1.27.7
1212
github.com/aws/aws-sdk-go-v2/service/ec2 v1.173.0
1313
github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.51.0
14+
github.com/aws/aws-sdk-go-v2/service/globalaccelerator v1.26.3
1415
github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.23.3
1516
github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.7
1617
github.com/aws/aws-sdk-go-v2/service/shield v1.27.3
@@ -147,6 +148,7 @@ require (
147148
github.com/sirupsen/logrus v1.9.3 // indirect
148149
github.com/spf13/cast v1.7.0 // indirect
149150
github.com/spf13/cobra v1.9.1 // indirect
151+
github.com/stretchr/objx v0.5.2 // indirect
150152
github.com/valyala/bytebufferpool v1.0.0 // indirect
151153
github.com/valyala/fasthttp v1.34.0 // indirect
152154
github.com/x448/float16 v0.8.4 // indirect

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ github.com/aws/aws-sdk-go-v2/service/ec2 v1.173.0 h1:ta62lid9JkIpKZtZZXSj6rP2AqY
5151
github.com/aws/aws-sdk-go-v2/service/ec2 v1.173.0/go.mod h1:o6QDjdVKpP5EF0dp/VlvqckzuSDATr1rLdHt3A5m0YY=
5252
github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.51.0 h1:Zy1yjx+R6cR4pAwzFFJ8nWJh4ri8I44H76PDJ77tcJo=
5353
github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.51.0/go.mod h1:RuZwE3p8IrWqK1kZhwH2TymlHLPuiI/taBMb8vrD39Q=
54+
github.com/aws/aws-sdk-go-v2/service/globalaccelerator v1.26.3 h1:G8qcrur/MG4c7Wu+LMtpAPUSzmmaOa4ssHgYtefeJoo=
55+
github.com/aws/aws-sdk-go-v2/service/globalaccelerator v1.26.3/go.mod h1:SJbyMV7JHSdKF1V0femihek4k7t2u5quWKiHzG8pihc=
5456
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 h1:dT3MqvGhSoaIhRseqw2I0yH81l7wiR2vjs57O51EAm8=
5557
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3/go.mod h1:GlAeCkHwugxdHaueRr4nhPuY+WW+gR8UjlcqzPr1SPI=
5658
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 h1:HGErhhrxZlQ044RiM+WdoZxp0p+EGM62y3L6pwA4olE=

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ func main() {
238238
// Setup GlobalAccelerator controller only if enabled
239239
if controllerCFG.FeatureGates.Enabled(config.AGAController) {
240240
agaReconciler := agacontroller.NewGlobalAcceleratorReconciler(mgr.GetClient(), mgr.GetEventRecorderFor("globalAccelerator"),
241-
finalizerManager, controllerCFG, ctrl.Log.WithName("controllers").WithName("globalAccelerator"), lbcMetricsCollector, reconcileCounters)
241+
finalizerManager, controllerCFG, cloud, ctrl.Log.WithName("controllers").WithName("globalAccelerator"), lbcMetricsCollector, reconcileCounters)
242242
if err := agaReconciler.SetupWithManager(ctx, mgr, clientSet); err != nil {
243243
setupLog.Error(err, "unable to create controller", "controller", "GlobalAccelerator")
244244
os.Exit(1)

pkg/aws/cloud.go

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -98,14 +98,15 @@ func NewCloud(cfg CloudConfig, clusterName string, metricsCollector *aws_metrics
9898
cfg.VpcID = vpcID
9999

100100
thisObj := &defaultCloud{
101-
cfg: cfg,
102-
clusterName: clusterName,
103-
ec2: ec2Service,
104-
acm: services.NewACM(awsClientsProvider),
105-
wafv2: services.NewWAFv2(awsClientsProvider),
106-
wafRegional: services.NewWAFRegional(awsClientsProvider, cfg.Region),
107-
shield: services.NewShield(awsClientsProvider),
108-
rgt: services.NewRGT(awsClientsProvider),
101+
cfg: cfg,
102+
clusterName: clusterName,
103+
ec2: ec2Service,
104+
acm: services.NewACM(awsClientsProvider),
105+
wafv2: services.NewWAFv2(awsClientsProvider),
106+
wafRegional: services.NewWAFRegional(awsClientsProvider, cfg.Region),
107+
shield: services.NewShield(awsClientsProvider),
108+
rgt: services.NewRGT(awsClientsProvider),
109+
globalAccelerator: services.NewGlobalAccelerator(awsClientsProvider),
109110

110111
awsConfigGenerator: awsConfigGenerator,
111112

@@ -196,13 +197,14 @@ var _ services.Cloud = &defaultCloud{}
196197
type defaultCloud struct {
197198
cfg CloudConfig
198199

199-
ec2 services.EC2
200-
elbv2 services.ELBV2
201-
acm services.ACM
202-
wafv2 services.WAFv2
203-
wafRegional services.WAFRegional
204-
shield services.Shield
205-
rgt services.RGT
200+
ec2 services.EC2
201+
elbv2 services.ELBV2
202+
acm services.ACM
203+
wafv2 services.WAFv2
204+
wafRegional services.WAFRegional
205+
shield services.Shield
206+
rgt services.RGT
207+
globalAccelerator services.GlobalAccelerator
206208

207209
clusterName string
208210

@@ -292,6 +294,10 @@ func (c *defaultCloud) RGT() services.RGT {
292294
return c.rgt
293295
}
294296

297+
func (c *defaultCloud) GlobalAccelerator() services.GlobalAccelerator {
298+
return c.globalAccelerator
299+
}
300+
295301
func (c *defaultCloud) Region() string {
296302
return c.cfg.Region
297303
}

pkg/aws/provider/default_aws_clients_provider.go

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"github.com/aws/aws-sdk-go-v2/service/acm"
77
"github.com/aws/aws-sdk-go-v2/service/ec2"
88
"github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2"
9+
"github.com/aws/aws-sdk-go-v2/service/globalaccelerator"
910
"github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi"
1011
"github.com/aws/aws-sdk-go-v2/service/shield"
1112
"github.com/aws/aws-sdk-go-v2/service/sts"
@@ -15,14 +16,15 @@ import (
1516
)
1617

1718
type defaultAWSClientsProvider struct {
18-
ec2Client *ec2.Client
19-
elbv2Client *elasticloadbalancingv2.Client
20-
acmClient *acm.Client
21-
wafv2Client *wafv2.Client
22-
wafRegionClient *wafregional.Client
23-
shieldClient *shield.Client
24-
rgtClient *resourcegroupstaggingapi.Client
25-
stsClient *sts.Client
19+
ec2Client *ec2.Client
20+
elbv2Client *elasticloadbalancingv2.Client
21+
acmClient *acm.Client
22+
wafv2Client *wafv2.Client
23+
wafRegionClient *wafregional.Client
24+
shieldClient *shield.Client
25+
rgtClient *resourcegroupstaggingapi.Client
26+
stsClient *sts.Client
27+
globalAcceleratorClient *globalaccelerator.Client
2628

2729
// used for dynamic creation of ELBv2 client
2830
elbv2CustomEndpoint *string
@@ -37,6 +39,7 @@ func NewDefaultAWSClientsProvider(cfg aws.Config, endpointsResolver *endpoints.R
3739
shieldCustomEndpoint := endpointsResolver.EndpointFor(shield.ServiceID)
3840
rgtCustomEndpoint := endpointsResolver.EndpointFor(resourcegroupstaggingapi.ServiceID)
3941
stsCustomEndpoint := endpointsResolver.EndpointFor(sts.ServiceID)
42+
globalAcceleratorCustomEndpoint := endpointsResolver.EndpointFor(globalaccelerator.ServiceID)
4043

4144
ec2Client := ec2.NewFromConfig(cfg, func(o *ec2.Options) {
4245
if ec2CustomEndpoint != nil {
@@ -76,15 +79,23 @@ func NewDefaultAWSClientsProvider(cfg aws.Config, endpointsResolver *endpoints.R
7679
}
7780
})
7881

82+
globalAcceleratorClient := globalaccelerator.NewFromConfig(cfg, func(o *globalaccelerator.Options) {
83+
o.Region = "us-west-2" // Global Accelerator is a global service that requires us-west-2
84+
if globalAcceleratorCustomEndpoint != nil {
85+
o.BaseEndpoint = globalAcceleratorCustomEndpoint
86+
}
87+
})
88+
7989
return &defaultAWSClientsProvider{
80-
ec2Client: ec2Client,
81-
elbv2Client: elbv2Client,
82-
acmClient: acmClient,
83-
wafv2Client: wafv2Client,
84-
wafRegionClient: wafregionalClient,
85-
shieldClient: shieldClient,
86-
rgtClient: rgtClient,
87-
stsClient: stsClient,
90+
ec2Client: ec2Client,
91+
elbv2Client: elbv2Client,
92+
acmClient: acmClient,
93+
wafv2Client: wafv2Client,
94+
wafRegionClient: wafregionalClient,
95+
shieldClient: shieldClient,
96+
rgtClient: rgtClient,
97+
stsClient: stsClient,
98+
globalAcceleratorClient: globalAcceleratorClient,
8899

89100
elbv2CustomEndpoint: elbv2CustomEndpoint,
90101
}, nil
@@ -125,6 +136,10 @@ func (p *defaultAWSClientsProvider) GetSTSClient(ctx context.Context, operationN
125136
return p.stsClient, nil
126137
}
127138

139+
func (p *defaultAWSClientsProvider) GetGlobalAcceleratorClient(ctx context.Context, operationName string) (*globalaccelerator.Client, error) {
140+
return p.globalAcceleratorClient, nil
141+
}
142+
128143
func (p *defaultAWSClientsProvider) GenerateNewELBv2Client(cfg aws.Config) *elasticloadbalancingv2.Client {
129144
return generateNewELBv2ClientHelper(cfg, p.elbv2CustomEndpoint)
130145
}

pkg/aws/provider/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"github.com/aws/aws-sdk-go-v2/service/acm"
77
"github.com/aws/aws-sdk-go-v2/service/ec2"
88
"github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2"
9+
"github.com/aws/aws-sdk-go-v2/service/globalaccelerator"
910
"github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi"
1011
"github.com/aws/aws-sdk-go-v2/service/shield"
1112
"github.com/aws/aws-sdk-go-v2/service/sts"
@@ -22,5 +23,6 @@ type AWSClientsProvider interface {
2223
GetShieldClient(ctx context.Context, operationName string) (*shield.Client, error)
2324
GetRGTClient(ctx context.Context, operationName string) (*resourcegroupstaggingapi.Client, error)
2425
GetSTSClient(ctx context.Context, operationName string) (*sts.Client, error)
26+
GetGlobalAcceleratorClient(ctx context.Context, operationName string) (*globalaccelerator.Client, error)
2527
GenerateNewELBv2Client(cfg aws.Config) *elasticloadbalancingv2.Client
2628
}

pkg/aws/services/cloudInterface.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ type Cloud interface {
2424
// RGT provides API to AWS RGT
2525
RGT() RGT
2626

27+
// GlobalAccelerator provides API to AWS GlobalAccelerator
28+
GlobalAccelerator() GlobalAccelerator
29+
2730
// Region for the kubernetes cluster
2831
Region() string
2932

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
package services
2+
3+
import (
4+
"context"
5+
"github.com/aws/aws-sdk-go-v2/service/globalaccelerator"
6+
"github.com/aws/aws-sdk-go-v2/service/globalaccelerator/types"
7+
"sigs.k8s.io/aws-load-balancer-controller/pkg/aws/provider"
8+
)
9+
10+
type GlobalAccelerator interface {
11+
// wrapper to ListAcceleratorsPagesWithContext API, which aggregates paged results into list.
12+
ListAcceleratorsAsList(ctx context.Context, input *globalaccelerator.ListAcceleratorsInput) ([]types.Accelerator, error)
13+
14+
// CreateAccelerator creates a new accelerator.
15+
CreateAcceleratorWithContext(ctx context.Context, input *globalaccelerator.CreateAcceleratorInput) (*globalaccelerator.CreateAcceleratorOutput, error)
16+
17+
// DescribeAccelerator describes an accelerator.
18+
DescribeAcceleratorWithContext(ctx context.Context, input *globalaccelerator.DescribeAcceleratorInput) (*globalaccelerator.DescribeAcceleratorOutput, error)
19+
20+
// UpdateAccelerator updates an accelerator.
21+
UpdateAcceleratorWithContext(ctx context.Context, input *globalaccelerator.UpdateAcceleratorInput) (*globalaccelerator.UpdateAcceleratorOutput, error)
22+
23+
// DeleteAccelerator deletes an accelerator.
24+
DeleteAcceleratorWithContext(ctx context.Context, input *globalaccelerator.DeleteAcceleratorInput) (*globalaccelerator.DeleteAcceleratorOutput, error)
25+
26+
// TagResource tags a resource.
27+
TagResourceWithContext(ctx context.Context, input *globalaccelerator.TagResourceInput) (*globalaccelerator.TagResourceOutput, error)
28+
29+
// UntagResource untags a resource.
30+
UntagResourceWithContext(ctx context.Context, input *globalaccelerator.UntagResourceInput) (*globalaccelerator.UntagResourceOutput, error)
31+
32+
// ListTagsForResource lists tags for a resource.
33+
ListTagsForResourceWithContext(ctx context.Context, input *globalaccelerator.ListTagsForResourceInput) (*globalaccelerator.ListTagsForResourceOutput, error)
34+
}
35+
36+
// NewGlobalAccelerator constructs new GlobalAccelerator implementation.
37+
func NewGlobalAccelerator(awsClientsProvider provider.AWSClientsProvider) GlobalAccelerator {
38+
return &defaultGlobalAccelerator{
39+
awsClientsProvider: awsClientsProvider,
40+
}
41+
}
42+
43+
// default implementation for GlobalAccelerator.
44+
type defaultGlobalAccelerator struct {
45+
awsClientsProvider provider.AWSClientsProvider
46+
}
47+
48+
func (c *defaultGlobalAccelerator) CreateAcceleratorWithContext(ctx context.Context, input *globalaccelerator.CreateAcceleratorInput) (*globalaccelerator.CreateAcceleratorOutput, error) {
49+
client, err := c.awsClientsProvider.GetGlobalAcceleratorClient(ctx, "CreateAccelerator")
50+
if err != nil {
51+
return nil, err
52+
}
53+
return client.CreateAccelerator(ctx, input)
54+
}
55+
56+
func (c *defaultGlobalAccelerator) DescribeAcceleratorWithContext(ctx context.Context, input *globalaccelerator.DescribeAcceleratorInput) (*globalaccelerator.DescribeAcceleratorOutput, error) {
57+
client, err := c.awsClientsProvider.GetGlobalAcceleratorClient(ctx, "DescribeAccelerator")
58+
if err != nil {
59+
return nil, err
60+
}
61+
return client.DescribeAccelerator(ctx, input)
62+
}
63+
64+
func (c *defaultGlobalAccelerator) UpdateAcceleratorWithContext(ctx context.Context, input *globalaccelerator.UpdateAcceleratorInput) (*globalaccelerator.UpdateAcceleratorOutput, error) {
65+
client, err := c.awsClientsProvider.GetGlobalAcceleratorClient(ctx, "UpdateAccelerator")
66+
if err != nil {
67+
return nil, err
68+
}
69+
return client.UpdateAccelerator(ctx, input)
70+
}
71+
72+
func (c *defaultGlobalAccelerator) DeleteAcceleratorWithContext(ctx context.Context, input *globalaccelerator.DeleteAcceleratorInput) (*globalaccelerator.DeleteAcceleratorOutput, error) {
73+
client, err := c.awsClientsProvider.GetGlobalAcceleratorClient(ctx, "DeleteAccelerator")
74+
if err != nil {
75+
return nil, err
76+
}
77+
return client.DeleteAccelerator(ctx, input)
78+
}
79+
80+
func (c *defaultGlobalAccelerator) TagResourceWithContext(ctx context.Context, input *globalaccelerator.TagResourceInput) (*globalaccelerator.TagResourceOutput, error) {
81+
client, err := c.awsClientsProvider.GetGlobalAcceleratorClient(ctx, "TagResource")
82+
if err != nil {
83+
return nil, err
84+
}
85+
return client.TagResource(ctx, input)
86+
}
87+
88+
func (c *defaultGlobalAccelerator) UntagResourceWithContext(ctx context.Context, input *globalaccelerator.UntagResourceInput) (*globalaccelerator.UntagResourceOutput, error) {
89+
client, err := c.awsClientsProvider.GetGlobalAcceleratorClient(ctx, "UntagResource")
90+
if err != nil {
91+
return nil, err
92+
}
93+
return client.UntagResource(ctx, input)
94+
}
95+
96+
func (c *defaultGlobalAccelerator) ListAcceleratorsAsList(ctx context.Context, input *globalaccelerator.ListAcceleratorsInput) ([]types.Accelerator, error) {
97+
var result []types.Accelerator
98+
client, err := c.awsClientsProvider.GetGlobalAcceleratorClient(ctx, "ListAccelerators")
99+
if err != nil {
100+
return nil, err
101+
}
102+
paginator := globalaccelerator.NewListAcceleratorsPaginator(client, input)
103+
for paginator.HasMorePages() {
104+
output, err := paginator.NextPage(ctx)
105+
if err != nil {
106+
return nil, err
107+
}
108+
result = append(result, output.Accelerators...)
109+
}
110+
return result, nil
111+
}
112+
113+
func (c *defaultGlobalAccelerator) ListTagsForResourceWithContext(ctx context.Context, input *globalaccelerator.ListTagsForResourceInput) (*globalaccelerator.ListTagsForResourceOutput, error) {
114+
client, err := c.awsClientsProvider.GetGlobalAcceleratorClient(ctx, "ListTagsForResource")
115+
if err != nil {
116+
return nil, err
117+
}
118+
return client.ListTagsForResource(ctx, input)
119+
}

0 commit comments

Comments
 (0)