mirror of https://github.com/kubernetes/kops.git
Migrate SSM to aws-sdk-go-v2
This commit is contained in:
parent
2c9bc1dea6
commit
c12b304e5e
|
@ -29,6 +29,7 @@ import (
|
|||
awsconfig "github.com/aws/aws-sdk-go-v2/config"
|
||||
"github.com/aws/aws-sdk-go-v2/service/eventbridge"
|
||||
"github.com/aws/aws-sdk-go-v2/service/sqs"
|
||||
"github.com/aws/aws-sdk-go-v2/service/ssm"
|
||||
"golang.org/x/sync/errgroup"
|
||||
|
||||
"github.com/aws/aws-sdk-go-v2/aws/arn"
|
||||
|
@ -50,8 +51,6 @@ import (
|
|||
"github.com/aws/aws-sdk-go/service/iam/iamiface"
|
||||
"github.com/aws/aws-sdk-go/service/route53"
|
||||
"github.com/aws/aws-sdk-go/service/route53/route53iface"
|
||||
"github.com/aws/aws-sdk-go/service/ssm"
|
||||
"github.com/aws/aws-sdk-go/service/ssm/ssmiface"
|
||||
"github.com/aws/aws-sdk-go/service/sts"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
|
@ -137,7 +136,7 @@ type AWSCloud interface {
|
|||
Spotinst() spotinst.Cloud
|
||||
SQS() awsinterfaces.SQSAPI
|
||||
EventBridge() awsinterfaces.EventBridgeAPI
|
||||
SSM() ssmiface.SSMAPI
|
||||
SSM() awsinterfaces.SSMAPI
|
||||
|
||||
// TODO: Document and rationalize these tags/filters methods
|
||||
AddTags(name *string, tags map[string]string)
|
||||
|
@ -207,7 +206,7 @@ type awsCloudImplementation struct {
|
|||
sts *sts.STS
|
||||
sqs *sqs.Client
|
||||
eventbridge *eventbridge.Client
|
||||
ssm *ssm.SSM
|
||||
ssm *ssm.Client
|
||||
|
||||
region string
|
||||
|
||||
|
@ -409,17 +408,7 @@ func NewAWSCloud(region string, tags map[string]string) (AWSCloud, error) {
|
|||
|
||||
c.sqs = sqs.NewFromConfig(cfgV2)
|
||||
c.eventbridge = eventbridge.NewFromConfig(cfgV2)
|
||||
|
||||
sess, err = session.NewSessionWithOptions(session.Options{
|
||||
Config: *config,
|
||||
SharedConfigState: session.SharedConfigEnable,
|
||||
})
|
||||
if err != nil {
|
||||
return c, err
|
||||
}
|
||||
c.ssm = ssm.New(sess, config)
|
||||
c.ssm.Handlers.Send.PushFront(requestLogger)
|
||||
c.addHandlers(region, &c.ssm.Handlers)
|
||||
c.ssm = ssm.NewFromConfig(cfgV2)
|
||||
|
||||
updateAwsCloudInstances(region, c)
|
||||
|
||||
|
@ -2044,16 +2033,16 @@ func describeVPC(c AWSCloud, vpcID string) (*ec2.Vpc, error) {
|
|||
// owner/name in which case we find the image with the specified name, owned by owner
|
||||
// name in which case we find the image with the specified name, with the current owner
|
||||
func (c *awsCloudImplementation) ResolveImage(name string) (*ec2.Image, error) {
|
||||
return resolveImage(c.ssm, c.ec2, name)
|
||||
return resolveImage(context.TODO(), c.ssm, c.ec2, name)
|
||||
}
|
||||
|
||||
func resolveSSMParameter(ssmClient ssmiface.SSMAPI, name string) (string, error) {
|
||||
func resolveSSMParameter(ctx context.Context, ssmClient awsinterfaces.SSMAPI, name string) (string, error) {
|
||||
klog.V(2).Infof("Resolving SSM parameter %q", name)
|
||||
request := &ssm.GetParameterInput{
|
||||
Name: aws.String(name),
|
||||
}
|
||||
|
||||
response, err := ssmClient.GetParameter(request)
|
||||
response, err := ssmClient.GetParameter(ctx, request)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to get value for SSM parameter: %w", err)
|
||||
}
|
||||
|
@ -2061,7 +2050,7 @@ func resolveSSMParameter(ssmClient ssmiface.SSMAPI, name string) (string, error)
|
|||
return aws.StringValue(response.Parameter.Value), nil
|
||||
}
|
||||
|
||||
func resolveImage(ssmClient ssmiface.SSMAPI, ec2Client ec2iface.EC2API, name string) (*ec2.Image, error) {
|
||||
func resolveImage(ctx context.Context, ssmClient awsinterfaces.SSMAPI, ec2Client ec2iface.EC2API, name string) (*ec2.Image, error) {
|
||||
// TODO: Cache this result during a single execution (we get called multiple times)
|
||||
klog.V(2).Infof("Calling DescribeImages to resolve name %q", name)
|
||||
request := &ec2.DescribeImagesInput{}
|
||||
|
@ -2072,7 +2061,7 @@ func resolveImage(ssmClient ssmiface.SSMAPI, ec2Client ec2iface.EC2API, name str
|
|||
} else if strings.HasPrefix(name, "ssm:") {
|
||||
parameter := strings.TrimPrefix(name, "ssm:")
|
||||
|
||||
image, err := resolveSSMParameter(ssmClient, parameter)
|
||||
image, err := resolveSSMParameter(ctx, ssmClient, parameter)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -2230,7 +2219,7 @@ func (c *awsCloudImplementation) EventBridge() awsinterfaces.EventBridgeAPI {
|
|||
return c.eventbridge
|
||||
}
|
||||
|
||||
func (c *awsCloudImplementation) SSM() ssmiface.SSMAPI {
|
||||
func (c *awsCloudImplementation) SSM() awsinterfaces.SSMAPI {
|
||||
return c.ssm
|
||||
}
|
||||
|
||||
|
|
|
@ -32,7 +32,6 @@ import (
|
|||
"github.com/aws/aws-sdk-go/service/elbv2/elbv2iface"
|
||||
"github.com/aws/aws-sdk-go/service/iam/iamiface"
|
||||
"github.com/aws/aws-sdk-go/service/route53/route53iface"
|
||||
"github.com/aws/aws-sdk-go/service/ssm/ssmiface"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/dnsprovider/pkg/dnsprovider"
|
||||
|
@ -87,7 +86,7 @@ type MockCloud struct {
|
|||
MockSpotinst spotinst.Cloud
|
||||
MockSQS awsinterfaces.SQSAPI
|
||||
MockEventBridge awsinterfaces.EventBridgeAPI
|
||||
MockSSM ssmiface.SSMAPI
|
||||
MockSSM awsinterfaces.SSMAPI
|
||||
}
|
||||
|
||||
func (c *MockAWSCloud) DeleteGroup(g *cloudinstances.CloudInstanceGroup) error {
|
||||
|
@ -228,7 +227,7 @@ func (c *MockAWSCloud) DescribeVPC(vpcID string) (*ec2.Vpc, error) {
|
|||
}
|
||||
|
||||
func (c *MockAWSCloud) ResolveImage(name string) (*ec2.Image, error) {
|
||||
return resolveImage(c.MockSSM, c.MockEC2, name)
|
||||
return resolveImage(context.TODO(), c.MockSSM, c.MockEC2, name)
|
||||
}
|
||||
|
||||
func (c *MockAWSCloud) WithTags(tags map[string]string) AWSCloud {
|
||||
|
@ -301,7 +300,7 @@ func (c *MockAWSCloud) EventBridge() awsinterfaces.EventBridgeAPI {
|
|||
return c.MockEventBridge
|
||||
}
|
||||
|
||||
func (c *MockAWSCloud) SSM() ssmiface.SSMAPI {
|
||||
func (c *MockAWSCloud) SSM() awsinterfaces.SSMAPI {
|
||||
if c.MockSSM == nil {
|
||||
klog.Fatalf("MockSSM not set")
|
||||
}
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
Copyright 2024 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package awsinterfaces
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/aws/aws-sdk-go-v2/service/ssm"
|
||||
)
|
||||
|
||||
type SSMAPI interface {
|
||||
GetParameter(ctx context.Context, input *ssm.GetParameterInput, optFns ...func(*ssm.Options)) (*ssm.GetParameterOutput, error)
|
||||
}
|
Loading…
Reference in New Issue