Skip to content

Commit 4776970

Browse files
authored
Merge pull request #3556 from cdirubbio/cni-user-agent
fix: add userAgent to AWS API calls
2 parents 8308fb7 + 183294f commit 4776970

File tree

2 files changed

+13
-54
lines changed

2 files changed

+13
-54
lines changed

pkg/awsutils/awssession/session.go

Lines changed: 2 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -22,24 +22,19 @@ import (
2222
"github.com/aws/aws-sdk-go-v2/aws/retry"
2323
"github.com/aws/aws-sdk-go-v2/config"
2424
"github.com/aws/aws-sdk-go-v2/service/ec2"
25-
"github.com/aws/smithy-go"
2625

2726
awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http"
28-
smithymiddleware "github.com/aws/smithy-go/middleware"
29-
smithyhttp "github.com/aws/smithy-go/transport/http"
3027

3128
"strconv"
3229
"time"
3330

3431
"github.com/aws/amazon-vpc-cni-k8s/pkg/utils/logger"
35-
"github.com/aws/amazon-vpc-cni-k8s/utils"
3632
)
3733

3834
// Http client timeout env for sessions
3935
const (
40-
httpTimeoutEnv = "HTTP_TIMEOUT"
41-
maxRetries = 10
42-
envVpcCniVersion = "VPC_CNI_VERSION"
36+
httpTimeoutEnv = "HTTP_TIMEOUT"
37+
maxRetries = 10
4338
)
4439

4540
var (
@@ -72,7 +67,6 @@ func New(ctx context.Context) (aws.Config, error) {
7267
config.WithRetryer(func() aws.Retryer {
7368
return retry.NewStandard()
7469
}),
75-
injectUserAgent,
7670
}
7771

7872
endpoint := os.Getenv("AWS_EC2_ENDPOINT")
@@ -98,48 +92,3 @@ func New(ctx context.Context) (aws.Config, error) {
9892

9993
return cfg, nil
10094
}
101-
102-
// injectUserAgent will inject app specific user-agent into awsSDK
103-
func injectUserAgent(loadOptions *config.LoadOptions) error {
104-
version := utils.GetEnv(envVpcCniVersion, "")
105-
userAgent := fmt.Sprintf("amazon-vpc-cni-k8s/version/%s", version)
106-
107-
loadOptions.APIOptions = append(loadOptions.APIOptions, func(stack *smithymiddleware.Stack) error {
108-
return stack.Build.Add(&addUserAgentMiddleware{
109-
userAgent: userAgent,
110-
}, smithymiddleware.After)
111-
})
112-
113-
return nil
114-
}
115-
116-
type addUserAgentMiddleware struct {
117-
userAgent string
118-
}
119-
120-
func (m *addUserAgentMiddleware) HandleBuild(ctx context.Context, in smithymiddleware.BuildInput, next smithymiddleware.BuildHandler) (out smithymiddleware.BuildOutput, metadata smithymiddleware.Metadata, err error) {
121-
// Simply pass through to the next handler in the middleware chain
122-
return next.HandleBuild(ctx, in)
123-
}
124-
125-
func (m *addUserAgentMiddleware) ID() string {
126-
return "AddUserAgent"
127-
}
128-
129-
func (m *addUserAgentMiddleware) HandleFinalize(ctx context.Context, in smithymiddleware.FinalizeInput, next smithymiddleware.FinalizeHandler) (
130-
out smithymiddleware.FinalizeOutput, metadata smithymiddleware.Metadata, err error) {
131-
req, ok := in.Request.(*smithyhttp.Request)
132-
if !ok {
133-
return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown request type %T", in.Request)}
134-
}
135-
136-
userAgent := req.Header.Get("User-Agent")
137-
if userAgent == "" {
138-
userAgent = m.userAgent
139-
} else {
140-
userAgent += " " + m.userAgent
141-
}
142-
req.Header.Set("User-Agent", userAgent)
143-
144-
return next.HandleFinalize(ctx, in)
145-
}

pkg/awsutils/awsutils.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ import (
3030

3131
"github.com/aws/amazon-vpc-cni-k8s/utils"
3232

33+
"github.com/aws/aws-sdk-go-v2/aws/middleware"
3334
"github.com/aws/aws-sdk-go-v2/config"
35+
smithymiddleware "github.com/aws/smithy-go/middleware"
3436

3537
"github.com/aws/smithy-go"
3638

@@ -72,6 +74,8 @@ const (
7274
additionalEniTagsEnvVar = "ADDITIONAL_ENI_TAGS"
7375
reservedTagKeyPrefix = "k8s.amazonaws.com"
7476
subnetDiscoveryTagKey = "kubernetes.io/role/cni"
77+
envVpcCniVersion = "VPC_CNI_VERSION"
78+
7579
// UnknownInstanceType indicates that the instance type is not yet supported
7680
UnknownInstanceType = "vpc ip resource(eni ip limit): unknown instance type"
7781

@@ -417,7 +421,13 @@ func New(useSubnetDiscovery, useCustomNetworking, disableLeakedENICleanup, v4Ena
417421
cache.v4Enabled = v4Enabled
418422
cache.v6Enabled = v6Enabled
419423

420-
awsCfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion(region.Region))
424+
version := utils.GetEnv(envVpcCniVersion, "")
425+
awsCfg, err := config.LoadDefaultConfig(context.TODO(),
426+
config.WithRegion(region.Region),
427+
config.WithAPIOptions([]func(*smithymiddleware.Stack) error{
428+
middleware.AddUserAgentKeyValue("amazon-vpc-cni-k8s", version),
429+
}),
430+
)
421431
if err != nil {
422432
return nil, fmt.Errorf("unable to load SDK config, %v", err)
423433
}

0 commit comments

Comments
 (0)