Skip to content

Commit 5bd5bce

Browse files
richardcaseLiangquanLi930
authored andcommitted
secrets manager sdk v2 changes
1 parent 8e80745 commit 5bd5bce

File tree

5 files changed

+135
-12
lines changed

5 files changed

+135
-12
lines changed

pkg/cloud/endpointsv2/endpoints.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"github.com/aws/aws-sdk-go-v2/service/eventbridge"
3131
rgapi "github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi"
3232
"github.com/aws/aws-sdk-go-v2/service/s3"
33+
"github.com/aws/aws-sdk-go-v2/service/secretsmanager"
3334
"github.com/aws/aws-sdk-go-v2/service/sqs"
3435
"github.com/aws/aws-sdk-go-v2/service/ssm"
3536
"github.com/aws/aws-sdk-go-v2/service/sts"
@@ -326,3 +327,25 @@ func (s *STSEndpointResolver) ResolveEndpoint(ctx context.Context, params sts.En
326327
params.Region = &endpoint.SigningRegion
327328
return sts.NewDefaultEndpointResolverV2().ResolveEndpoint(ctx, params)
328329
}
330+
331+
// SecretsManagerEndpointResolver implements EndpointResolverV2 interface for Secrets Manager.
332+
type SecretsManagerEndpointResolver struct {
333+
*MultiServiceEndpointResolver
334+
}
335+
336+
// ResolveEndpoint for Secrets Manager.
337+
func (s *SecretsManagerEndpointResolver) ResolveEndpoint(ctx context.Context, params secretsmanager.EndpointParameters) (smithyendpoints.Endpoint, error) {
338+
// If custom endpoint not found, return default endpoint for the service
339+
log := logger.FromContext(ctx)
340+
endpoint, ok := s.endpoints[secretsmanager.ServiceID]
341+
342+
if !ok {
343+
log.Debug("Custom endpoint not found, using default endpoint")
344+
return secretsmanager.NewDefaultEndpointResolverV2().ResolveEndpoint(ctx, params)
345+
}
346+
347+
log.Debug("Custom endpoint found, using custom endpoint", "endpoint", endpoint.URL)
348+
params.Endpoint = &endpoint.URL
349+
params.Region = &endpoint.SigningRegion
350+
return secretsmanager.NewDefaultEndpointResolverV2().ResolveEndpoint(ctx, params)
351+
}

