diff --git a/apis/v1alpha1/ack-generate-metadata.yaml b/apis/v1alpha1/ack-generate-metadata.yaml index 045fd44..9bce741 100755 --- a/apis/v1alpha1/ack-generate-metadata.yaml +++ b/apis/v1alpha1/ack-generate-metadata.yaml @@ -1,11 +1,11 @@ ack_generate_info: - build_date: "2025-01-23T02:30:03Z" - build_hash: 2442aa071c05fcdf54841e63abd5f91d1951e152 + build_date: "2025-02-05T16:47:04Z" + build_hash: 3d74f13b9de7134b4c76ab7526a9c578c4857602 go_version: go1.23.5 - version: v0.41.0 -api_directory_checksum: 8f26009577f13f96d7f6ba08a96e95f2f7f08b86 + version: v0.41.0-18-g3d74f13 +api_directory_checksum: 4ac478341a3f0c78ced7a23fceda9f89fe25c242 api_version: v1alpha1 -aws_sdk_go_version: v1.55.5 +aws_sdk_go_version: v1.32.6 generator_config_info: file_checksum: 662a51e8e4a1225d04aa0121d55827e0a9a054af original_file_name: generator.yaml diff --git a/apis/v1alpha1/enums.go b/apis/v1alpha1/enums.go index 0d7645a..9800c90 100644 --- a/apis/v1alpha1/enums.go +++ b/apis/v1alpha1/enums.go @@ -18,16 +18,16 @@ package v1alpha1 type MessageSystemAttributeName string const ( + MessageSystemAttributeName_AWSTraceHeader MessageSystemAttributeName = "AWSTraceHeader" MessageSystemAttributeName_All MessageSystemAttributeName = "All" - MessageSystemAttributeName_SenderId MessageSystemAttributeName = "SenderId" - MessageSystemAttributeName_SentTimestamp MessageSystemAttributeName = "SentTimestamp" - MessageSystemAttributeName_ApproximateReceiveCount MessageSystemAttributeName = "ApproximateReceiveCount" MessageSystemAttributeName_ApproximateFirstReceiveTimestamp MessageSystemAttributeName = "ApproximateFirstReceiveTimestamp" - MessageSystemAttributeName_SequenceNumber MessageSystemAttributeName = "SequenceNumber" + MessageSystemAttributeName_ApproximateReceiveCount MessageSystemAttributeName = "ApproximateReceiveCount" + MessageSystemAttributeName_DeadLetterQueueSourceArn MessageSystemAttributeName = "DeadLetterQueueSourceArn" MessageSystemAttributeName_MessageDeduplicationId MessageSystemAttributeName = "MessageDeduplicationId" MessageSystemAttributeName_MessageGroupId MessageSystemAttributeName = "MessageGroupId" - MessageSystemAttributeName_AWSTraceHeader MessageSystemAttributeName = "AWSTraceHeader" - MessageSystemAttributeName_DeadLetterQueueSourceArn MessageSystemAttributeName = "DeadLetterQueueSourceArn" + MessageSystemAttributeName_SenderId MessageSystemAttributeName = "SenderId" + MessageSystemAttributeName_SentTimestamp MessageSystemAttributeName = "SentTimestamp" + MessageSystemAttributeName_SequenceNumber MessageSystemAttributeName = "SequenceNumber" ) type MessageSystemAttributeNameForSends string @@ -40,25 +40,25 @@ type QueueAttributeName string const ( QueueAttributeName_All QueueAttributeName = "All" - QueueAttributeName_Policy QueueAttributeName = "Policy" - QueueAttributeName_VisibilityTimeout QueueAttributeName = "VisibilityTimeout" - QueueAttributeName_MaximumMessageSize QueueAttributeName = "MaximumMessageSize" - QueueAttributeName_MessageRetentionPeriod QueueAttributeName = "MessageRetentionPeriod" QueueAttributeName_ApproximateNumberOfMessages QueueAttributeName = "ApproximateNumberOfMessages" + QueueAttributeName_ApproximateNumberOfMessagesDelayed QueueAttributeName = "ApproximateNumberOfMessagesDelayed" QueueAttributeName_ApproximateNumberOfMessagesNotVisible QueueAttributeName = "ApproximateNumberOfMessagesNotVisible" + QueueAttributeName_ContentBasedDeduplication QueueAttributeName = "ContentBasedDeduplication" QueueAttributeName_CreatedTimestamp QueueAttributeName = "CreatedTimestamp" - QueueAttributeName_LastModifiedTimestamp QueueAttributeName = "LastModifiedTimestamp" - QueueAttributeName_QueueArn QueueAttributeName = "QueueArn" - QueueAttributeName_ApproximateNumberOfMessagesDelayed QueueAttributeName = "ApproximateNumberOfMessagesDelayed" + QueueAttributeName_DeduplicationScope QueueAttributeName = "DeduplicationScope" QueueAttributeName_DelaySeconds QueueAttributeName = "DelaySeconds" - QueueAttributeName_ReceiveMessageWaitTimeSeconds QueueAttributeName = "ReceiveMessageWaitTimeSeconds" - QueueAttributeName_RedrivePolicy QueueAttributeName = "RedrivePolicy" QueueAttributeName_FifoQueue QueueAttributeName = "FifoQueue" - QueueAttributeName_ContentBasedDeduplication QueueAttributeName = "ContentBasedDeduplication" - QueueAttributeName_KmsMasterKeyId QueueAttributeName = "KmsMasterKeyId" - QueueAttributeName_KmsDataKeyReusePeriodSeconds QueueAttributeName = "KmsDataKeyReusePeriodSeconds" - QueueAttributeName_DeduplicationScope QueueAttributeName = "DeduplicationScope" QueueAttributeName_FifoThroughputLimit QueueAttributeName = "FifoThroughputLimit" + QueueAttributeName_KmsDataKeyReusePeriodSeconds QueueAttributeName = "KmsDataKeyReusePeriodSeconds" + QueueAttributeName_KmsMasterKeyId QueueAttributeName = "KmsMasterKeyId" + QueueAttributeName_LastModifiedTimestamp QueueAttributeName = "LastModifiedTimestamp" + QueueAttributeName_MaximumMessageSize QueueAttributeName = "MaximumMessageSize" + QueueAttributeName_MessageRetentionPeriod QueueAttributeName = "MessageRetentionPeriod" + QueueAttributeName_Policy QueueAttributeName = "Policy" + QueueAttributeName_QueueArn QueueAttributeName = "QueueArn" + QueueAttributeName_ReceiveMessageWaitTimeSeconds QueueAttributeName = "ReceiveMessageWaitTimeSeconds" QueueAttributeName_RedriveAllowPolicy QueueAttributeName = "RedriveAllowPolicy" + QueueAttributeName_RedrivePolicy QueueAttributeName = "RedrivePolicy" QueueAttributeName_SqsManagedSseEnabled QueueAttributeName = "SqsManagedSseEnabled" + QueueAttributeName_VisibilityTimeout QueueAttributeName = "VisibilityTimeout" ) diff --git a/cmd/controller/main.go b/cmd/controller/main.go index 033812b..50a2566 100644 --- a/cmd/controller/main.go +++ b/cmd/controller/main.go @@ -16,6 +16,7 @@ package main import ( + "context" "os" iamapitypes "github.com/aws-controllers-k8s/iam-controller/apis/v1alpha1" @@ -39,7 +40,6 @@ import ( svctypes "github.com/aws-controllers-k8s/sqs-controller/apis/v1alpha1" svcresource "github.com/aws-controllers-k8s/sqs-controller/pkg/resource" - svcsdk "github.com/aws/aws-sdk-go/service/sqs" _ "github.com/aws-controllers-k8s/sqs-controller/pkg/resource/queue" @@ -47,11 +47,10 @@ import ( ) var ( - awsServiceAPIGroup = "sqs.services.k8s.aws" - awsServiceAlias = "sqs" - awsServiceEndpointsID = svcsdk.EndpointsID - scheme = runtime.NewScheme() - setupLog = ctrlrt.Log.WithName("setup") + awsServiceAPIGroup = "sqs.services.k8s.aws" + awsServiceAlias = "sqs" + scheme = runtime.NewScheme() + setupLog = ctrlrt.Log.WithName("setup") ) func init() { @@ -75,7 +74,8 @@ func main() { resourceGVKs = append(resourceGVKs, mf.ResourceDescriptor().GroupVersionKind()) } - if err := ackCfg.Validate(ackcfg.WithGVKs(resourceGVKs)); err != nil { + ctx := context.Background() + if err := ackCfg.Validate(ctx, ackcfg.WithGVKs(resourceGVKs)); err != nil { setupLog.Error( err, "Unable to create controller manager", "aws.service", awsServiceAlias, @@ -140,7 +140,7 @@ func main() { "aws.service", awsServiceAlias, ) sc := ackrt.NewServiceController( - awsServiceAlias, awsServiceAPIGroup, awsServiceEndpointsID, + awsServiceAlias, awsServiceAPIGroup, acktypes.VersionInfo{ version.GitCommit, version.GitVersion, diff --git a/go.mod b/go.mod index e65f4f3..0625366 100644 --- a/go.mod +++ b/go.mod @@ -7,8 +7,11 @@ toolchain go1.22.5 require ( github.com/aws-controllers-k8s/iam-controller v1.1.1 github.com/aws-controllers-k8s/kms-controller v1.0.2 - github.com/aws-controllers-k8s/runtime v0.41.0 + github.com/aws-controllers-k8s/runtime v0.41.1-0.20250204215244-e48dd7b2d6d0 github.com/aws/aws-sdk-go v1.55.5 + github.com/aws/aws-sdk-go-v2 v1.34.0 + github.com/aws/aws-sdk-go-v2/service/sqs v1.37.10 + github.com/aws/smithy-go v1.22.2 github.com/go-logr/logr v1.4.2 github.com/spf13/pflag v1.0.5 k8s.io/api v0.31.0 @@ -18,6 +21,17 @@ require ( ) require ( + github.com/aws/aws-sdk-go-v2/config v1.28.6 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.47 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect @@ -41,7 +55,6 @@ require ( github.com/itchyny/gojq v0.12.6 // indirect github.com/itchyny/timefmt-go v0.1.3 // indirect github.com/jaypipes/envutil v1.0.0 // indirect - github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/mailru/easyjson v0.7.7 // indirect diff --git a/go.sum b/go.sum index 90169f0..1c53243 100644 --- a/go.sum +++ b/go.sum @@ -2,10 +2,38 @@ github.com/aws-controllers-k8s/iam-controller v1.1.1 h1:O6arh7DNlQF26MEKzgA2/kBE github.com/aws-controllers-k8s/iam-controller v1.1.1/go.mod h1:2+ARwRpazTq5MErjMz0MpXHhtAzRfNtY56Uj0gvu9vE= github.com/aws-controllers-k8s/kms-controller v1.0.2 h1:v8nh/oaX/U6spCwBDaWyem7XXpzoP/MnkJyEjNOZN9s= github.com/aws-controllers-k8s/kms-controller v1.0.2/go.mod h1:BeoijsyGjJ9G5VcDjpFdxBW0IxaeKXYX497XmUJiPSQ= -github.com/aws-controllers-k8s/runtime v0.41.0 h1:WumDnUiVlqnYYGEIGSOUBgDPWTIEozW8HT0qwGapDgA= -github.com/aws-controllers-k8s/runtime v0.41.0/go.mod h1:Tuq5AFGJQcU00MY+J5hBYbLctpR50I8iGs5TPLox+u8= +github.com/aws-controllers-k8s/runtime v0.41.1-0.20250204215244-e48dd7b2d6d0 h1:ygZwhPfearlE8/P0HY8rXpFsbarwJ5tzBIov+3xgQfk= +github.com/aws-controllers-k8s/runtime v0.41.1-0.20250204215244-e48dd7b2d6d0/go.mod h1:Oy0JKvDxZMZ+SVupm4NZVqP00KLIIAMfk93KnOwlt5c= github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/aws/aws-sdk-go-v2 v1.34.0 h1:9iyL+cjifckRGEVpRKZP3eIxVlL06Qk1Tk13vreaVQU= +github.com/aws/aws-sdk-go-v2 v1.34.0/go.mod h1:JgstGg0JjWU1KpVJjD5H0y0yyAIpSdKEq556EI6yOOM= +github.com/aws/aws-sdk-go-v2/config v1.28.6 h1:D89IKtGrs/I3QXOLNTH93NJYtDhm8SYa9Q5CsPShmyo= +github.com/aws/aws-sdk-go-v2/config v1.28.6/go.mod h1:GDzxJ5wyyFSCoLkS+UhGB0dArhb9mI+Co4dHtoTxbko= +github.com/aws/aws-sdk-go-v2/credentials v1.17.47 h1:48bA+3/fCdi2yAwVt+3COvmatZ6jUDNkDTIsqDiMUdw= +github.com/aws/aws-sdk-go-v2/credentials v1.17.47/go.mod h1:+KdckOejLW3Ks3b0E3b5rHsr2f9yuORBum0WPnE5o5w= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 h1:AmoU1pziydclFT/xRV+xXE/Vb8fttJCLRPv8oAkprc0= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21/go.mod h1:AjUdLYe4Tgs6kpH4Bv7uMZo7pottoyHMn4eTcIcneaY= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.29 h1:Ej0Rf3GMv50Qh4G4852j2djtoDb7AzQ7MuQeFHa3D70= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.29/go.mod h1:oeNTC7PwJNoM5AznVr23wxhLnuJv0ZDe5v7w0wqIs9M= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.29 h1:6e8a71X+9GfghragVevC5bZqvATtc3mAMgxpSNbgzF0= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.29/go.mod h1:c4jkZiQ+BWpNqq7VtrxjwISrLrt/VvPq3XiopkUIolI= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 h1:50+XsN70RS7dwJ2CkVNXzj7U2L1HKP8nqTd3XWEXBN4= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6/go.mod h1:WqgLmwY7so32kG01zD8CPTJWVWM+TzJoOVHwTg4aPug= +github.com/aws/aws-sdk-go-v2/service/sqs v1.37.10 h1:j297R5mnr3LKYqr9xhsqDdFEL8OfHE0kGN1sTMFT00E= +github.com/aws/aws-sdk-go-v2/service/sqs v1.37.10/go.mod h1:F6guYEP0P7+rR/2zs10iNC5JPrWPmDdTV6VIYQsHnyE= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 h1:rLnYAfXQ3YAccocshIH5mzNNwZBkBo+bP6EhIxak6Hw= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.7/go.mod h1:ZHtuQJ6t9A/+YDuxOLnbryAmITtr8UysSny3qcyvJTc= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 h1:JnhTZR3PiYDNKlXy50/pNeix9aGMo6lLpXwJ1mw8MD4= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6/go.mod h1:URronUEGfXZN1VpdktPSD1EkAL9mfrV+2F4sjH38qOY= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 h1:s4074ZO1Hk8qv65GqNXqDjmkf4HSQqJukaLuuW0TpDA= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.2/go.mod h1:mVggCnIWoM09jP71Wh+ea7+5gAp53q+49wDFs1SW5z8= +github.com/aws/smithy-go v1.22.2 h1:6D9hW43xKFrRx/tXXfAlIZc4JI+yQe6snnWcQyxSyLQ= +github.com/aws/smithy-go v1.22.2/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= @@ -69,8 +97,6 @@ github.com/jaypipes/envutil v1.0.0 h1:u6Vwy9HwruFihoZrL0bxDLCa/YNadGVwKyPElNmZWo github.com/jaypipes/envutil v1.0.0/go.mod h1:vgIRDly+xgBq0eeZRcflOHMMobMwgC6MkMbxo/Nw65M= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= diff --git a/pkg/resource/queue/hooks.go b/pkg/resource/queue/hooks.go index 88e1b16..1d1037f 100644 --- a/pkg/resource/queue/hooks.go +++ b/pkg/resource/queue/hooks.go @@ -19,8 +19,8 @@ import ( ackv1alpha1 "github.com/aws-controllers-k8s/runtime/apis/core/v1alpha1" ackrtlog "github.com/aws-controllers-k8s/runtime/pkg/runtime/log" + svcsdk "github.com/aws/aws-sdk-go-v2/service/sqs" "github.com/aws/aws-sdk-go/aws/arn" - svcsdk "github.com/aws/aws-sdk-go/service/sqs" ) // syncTags examines the Tags in the supplied Queue and calls the @@ -34,27 +34,27 @@ func (rm *resourceManager) syncTags( rlog := ackrtlog.FromContext(ctx) exit := rlog.Trace("rm.syncTags") defer func() { exit(err) }() - toAdd := map[string]*string{} - toDelete := []*string{} + toAdd := map[string]string{} + toDelete := []string{} existingTags := latest.ko.Spec.Tags for k, v := range desired.ko.Spec.Tags { if ev, found := existingTags[k]; !found || *ev != *v { - toAdd[k] = v + toAdd[k] = *v } } for k, _ := range existingTags { if _, found := desired.ko.Spec.Tags[k]; !found { deleteKey := k - toDelete = append(toDelete, &deleteKey) + toDelete = append(toDelete, deleteKey) } } if len(toAdd) > 0 { for k, v := range toAdd { - rlog.Debug("adding tag to queue", "key", k, "value", *v) + rlog.Debug("adding tag to queue", "key", k, "value", v) } if err = rm.addTags(ctx, desired, toAdd); err != nil { return err @@ -62,7 +62,7 @@ func (rm *resourceManager) syncTags( } if len(toDelete) > 0 { for _, k := range toDelete { - rlog.Debug("removing tag from queue", "key", *k) + rlog.Debug("removing tag from queue", "key", k) } if err = rm.removeTags(ctx, desired, toDelete); err != nil { return err @@ -76,7 +76,7 @@ func (rm *resourceManager) syncTags( func (rm *resourceManager) getTags( ctx context.Context, r *resource, -) (map[string]*string, error) { +) (map[string]string, error) { var err error var resp *svcsdk.ListQueueTagsOutput rlog := ackrtlog.FromContext(ctx) @@ -88,7 +88,7 @@ func (rm *resourceManager) getTags( // NOTE(jaypipes): Unlike many other ListTags APIs, SQS's is not // paginated... - resp, err = rm.sdkapi.ListQueueTagsWithContext(ctx, input) + resp, err = rm.sdkapi.ListQueueTags(ctx, input) rm.metrics.RecordAPICall("READ_MANY", "ListQueueTags", err) if err != nil || resp == nil { return nil, err @@ -102,7 +102,7 @@ func (rm *resourceManager) getTags( func (rm *resourceManager) addTags( ctx context.Context, r *resource, - tags map[string]*string, + tags map[string]string, ) (err error) { rlog := ackrtlog.FromContext(ctx) exit := rlog.Trace("rm.addTag") @@ -112,7 +112,7 @@ func (rm *resourceManager) addTags( input.QueueUrl = r.ko.Status.QueueURL input.Tags = tags - _, err = rm.sdkapi.TagQueueWithContext(ctx, input) + _, err = rm.sdkapi.TagQueue(ctx, input) rm.metrics.RecordAPICall("UPDATE", "TagQueue", err) return err } @@ -121,7 +121,7 @@ func (rm *resourceManager) addTags( func (rm *resourceManager) removeTags( ctx context.Context, r *resource, - tagKeys []*string, // the set of tag keys to delete + tagKeys []string, // the set of tag keys to delete ) (err error) { rlog := ackrtlog.FromContext(ctx) exit := rlog.Trace("rm.removeTag") @@ -131,7 +131,7 @@ func (rm *resourceManager) removeTags( input.QueueUrl = r.ko.Status.QueueURL input.TagKeys = tagKeys - _, err = rm.sdkapi.UntagQueueWithContext(ctx, input) + _, err = rm.sdkapi.UntagQueue(ctx, input) rm.metrics.RecordAPICall("UPDATE", "UntagQueue", err) return err } diff --git a/pkg/resource/queue/manager.go b/pkg/resource/queue/manager.go index 88e53c9..6aa4eef 100644 --- a/pkg/resource/queue/manager.go +++ b/pkg/resource/queue/manager.go @@ -32,9 +32,8 @@ import ( acktags "github.com/aws-controllers-k8s/runtime/pkg/tags" acktypes "github.com/aws-controllers-k8s/runtime/pkg/types" ackutil "github.com/aws-controllers-k8s/runtime/pkg/util" - "github.com/aws/aws-sdk-go/aws/session" - svcsdk "github.com/aws/aws-sdk-go/service/sqs" - svcsdkapi "github.com/aws/aws-sdk-go/service/sqs/sqsiface" + "github.com/aws/aws-sdk-go-v2/aws" + svcsdk "github.com/aws/aws-sdk-go-v2/service/sqs" "github.com/go-logr/logr" corev1 "k8s.io/api/core/v1" @@ -59,6 +58,9 @@ type resourceManager struct { // cfg is a copy of the ackcfg.Config object passed on start of the service // controller cfg ackcfg.Config + // clientcfg is a copy of the client configuration passed on start of the + // service controller + clientcfg aws.Config // log refers to the logr.Logger object handling logging for the service // controller log logr.Logger @@ -73,12 +75,9 @@ type resourceManager struct { awsAccountID ackv1alpha1.AWSAccountID // The AWS Region that this resource manager targets awsRegion ackv1alpha1.AWSRegion - // sess is the AWS SDK Session object used to communicate with the backend - // AWS service API - sess *session.Session - // sdk is a pointer to the AWS service API interface exposed by the - // aws-sdk-go/services/{alias}/{alias}iface package. - sdkapi svcsdkapi.SQSAPI + // sdk is a pointer to the AWS service API client exposed by the + // aws-sdk-go-v2/services/{alias} package. + sdkapi *svcsdk.Client } // concreteResource returns a pointer to a resource from the supplied @@ -332,24 +331,25 @@ func (rm *resourceManager) EnsureTags( // newResourceManager returns a new struct implementing // acktypes.AWSResourceManager +// This is for AWS-SDK-GO-V2 - Created newResourceManager With AWS sdk-Go-ClientV2 func newResourceManager( cfg ackcfg.Config, + clientcfg aws.Config, log logr.Logger, metrics *ackmetrics.Metrics, rr acktypes.Reconciler, - sess *session.Session, id ackv1alpha1.AWSAccountID, region ackv1alpha1.AWSRegion, ) (*resourceManager, error) { return &resourceManager{ cfg: cfg, + clientcfg: clientcfg, log: log, metrics: metrics, rr: rr, awsAccountID: id, awsRegion: region, - sess: sess, - sdkapi: svcsdk.New(sess), + sdkapi: svcsdk.NewFromConfig(clientcfg), }, nil } diff --git a/pkg/resource/queue/manager_factory.go b/pkg/resource/queue/manager_factory.go index 7e30872..e326616 100644 --- a/pkg/resource/queue/manager_factory.go +++ b/pkg/resource/queue/manager_factory.go @@ -23,7 +23,7 @@ import ( ackcfg "github.com/aws-controllers-k8s/runtime/pkg/config" ackmetrics "github.com/aws-controllers-k8s/runtime/pkg/metrics" acktypes "github.com/aws-controllers-k8s/runtime/pkg/types" - "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go-v2/aws" "github.com/go-logr/logr" svcresource "github.com/aws-controllers-k8s/sqs-controller/pkg/resource" @@ -47,10 +47,10 @@ func (f *resourceManagerFactory) ResourceDescriptor() acktypes.AWSResourceDescri // supplied AWS account func (f *resourceManagerFactory) ManagerFor( cfg ackcfg.Config, + clientcfg aws.Config, log logr.Logger, metrics *ackmetrics.Metrics, rr acktypes.Reconciler, - sess *session.Session, id ackv1alpha1.AWSAccountID, region ackv1alpha1.AWSRegion, roleARN ackv1alpha1.AWSResourceName, @@ -70,7 +70,7 @@ func (f *resourceManagerFactory) ManagerFor( f.Lock() defer f.Unlock() - rm, err := newResourceManager(cfg, log, metrics, rr, sess, id, region) + rm, err := newResourceManager(cfg, clientcfg, log, metrics, rr, id, region) if err != nil { return nil, err } diff --git a/pkg/resource/queue/sdk.go b/pkg/resource/queue/sdk.go index 212a9a6..b03f076 100644 --- a/pkg/resource/queue/sdk.go +++ b/pkg/resource/queue/sdk.go @@ -28,8 +28,10 @@ import ( ackerr "github.com/aws-controllers-k8s/runtime/pkg/errors" ackrequeue "github.com/aws-controllers-k8s/runtime/pkg/requeue" ackrtlog "github.com/aws-controllers-k8s/runtime/pkg/runtime/log" - "github.com/aws/aws-sdk-go/aws" - svcsdk "github.com/aws/aws-sdk-go/service/sqs" + "github.com/aws/aws-sdk-go-v2/aws" + svcsdk "github.com/aws/aws-sdk-go-v2/service/sqs" + svcsdktypes "github.com/aws/aws-sdk-go-v2/service/sqs/types" + smithy "github.com/aws/smithy-go" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -40,8 +42,7 @@ import ( var ( _ = &metav1.Time{} _ = strings.ToLower("") - _ = &aws.JSONValue{} - _ = &svcsdk.SQS{} + _ = &svcsdk.Client{} _ = &svcapitypes.Queue{} _ = ackv1alpha1.AWSAccountID("") _ = &ackerr.NotFound @@ -49,6 +50,7 @@ var ( _ = &reflect.Value{} _ = fmt.Sprintf("") _ = &ackrequeue.NoRequeue{} + _ = &aws.Config{} ) // sdkFind returns SDK-specific information about a supplied resource @@ -73,10 +75,11 @@ func (rm *resourceManager) sdkFind( return nil, err } var resp *svcsdk.GetQueueAttributesOutput - resp, err = rm.sdkapi.GetQueueAttributesWithContext(ctx, input) + resp, err = rm.sdkapi.GetQueueAttributes(ctx, input) rm.metrics.RecordAPICall("GET_ATTRIBUTES", "GetQueueAttributes", err) if err != nil { - if awsErr, ok := ackerr.AWSError(err); ok && awsErr.Code() == "AWS.SimpleQueueService.NonExistentQueue" { + var awsErr smithy.APIError + if errors.As(err, &awsErr) && awsErr.ErrorCode() == "AWS.SimpleQueueService.NonExistentQueue" { return nil, ackerr.NotFound } return nil, err @@ -86,24 +89,89 @@ func (rm *resourceManager) sdkFind( // the original Kubernetes object we passed to the function ko := r.ko.DeepCopy() - ko.Spec.ContentBasedDeduplication = resp.Attributes["ContentBasedDeduplication"] - ko.Spec.DelaySeconds = resp.Attributes["DelaySeconds"] - ko.Spec.FIFOQueue = resp.Attributes["FifoQueue"] - ko.Spec.KMSDataKeyReusePeriodSeconds = resp.Attributes["KmsDataKeyReusePeriodSeconds"] - ko.Spec.KMSMasterKeyID = resp.Attributes["KmsMasterKeyId"] - ko.Spec.MaximumMessageSize = resp.Attributes["MaximumMessageSize"] - ko.Spec.MessageRetentionPeriod = resp.Attributes["MessageRetentionPeriod"] - ko.Spec.Policy = resp.Attributes["Policy"] + f0, ok := resp.Attributes["ContentBasedDeduplication"] + if ok { + ko.Spec.ContentBasedDeduplication = &f0 + } else { + ko.Spec.ContentBasedDeduplication = nil + } + f1, ok := resp.Attributes["DelaySeconds"] + if ok { + ko.Spec.DelaySeconds = &f1 + } else { + ko.Spec.DelaySeconds = nil + } + f2, ok := resp.Attributes["FifoQueue"] + if ok { + ko.Spec.FIFOQueue = &f2 + } else { + ko.Spec.FIFOQueue = nil + } + f3, ok := resp.Attributes["KmsDataKeyReusePeriodSeconds"] + if ok { + ko.Spec.KMSDataKeyReusePeriodSeconds = &f3 + } else { + ko.Spec.KMSDataKeyReusePeriodSeconds = nil + } + f4, ok := resp.Attributes["KmsMasterKeyId"] + if ok { + ko.Spec.KMSMasterKeyID = &f4 + } else { + ko.Spec.KMSMasterKeyID = nil + } + f5, ok := resp.Attributes["MaximumMessageSize"] + if ok { + ko.Spec.MaximumMessageSize = &f5 + } else { + ko.Spec.MaximumMessageSize = nil + } + f6, ok := resp.Attributes["MessageRetentionPeriod"] + if ok { + ko.Spec.MessageRetentionPeriod = &f6 + } else { + ko.Spec.MessageRetentionPeriod = nil + } + f7, ok := resp.Attributes["Policy"] + if ok { + ko.Spec.Policy = &f7 + } else { + ko.Spec.Policy = nil + } if ko.Status.ACKResourceMetadata == nil { ko.Status.ACKResourceMetadata = &ackv1alpha1.ResourceMetadata{} } - tmpARN := ackv1alpha1.AWSResourceName(*resp.Attributes["QueueArn"]) + tmpARN := ackv1alpha1.AWSResourceName(resp.Attributes["QueueArn"]) ko.Status.ACKResourceMetadata.ARN = &tmpARN - ko.Spec.ReceiveMessageWaitTimeSeconds = resp.Attributes["ReceiveMessageWaitTimeSeconds"] - ko.Spec.RedriveAllowPolicy = resp.Attributes["RedriveAllowPolicy"] - ko.Spec.RedrivePolicy = resp.Attributes["RedrivePolicy"] - ko.Spec.SQSManagedSSEEnabled = resp.Attributes["SqsManagedSseEnabled"] - ko.Spec.VisibilityTimeout = resp.Attributes["VisibilityTimeout"] + f9, ok := resp.Attributes["ReceiveMessageWaitTimeSeconds"] + if ok { + ko.Spec.ReceiveMessageWaitTimeSeconds = &f9 + } else { + ko.Spec.ReceiveMessageWaitTimeSeconds = nil + } + f10, ok := resp.Attributes["RedriveAllowPolicy"] + if ok { + ko.Spec.RedriveAllowPolicy = &f10 + } else { + ko.Spec.RedriveAllowPolicy = nil + } + f11, ok := resp.Attributes["RedrivePolicy"] + if ok { + ko.Spec.RedrivePolicy = &f11 + } else { + ko.Spec.RedrivePolicy = nil + } + f12, ok := resp.Attributes["SqsManagedSseEnabled"] + if ok { + ko.Spec.SQSManagedSSEEnabled = &f12 + } else { + ko.Spec.SQSManagedSSEEnabled = nil + } + f13, ok := resp.Attributes["VisibilityTimeout"] + if ok { + ko.Spec.VisibilityTimeout = &f13 + } else { + ko.Spec.VisibilityTimeout = nil + } // If the QueueName field is empty, populate it with the last part of the queue ARN // This is a workaround for the fact that the QueueName field is required by the @@ -121,7 +189,7 @@ func (rm *resourceManager) sdkFind( if tags, err := rm.getTags(ctx, r); err != nil { return nil, err } else { - ko.Spec.Tags = tags + ko.Spec.Tags = FromACKTags(tags) } return &resource{ko}, nil @@ -145,13 +213,13 @@ func (rm *resourceManager) newGetAttributesRequestPayload( res := &svcsdk.GetQueueAttributesInput{} { - tmpVals := []*string{} - tmpVal0 := "All" - tmpVals = append(tmpVals, &tmpVal0) - res.SetAttributeNames(tmpVals) + tmpVals := []svcsdktypes.QueueAttributeName{} + tmpVal0 := svcsdktypes.QueueAttributeNameAll + tmpVals = append(tmpVals, tmpVal0) + res.AttributeNames = tmpVals } if r.ko.Status.QueueURL != nil { - res.SetQueueUrl(*r.ko.Status.QueueURL) + res.QueueUrl = r.ko.Status.QueueURL } return res, nil @@ -176,7 +244,7 @@ func (rm *resourceManager) sdkCreate( var resp *svcsdk.CreateQueueOutput _ = resp - resp, err = rm.sdkapi.CreateQueueWithContext(ctx, input) + resp, err = rm.sdkapi.CreateQueue(ctx, input) rm.metrics.RecordAPICall("CREATE", "CreateQueue", err) if err != nil { return nil, err @@ -203,60 +271,54 @@ func (rm *resourceManager) newCreateRequestPayload( ) (*svcsdk.CreateQueueInput, error) { res := &svcsdk.CreateQueueInput{} - attrMap := map[string]*string{} + attrMap := map[string]string{} if r.ko.Spec.ContentBasedDeduplication != nil { - attrMap["ContentBasedDeduplication"] = r.ko.Spec.ContentBasedDeduplication + attrMap["ContentBasedDeduplication"] = *r.ko.Spec.ContentBasedDeduplication } if r.ko.Spec.DelaySeconds != nil { - attrMap["DelaySeconds"] = r.ko.Spec.DelaySeconds + attrMap["DelaySeconds"] = *r.ko.Spec.DelaySeconds } if r.ko.Spec.FIFOQueue != nil { - attrMap["FifoQueue"] = r.ko.Spec.FIFOQueue + attrMap["FifoQueue"] = *r.ko.Spec.FIFOQueue } if r.ko.Spec.KMSDataKeyReusePeriodSeconds != nil { - attrMap["KmsDataKeyReusePeriodSeconds"] = r.ko.Spec.KMSDataKeyReusePeriodSeconds + attrMap["KmsDataKeyReusePeriodSeconds"] = *r.ko.Spec.KMSDataKeyReusePeriodSeconds } if r.ko.Spec.KMSMasterKeyID != nil { - attrMap["KmsMasterKeyId"] = r.ko.Spec.KMSMasterKeyID + attrMap["KmsMasterKeyId"] = *r.ko.Spec.KMSMasterKeyID } if r.ko.Spec.MaximumMessageSize != nil { - attrMap["MaximumMessageSize"] = r.ko.Spec.MaximumMessageSize + attrMap["MaximumMessageSize"] = *r.ko.Spec.MaximumMessageSize } if r.ko.Spec.MessageRetentionPeriod != nil { - attrMap["MessageRetentionPeriod"] = r.ko.Spec.MessageRetentionPeriod + attrMap["MessageRetentionPeriod"] = *r.ko.Spec.MessageRetentionPeriod } if r.ko.Spec.Policy != nil { - attrMap["Policy"] = r.ko.Spec.Policy + attrMap["Policy"] = *r.ko.Spec.Policy } if r.ko.Spec.ReceiveMessageWaitTimeSeconds != nil { - attrMap["ReceiveMessageWaitTimeSeconds"] = r.ko.Spec.ReceiveMessageWaitTimeSeconds + attrMap["ReceiveMessageWaitTimeSeconds"] = *r.ko.Spec.ReceiveMessageWaitTimeSeconds } if r.ko.Spec.RedriveAllowPolicy != nil { - attrMap["RedriveAllowPolicy"] = r.ko.Spec.RedriveAllowPolicy + attrMap["RedriveAllowPolicy"] = *r.ko.Spec.RedriveAllowPolicy } if r.ko.Spec.RedrivePolicy != nil { - attrMap["RedrivePolicy"] = r.ko.Spec.RedrivePolicy + attrMap["RedrivePolicy"] = *r.ko.Spec.RedrivePolicy } if r.ko.Spec.SQSManagedSSEEnabled != nil { - attrMap["SqsManagedSseEnabled"] = r.ko.Spec.SQSManagedSSEEnabled + attrMap["SqsManagedSseEnabled"] = *r.ko.Spec.SQSManagedSSEEnabled } if r.ko.Spec.VisibilityTimeout != nil { - attrMap["VisibilityTimeout"] = r.ko.Spec.VisibilityTimeout + attrMap["VisibilityTimeout"] = *r.ko.Spec.VisibilityTimeout } if len(attrMap) > 0 { - res.SetAttributes(attrMap) + res.Attributes = attrMap } if r.ko.Spec.QueueName != nil { - res.SetQueueName(*r.ko.Spec.QueueName) + res.QueueName = r.ko.Spec.QueueName } if r.ko.Spec.Tags != nil { - f2 := map[string]*string{} - for f2key, f2valiter := range r.ko.Spec.Tags { - var f2val string - f2val = *f2valiter - f2[f2key] = &f2val - } - res.SetTags(f2) + res.Tags = aws.ToStringMap(r.ko.Spec.Tags) } return res, nil @@ -301,10 +363,11 @@ func (rm *resourceManager) sdkUpdate( // contain any useful information. Instead, below, we'll be returning a // DeepCopy of the supplied desired state, which should be fine because // that desired state has been constructed from a call to GetAttributes... - _, respErr := rm.sdkapi.SetQueueAttributesWithContext(ctx, input) + _, respErr := rm.sdkapi.SetQueueAttributes(ctx, input) rm.metrics.RecordAPICall("SET_ATTRIBUTES", "SetQueueAttributes", respErr) if respErr != nil { - if awsErr, ok := ackerr.AWSError(respErr); ok && awsErr.Code() == "AWS.SimpleQueueService.NonExistentQueue" { + var awsErr smithy.APIError + if errors.As(err, &awsErr) && awsErr.ErrorCode() == "AWS.SimpleQueueService.NonExistentQueue" { // Technically, this means someone deleted the backend resource in // between the time we got a result back from sdkFind() and here... return nil, ackerr.NotFound @@ -336,51 +399,51 @@ func (rm *resourceManager) newSetAttributesRequestPayload( ) (*svcsdk.SetQueueAttributesInput, error) { res := &svcsdk.SetQueueAttributesInput{} - attrMap := map[string]*string{} + attrMap := map[string]string{} if r.ko.Spec.ContentBasedDeduplication != nil { - attrMap["ContentBasedDeduplication"] = r.ko.Spec.ContentBasedDeduplication + attrMap["ContentBasedDeduplication"] = *r.ko.Spec.ContentBasedDeduplication } if r.ko.Spec.DelaySeconds != nil { - attrMap["DelaySeconds"] = r.ko.Spec.DelaySeconds + attrMap["DelaySeconds"] = *r.ko.Spec.DelaySeconds } if r.ko.Spec.FIFOQueue != nil { - attrMap["FifoQueue"] = r.ko.Spec.FIFOQueue + attrMap["FifoQueue"] = *r.ko.Spec.FIFOQueue } if r.ko.Spec.KMSDataKeyReusePeriodSeconds != nil { - attrMap["KmsDataKeyReusePeriodSeconds"] = r.ko.Spec.KMSDataKeyReusePeriodSeconds + attrMap["KmsDataKeyReusePeriodSeconds"] = *r.ko.Spec.KMSDataKeyReusePeriodSeconds } if r.ko.Spec.KMSMasterKeyID != nil { - attrMap["KmsMasterKeyId"] = r.ko.Spec.KMSMasterKeyID + attrMap["KmsMasterKeyId"] = *r.ko.Spec.KMSMasterKeyID } if r.ko.Spec.MaximumMessageSize != nil { - attrMap["MaximumMessageSize"] = r.ko.Spec.MaximumMessageSize + attrMap["MaximumMessageSize"] = *r.ko.Spec.MaximumMessageSize } if r.ko.Spec.MessageRetentionPeriod != nil { - attrMap["MessageRetentionPeriod"] = r.ko.Spec.MessageRetentionPeriod + attrMap["MessageRetentionPeriod"] = *r.ko.Spec.MessageRetentionPeriod } if r.ko.Spec.Policy != nil { - attrMap["Policy"] = r.ko.Spec.Policy + attrMap["Policy"] = *r.ko.Spec.Policy } if r.ko.Spec.ReceiveMessageWaitTimeSeconds != nil { - attrMap["ReceiveMessageWaitTimeSeconds"] = r.ko.Spec.ReceiveMessageWaitTimeSeconds + attrMap["ReceiveMessageWaitTimeSeconds"] = *r.ko.Spec.ReceiveMessageWaitTimeSeconds } if r.ko.Spec.RedriveAllowPolicy != nil { - attrMap["RedriveAllowPolicy"] = r.ko.Spec.RedriveAllowPolicy + attrMap["RedriveAllowPolicy"] = *r.ko.Spec.RedriveAllowPolicy } if r.ko.Spec.RedrivePolicy != nil { - attrMap["RedrivePolicy"] = r.ko.Spec.RedrivePolicy + attrMap["RedrivePolicy"] = *r.ko.Spec.RedrivePolicy } if r.ko.Spec.SQSManagedSSEEnabled != nil { - attrMap["SqsManagedSseEnabled"] = r.ko.Spec.SQSManagedSSEEnabled + attrMap["SqsManagedSseEnabled"] = *r.ko.Spec.SQSManagedSSEEnabled } if r.ko.Spec.VisibilityTimeout != nil { - attrMap["VisibilityTimeout"] = r.ko.Spec.VisibilityTimeout + attrMap["VisibilityTimeout"] = *r.ko.Spec.VisibilityTimeout } if len(attrMap) > 0 { - res.SetAttributes(attrMap) + res.Attributes = attrMap } if r.ko.Status.QueueURL != nil { - res.SetQueueUrl(*r.ko.Status.QueueURL) + res.QueueUrl = r.ko.Status.QueueURL } return res, nil @@ -402,7 +465,7 @@ func (rm *resourceManager) sdkDelete( } var resp *svcsdk.DeleteQueueOutput _ = resp - resp, err = rm.sdkapi.DeleteQueueWithContext(ctx, input) + resp, err = rm.sdkapi.DeleteQueue(ctx, input) rm.metrics.RecordAPICall("DELETE", "DeleteQueue", err) return nil, err } @@ -415,7 +478,7 @@ func (rm *resourceManager) newDeleteRequestPayload( res := &svcsdk.DeleteQueueInput{} if r.ko.Status.QueueURL != nil { - res.SetQueueUrl(*r.ko.Status.QueueURL) + res.QueueUrl = r.ko.Status.QueueURL } return res, nil diff --git a/templates/hooks/queue/sdk_get_attributes_post_set_output.go.tpl b/templates/hooks/queue/sdk_get_attributes_post_set_output.go.tpl index 928148a..a97dc70 100644 --- a/templates/hooks/queue/sdk_get_attributes_post_set_output.go.tpl +++ b/templates/hooks/queue/sdk_get_attributes_post_set_output.go.tpl @@ -1,5 +1,5 @@ if tags, err := rm.getTags(ctx, r); err != nil { return nil, err } else { - ko.Spec.Tags = tags + ko.Spec.Tags = FromACKTags(tags) }