Skip to content

Commit 0164fb2

Browse files
richardcaseLiangquanLi930
authored andcommitted
wip: secrets manager sdk v2 changes
Signed-off-by: Richard Case <[email protected]>
1 parent 8e80745 commit 0164fb2

File tree

7 files changed

+149
-10
lines changed

7 files changed

+149
-10
lines changed

pkg/cloud/converters/tags.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
elbtypes "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing/types"
2626
elbv2types "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2/types"
2727
iamtypes "github.com/aws/aws-sdk-go-v2/service/iam/types"
28+
secretsmanagertypes "github.com/aws/aws-sdk-go-v2/service/secretsmanager/types"
2829
ssmtypes "github.com/aws/aws-sdk-go-v2/service/ssm/types"
2930
"github.com/aws/aws-sdk-go/aws"
3031
"github.com/aws/aws-sdk-go/service/secretsmanager"
@@ -168,6 +169,20 @@ func MapToSecretsManagerTags(src infrav1.Tags) []*secretsmanager.Tag {
168169
return tags
169170
}
170171

172+
// MapToSecretsManagerTagsV2 converts infrav1.Tags (a map of string key-value pairs) to a slice of Secrets Manager Tag objects for SDK v2.
173+
func MapToSecretsManagerTagsV2(tags infrav1.Tags) []secretsmanagertypes.Tag {
174+
result := make([]secretsmanagertypes.Tag, 0, len(tags))
175+
for k, v := range tags {
176+
key := k
177+
value := v
178+
result = append(result, secretsmanagertypes.Tag{
179+
Key: &key,
180+
Value: &value,
181+
})
182+
}
183+
return result
184+
}
185+
171186
// MapToIAMTags converts a infrav1.Tags to a []*iam.Tag.
172187
func MapToIAMTags(src infrav1.Tags) []iamtypes.Tag {
173188
tags := make([]iamtypes.Tag, 0, len(src))

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: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package secretsmanager
1818

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

@@ -26,6 +27,7 @@ import (
2627
kerrors "k8s.io/apimachinery/pkg/util/errors"
2728
"k8s.io/apimachinery/pkg/util/uuid"
2829

30+
"github.com/aws/smithy-go"
2931
infrav1 "sigs.k8s.io/cluster-api-provider-aws/v2/api/v1beta2"
3032
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/awserrors"
3133
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/convertersv2"
@@ -109,9 +111,11 @@ func (s *Service) forceDeleteSecretEntry(name string) error {
109111
SecretId: aws.String(name),
110112
ForceDeleteWithoutRecovery: aws.Bool(true),
111113
})
112-
smithyErr := awserrors.ParseSmithyError(err)
113-
if smithyErr != nil && smithyErr.ErrorCode() == "ResourceNotFoundException" {
114-
return nil
114+
if err != nil {
115+
var aerr smithy.APIError
116+
if errors.As(err, &aerr) && aerr.ErrorCode() == "ResourceNotFoundException" {
117+
return nil
118+
}
115119
}
116120
return err
117121
}

test/e2e/suites/unmanaged/unmanaged_CAPI_clusterclass_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ var _ = ginkgo.Context("[unmanaged] [Cluster API Framework] [ClusterClass]", fun
6060
}
6161
})
6262

63-
ginkgo.AfterEach(func() {
64-
shared.ReleaseResources(requiredResources, ginkgo.GinkgoParallelProcess(), flock.New(shared.ResourceQuotaFilePath))
65-
})
63+
// ginkgo.AfterEach(func() {
64+
// shared.ReleaseResources(requiredResources, ginkgo.GinkgoParallelProcess(), flock.New(shared.ResourceQuotaFilePath))
65+
// })
6666
})
6767

6868
ginkgo.PDescribe("Cluster Upgrade Spec - HA control plane with workers [K8s-Upgrade] [ClusterClass]", func() {

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)