pkg/cloud/scope/clients.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -217,20 +217,23 @@ func NewResourgeTaggingClient(scopeUser cloud.ScopeUsage, session cloud.Session,
217217
// NewSecretsManagerClient creates a new Secrets API client for a given session..
218218
func NewSecretsManagerClient(scopeUser cloud.ScopeUsage, session cloud.Session, logger logger.Wrapper, target runtime.Object) *secretsmanager.Client {
219219
cfg := session.Session()
220-
221-
secretsOpts := []func(*secretsmanager.Options){
220+
multiSvcEndpointResolver := endpointsv2.NewMultiServiceEndpointResolver()
221+
secretsManagerEndpointResolver := &endpointsv2.SecretsManagerEndpointResolver{
222+
MultiServiceEndpointResolver: multiSvcEndpointResolver,
223+
}
224+
secretsManagerOpts := []func(*secretsmanager.Options){
222225
func(o *secretsmanager.Options) {
223226
o.Logger = logger.GetAWSLogger()
224227
o.ClientLogMode = awslogs.GetAWSLogLevelV2(logger.GetLogger())
228+
o.EndpointResolverV2 = secretsManagerEndpointResolver
225229
},
226230
secretsmanager.WithAPIOptions(
227231
awsmetricsv2.WithMiddlewares(scopeUser.ControllerName(), target),
228232
awsmetricsv2.WithCAPAUserAgentMiddleware(),
229-
throttle.WithServiceLimiterMiddleware(session.ServiceLimiter(secretsmanager.ServiceID)),
230233
),
231234
}
232235

233-
return secretsmanager.NewFromConfig(cfg, secretsOpts...)
236+
return secretsmanager.NewFromConfig(cfg, secretsManagerOpts...)
234237
}
235238

236239
// NewEKSClient creates a new EKS API client for a given session.

pkg/cloud/services/secretsmanager/secret.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,17 @@ package secretsmanager
1818

1919
import (
2020
"context"
21+
"errors"
2122
"fmt"
2223
"path"
2324

2425
"github.com/aws/aws-sdk-go-v2/aws"
2526
"github.com/aws/aws-sdk-go-v2/service/secretsmanager"
27+
"github.com/aws/smithy-go"
2628
kerrors "k8s.io/apimachinery/pkg/util/errors"
2729
"k8s.io/apimachinery/pkg/util/uuid"
2830

2931
infrav1 "sigs.k8s.io/cluster-api-provider-aws/v2/api/v1beta2"
30-
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/awserrors"
3132
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/convertersv2"
3233
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/scope"
3334
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/services/wait"
@@ -93,11 +94,11 @@ func (s *Service) retryableCreateSecret(name string, chunk []byte, tags infrav1.
9394
Tags: convertersv2.MapToSecretsManagerTags(tags),
9495
})
9596
// If the secret already exists, delete it, return request to retry, as deletes are eventually consistent
96-
smithyErr := awserrors.ParseSmithyError(err)
97-
if smithyErr != nil && smithyErr.ErrorCode() == "ResourceExistsException" {
98-
return false, s.forceDeleteSecretEntry(name)
99-
}
10097
if err != nil {
98+
var aerr smithy.APIError
99+
if errors.As(err, &aerr) && aerr.ErrorCode() == "ResourceExistsException" {
100+
return false, s.forceDeleteSecretEntry(name)
101+
}
101102
return false, err
102103
}
103104
return true, err
@@ -109,9 +110,11 @@ func (s *Service) forceDeleteSecretEntry(name string) error {
109110
SecretId: aws.String(name),
110111
ForceDeleteWithoutRecovery: aws.Bool(true),
111112
})
112-
smithyErr := awserrors.ParseSmithyError(err)
113-
if smithyErr != nil && smithyErr.ErrorCode() == "ResourceNotFoundException" {
114-
return nil
113+
if err != nil {
114+
var aerr smithy.APIError
115+
if errors.As(err, &aerr) && aerr.ErrorCode() == "ResourceNotFoundException" {
116+
return nil
117+
}
115118
}
116119
return err
117120
}

test/mocks/aws_secretsmanager_mock.go

Lines changed: 92 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/mocks/generate_aws.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,6 @@ limitations under the License.
2424
//go:generate /usr/bin/env bash -c "cat ../../hack/boilerplate/boilerplate.generatego.txt aws_rgtagging_mock.go > _aws_rgtagging_mock.go && mv _aws_rgtagging_mock.go aws_rgtagging_mock.go"
2525
//go:generate ../../hack/tools/bin/mockgen -destination aws_ec2api_mock.go -package mocks sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/services/common EC2API
2626
//go:generate /usr/bin/env bash -c "cat ../../hack/boilerplate/boilerplate.generatego.txt aws_ec2api_mock.go > _aws_ec2api_mock.go && mv _aws_ec2api_mock.go aws_ec2api_mock.go"
27+
//go:generate ../../hack/tools/bin/mockgen -destination aws_secretsmanager_mock.go -package mocks sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/services/secretsmanager SecretsManagerAPI
28+
//go:generate /usr/bin/env bash -c "cat ../../hack/boilerplate/boilerplate.generatego.txt aws_secretsmanager_mock.go > _aws_secretsmanager_mock.go && mv _aws_secretsmanager_mock.go aws_secretsmanager_mock.go"
2729
package mocks

0 commit comments

Comments
 (0)