Skip to content

Commit 0b2deac

Browse files
committed
refactor aws cloud service
1 parent 0353352 commit 0b2deac

File tree

10 files changed

+434
-156
lines changed

10 files changed

+434
-156
lines changed

pkg/aws/cloud.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ func NewCloud(cfg CloudConfig, metricsRegisterer prometheus.Registerer, logger l
132132

133133
if awsClientsProvider == nil {
134134
var err error
135-
awsClientsProvider, err = NewDefaultAWSClientsProvider(awsConfig, endpointsResolver)
135+
awsClientsProvider, err = provider.NewDefaultAWSClientsProvider(awsConfig, endpointsResolver)
136136
if err != nil {
137137
return nil, errors.Wrap(err, "failed to create aws clients provider")
138138
}
@@ -147,17 +147,16 @@ func NewCloud(cfg CloudConfig, metricsRegisterer prometheus.Registerer, logger l
147147
return &defaultCloud{
148148
cfg: cfg,
149149
ec2: ec2Service,
150-
elbv2: services.NewELBV2(awsConfig, endpointsResolver),
151-
acm: services.NewACM(awsConfig, endpointsResolver),
152-
wafv2: services.NewWAFv2(awsConfig, endpointsResolver),
153-
wafRegional: services.NewWAFRegional(awsConfig, endpointsResolver, cfg.Region),
154-
shield: services.NewShield(awsConfig, endpointsResolver), //done
155-
rgt: services.NewRGT(awsConfig, endpointsResolver),
150+
elbv2: services.NewELBV2(awsClientsProvider),
151+
acm: services.NewACM(awsClientsProvider),
152+
wafv2: services.NewWAFv2(awsClientsProvider),
153+
wafRegional: services.NewWAFRegional(awsClientsProvider, cfg.Region),
154+
shield: services.NewShield(awsClientsProvider),
155+
rgt: services.NewRGT(awsClientsProvider),
156156
}, nil
157157
}
158158

159159
func getVpcID(cfg CloudConfig, ec2Service services.EC2, ec2Metadata services.EC2Metadata, logger logr.Logger) (string, error) {
160-
161160
if cfg.VpcID != "" {
162161
logger.V(1).Info("vpcid is specified using flag --aws-vpc-id, controller will use the value", "vpc: ", cfg.VpcID)
163162
return cfg.VpcID, nil

pkg/aws/default_aws_clients_provider.go

Lines changed: 0 additions & 31 deletions
This file was deleted.
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package provider
2+
3+
import (
4+
"context"
5+
"github.com/aws/aws-sdk-go-v2/aws"
6+
"github.com/aws/aws-sdk-go-v2/service/acm"
7+
"github.com/aws/aws-sdk-go-v2/service/ec2"
8+
"github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2"
9+
"github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi"
10+
"github.com/aws/aws-sdk-go-v2/service/shield"
11+
"github.com/aws/aws-sdk-go-v2/service/wafregional"
12+
"github.com/aws/aws-sdk-go-v2/service/wafv2"
13+
"sigs.k8s.io/aws-load-balancer-controller/pkg/aws/endpoints"
14+
)
15+
16+
type defaultAWSClientsProvider struct {
17+
ec2Client *ec2.Client
18+
elbv2Client *elasticloadbalancingv2.Client
19+
acmClient *acm.Client
20+
wafv2Client *wafv2.Client
21+
wafRegionClient *wafregional.Client
22+
shieldClient *shield.Client
23+
rgtClient *resourcegroupstaggingapi.Client
24+
}
25+
26+
func NewDefaultAWSClientsProvider(cfg aws.Config, endpointsResolver *endpoints.Resolver) (*defaultAWSClientsProvider, error) {
27+
ec2CustomEndpoint := endpointsResolver.EndpointFor(ec2.ServiceID)
28+
elbv2CustomEndpoint := endpointsResolver.EndpointFor(elasticloadbalancingv2.ServiceID)
29+
acmCustomEndpoint := endpointsResolver.EndpointFor(acm.ServiceID)
30+
wafv2CustomEndpoint := endpointsResolver.EndpointFor(wafv2.ServiceID)
31+
wafregionalCustomEndpoint := endpointsResolver.EndpointFor(wafregional.ServiceID)
32+
shieldCustomEndpoint := endpointsResolver.EndpointFor(shield.ServiceID)
33+
rgtCustomEndpoint := endpointsResolver.EndpointFor(resourcegroupstaggingapi.ServiceID)
34+
35+
ec2Client := ec2.NewFromConfig(cfg, func(o *ec2.Options) {
36+
if ec2CustomEndpoint != nil {
37+
o.BaseEndpoint = ec2CustomEndpoint
38+
}
39+
})
40+
elbv2Client := elasticloadbalancingv2.NewFromConfig(cfg, func(o *elasticloadbalancingv2.Options) {
41+
if elbv2CustomEndpoint != nil {
42+
o.BaseEndpoint = elbv2CustomEndpoint
43+
}
44+
})
45+
acmClient := acm.NewFromConfig(cfg, func(o *acm.Options) {
46+
if acmCustomEndpoint != nil {
47+
o.BaseEndpoint = acmCustomEndpoint
48+
}
49+
})
50+
wafv2Client := wafv2.NewFromConfig(cfg, func(o *wafv2.Options) {
51+
if wafv2CustomEndpoint != nil {
52+
o.BaseEndpoint = wafv2CustomEndpoint
53+
}
54+
})
55+
wafregionalClient := wafregional.NewFromConfig(cfg, func(o *wafregional.Options) {
56+
o.Region = cfg.Region
57+
o.BaseEndpoint = wafregionalCustomEndpoint
58+
})
59+
sheildClient := shield.NewFromConfig(cfg, func(o *shield.Options) {
60+
o.Region = "us-east-1"
61+
o.BaseEndpoint = shieldCustomEndpoint
62+
})
63+
rgtClient := resourcegroupstaggingapi.NewFromConfig(cfg, func(o *resourcegroupstaggingapi.Options) {
64+
if rgtCustomEndpoint != nil {
65+
o.BaseEndpoint = rgtCustomEndpoint
66+
}
67+
})
68+
69+
return &defaultAWSClientsProvider{
70+
ec2Client: ec2Client,
71+
elbv2Client: elbv2Client,
72+
acmClient: acmClient,
73+
wafv2Client: wafv2Client,
74+
wafRegionClient: wafregionalClient,
75+
shieldClient: sheildClient,
76+
rgtClient: rgtClient,
77+
}, nil
78+
}
79+
80+
// DO NOT REMOVE operationName as parameter, this is on purpose
81+
// to retain the default behavior for OSS controller to use the default client for each aws service
82+
// for our internal controller, we will choose different client based on operationName
83+
func (p *defaultAWSClientsProvider) GetEC2Client(ctx context.Context, operationName string) (*ec2.Client, error) {
84+
return p.ec2Client, nil
85+
}
86+
87+
func (p *defaultAWSClientsProvider) GetELBV2Client(ctx context.Context, operationName string) (*elasticloadbalancingv2.Client, error) {
88+
return p.elbv2Client, nil
89+
}
90+
91+
func (p *defaultAWSClientsProvider) GetACMClient(ctx context.Context, operationName string) (*acm.Client, error) {
92+
return p.acmClient, nil
93+
}
94+
95+
func (p *defaultAWSClientsProvider) GetWAFv2Client(ctx context.Context, operationName string) (*wafv2.Client, error) {
96+
return p.wafv2Client, nil
97+
}
98+
99+
func (p *defaultAWSClientsProvider) GetWAFRegionClient(ctx context.Context, operationName string) (*wafregional.Client, error) {
100+
return p.wafRegionClient, nil
101+
}
102+
103+
func (p *defaultAWSClientsProvider) GetShieldClient(ctx context.Context, operationName string) (*shield.Client, error) {
104+
return p.shieldClient, nil
105+
}
106+
107+
func (p *defaultAWSClientsProvider) GetRGTClient(ctx context.Context, operationName string) (*resourcegroupstaggingapi.Client, error) {
108+
return p.rgtClient, nil
109+
}

pkg/aws/provider/provider.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,21 @@ package provider
22

33
import (
44
"context"
5+
"github.com/aws/aws-sdk-go-v2/service/acm"
56
"github.com/aws/aws-sdk-go-v2/service/ec2"
7+
"github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2"
8+
"github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi"
9+
"github.com/aws/aws-sdk-go-v2/service/shield"
10+
"github.com/aws/aws-sdk-go-v2/service/wafregional"
11+
"github.com/aws/aws-sdk-go-v2/service/wafv2"
612
)
713

814
type AWSClientsProvider interface {
915
GetEC2Client(ctx context.Context, operationName string) (*ec2.Client, error)
16+
GetELBV2Client(ctx context.Context, operationName string) (*elasticloadbalancingv2.Client, error)
17+
GetACMClient(ctx context.Context, operationName string) (*acm.Client, error)
18+
GetWAFv2Client(ctx context.Context, operationName string) (*wafv2.Client, error)
19+
GetWAFRegionClient(ctx context.Context, operationName string) (*wafregional.Client, error)
20+
GetShieldClient(ctx context.Context, operationName string) (*shield.Client, error)
21+
GetRGTClient(ctx context.Context, operationName string) (*resourcegroupstaggingapi.Client, error)
1022
}

pkg/aws/services/acm.go

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@ package services
22

33
import (
44
"context"
5-
"github.com/aws/aws-sdk-go-v2/aws"
65
"github.com/aws/aws-sdk-go-v2/service/acm"
76
"github.com/aws/aws-sdk-go-v2/service/acm/types"
8-
"sigs.k8s.io/aws-load-balancer-controller/pkg/aws/endpoints"
7+
"sigs.k8s.io/aws-load-balancer-controller/pkg/aws/provider"
98
)
109

1110
type ACM interface {
@@ -15,24 +14,23 @@ type ACM interface {
1514
}
1615

1716
// NewACM constructs new ACM implementation.
18-
func NewACM(cfg aws.Config, endpointsResolver *endpoints.Resolver) ACM {
19-
customEndpoint := endpointsResolver.EndpointFor(acm.ServiceID)
17+
func NewACM(awsClientsProvider provider.AWSClientsProvider) ACM {
2018
return &acmClient{
21-
acmClient: acm.NewFromConfig(cfg, func(o *acm.Options) {
22-
if customEndpoint != nil {
23-
o.BaseEndpoint = customEndpoint
24-
}
25-
}),
19+
awsClientsProvider: awsClientsProvider,
2620
}
2721
}
2822

2923
type acmClient struct {
30-
acmClient *acm.Client
24+
awsClientsProvider provider.AWSClientsProvider
3125
}
3226

3327
func (c *acmClient) ListCertificatesAsList(ctx context.Context, input *acm.ListCertificatesInput) ([]types.CertificateSummary, error) {
3428
var result []types.CertificateSummary
35-
paginator := acm.NewListCertificatesPaginator(c.acmClient, input)
29+
client, err := c.awsClientsProvider.GetACMClient(ctx, "ListCertificates")
30+
if err != nil {
31+
return nil, err
32+
}
33+
paginator := acm.NewListCertificatesPaginator(client, input)
3634
for paginator.HasMorePages() {
3735
output, err := paginator.NextPage(ctx)
3836
if err != nil {
@@ -44,5 +42,9 @@ func (c *acmClient) ListCertificatesAsList(ctx context.Context, input *acm.ListC
4442
}
4543

4644
func (c *acmClient) DescribeCertificateWithContext(ctx context.Context, input *acm.DescribeCertificateInput) (*acm.DescribeCertificateOutput, error) {
47-
return c.acmClient.DescribeCertificate(ctx, input)
45+
client, err := c.awsClientsProvider.GetACMClient(ctx, "DescribeCertificate")
46+
if err != nil {
47+
return nil, err
48+
}
49+
return client.DescribeCertificate(ctx, input)
4850
}

0 commit comments

Comments
 (0)