Update EventBridge to aws-sdk-go-v2

This commit is contained in:
Peter Rifel 2024-03-26 20:23:27 -05:00
parent 263e93c2c5
commit 8191e78838
No known key found for this signature in database
8 changed files with 91 additions and 50 deletions

View File

@ -17,39 +17,41 @@ limitations under the License.
package mockeventbridge
import (
"context"
"sync"
"github.com/aws/aws-sdk-go/service/eventbridge"
"github.com/aws/aws-sdk-go/service/eventbridge/eventbridgeiface"
"github.com/aws/aws-sdk-go-v2/service/eventbridge"
eventbridgetypes "github.com/aws/aws-sdk-go-v2/service/eventbridge/types"
"k8s.io/kops/util/pkg/awsinterfaces"
)
type MockEventBridge struct {
eventbridgeiface.EventBridgeAPI
awsinterfaces.EventBridgeAPI
mutex sync.Mutex
Rules map[string]*eventbridge.Rule
TagsByArn map[string][]*eventbridge.Tag
TargetsByRule map[string][]*eventbridge.Target
Rules map[string]*eventbridgetypes.Rule
TagsByArn map[string][]eventbridgetypes.Tag
TargetsByRule map[string][]eventbridgetypes.Target
}
var _ eventbridgeiface.EventBridgeAPI = &MockEventBridge{}
var _ awsinterfaces.EventBridgeAPI = &MockEventBridge{}
func (m *MockEventBridge) PutRule(input *eventbridge.PutRuleInput) (*eventbridge.PutRuleOutput, error) {
func (m *MockEventBridge) PutRule(ctx context.Context, input *eventbridge.PutRuleInput, optFns ...func(*eventbridge.Options)) (*eventbridge.PutRuleOutput, error) {
m.mutex.Lock()
defer m.mutex.Unlock()
name := *input.Name
arn := "arn:aws-test:events:us-east-1:012345678901:rule/" + name
rule := &eventbridge.Rule{
rule := &eventbridgetypes.Rule{
Arn: &arn,
EventPattern: input.EventPattern,
}
if m.Rules == nil {
m.Rules = make(map[string]*eventbridge.Rule)
m.Rules = make(map[string]*eventbridgetypes.Rule)
}
if m.TagsByArn == nil {
m.TagsByArn = make(map[string][]*eventbridge.Tag)
m.TagsByArn = make(map[string][]eventbridgetypes.Tag)
}
m.Rules[name] = rule
m.TagsByArn[arn] = input.Tags
@ -60,7 +62,7 @@ func (m *MockEventBridge) PutRule(input *eventbridge.PutRuleInput) (*eventbridge
return response, nil
}
func (m *MockEventBridge) ListRules(input *eventbridge.ListRulesInput) (*eventbridge.ListRulesOutput, error) {
func (m *MockEventBridge) ListRules(ctx context.Context, input *eventbridge.ListRulesInput, optFns ...func(*eventbridge.Options)) (*eventbridge.ListRulesOutput, error) {
m.mutex.Lock()
defer m.mutex.Unlock()
@ -70,15 +72,15 @@ func (m *MockEventBridge) ListRules(input *eventbridge.ListRulesInput) (*eventbr
if rule == nil {
return response, nil
}
response.Rules = []*eventbridge.Rule{rule}
response.Rules = []eventbridgetypes.Rule{*rule}
return response, nil
}
func (m *MockEventBridge) DeleteRule(*eventbridge.DeleteRuleInput) (*eventbridge.DeleteRuleOutput, error) {
func (m *MockEventBridge) DeleteRule(ctx context.Context, input *eventbridge.DeleteRuleInput, optFns ...func(*eventbridge.Options)) (*eventbridge.DeleteRuleOutput, error) {
panic("Not implemented")
}
func (m *MockEventBridge) ListTagsForResource(input *eventbridge.ListTagsForResourceInput) (*eventbridge.ListTagsForResourceOutput, error) {
func (m *MockEventBridge) ListTagsForResource(ctx context.Context, input *eventbridge.ListTagsForResourceInput, optFns ...func(*eventbridge.Options)) (*eventbridge.ListTagsForResourceOutput, error) {
m.mutex.Lock()
defer m.mutex.Unlock()
@ -88,19 +90,19 @@ func (m *MockEventBridge) ListTagsForResource(input *eventbridge.ListTagsForReso
return response, nil
}
func (m *MockEventBridge) PutTargets(input *eventbridge.PutTargetsInput) (*eventbridge.PutTargetsOutput, error) {
func (m *MockEventBridge) PutTargets(ctx context.Context, input *eventbridge.PutTargetsInput, optFns ...func(*eventbridge.Options)) (*eventbridge.PutTargetsOutput, error) {
m.mutex.Lock()
defer m.mutex.Unlock()
if m.TargetsByRule == nil {
m.TargetsByRule = make(map[string][]*eventbridge.Target)
m.TargetsByRule = make(map[string][]eventbridgetypes.Target)
}
m.TargetsByRule[*input.Rule] = input.Targets
return &eventbridge.PutTargetsOutput{}, nil
}
func (m *MockEventBridge) ListTargetsByRule(input *eventbridge.ListTargetsByRuleInput) (*eventbridge.ListTargetsByRuleOutput, error) {
func (m *MockEventBridge) ListTargetsByRule(ctx context.Context, input *eventbridge.ListTargetsByRuleInput, optFns ...func(*eventbridge.Options)) (*eventbridge.ListTargetsByRuleOutput, error) {
m.mutex.Lock()
defer m.mutex.Unlock()
@ -110,6 +112,6 @@ func (m *MockEventBridge) ListTargetsByRule(input *eventbridge.ListTargetsByRule
return response, nil
}
func (m *MockEventBridge) RemoveTargets(*eventbridge.RemoveTargetsInput) (*eventbridge.RemoveTargetsOutput, error) {
func (m *MockEventBridge) RemoveTargets(ctx context.Context, input *eventbridge.RemoveTargetsInput, optFns ...func(*eventbridge.Options)) (*eventbridge.RemoveTargetsOutput, error) {
panic("Not implemented")
}

View File

@ -19,9 +19,9 @@ package awsmodel
import (
"fmt"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/aws/arn"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/eventbridge"
"github.com/aws/aws-sdk-go-v2/service/eventbridge"
"k8s.io/kops/pkg/apis/kops"
"k8s.io/kops/pkg/model"
"k8s.io/kops/pkg/model/iam"
@ -200,7 +200,7 @@ func (b *NodeTerminationHandlerBuilder) FindDeletions(c *fi.CloudupModelBuilderC
request := &eventbridge.ListRulesInput{
NamePrefix: ruleName,
}
response, err := eventBridge.ListRules(request)
response, err := eventBridge.ListRules(c.Context(), request)
if err != nil {
return fmt.Errorf("listing EventBridge rules: %w", err)
}
@ -213,7 +213,7 @@ func (b *NodeTerminationHandlerBuilder) FindDeletions(c *fi.CloudupModelBuilderC
rule := response.Rules[0]
tagResponse, err := eventBridge.ListTagsForResource(&eventbridge.ListTagsForResourceInput{ResourceARN: rule.Arn})
tagResponse, err := eventBridge.ListTagsForResource(c.Context(), &eventbridge.ListTagsForResourceInput{ResourceARN: rule.Arn})
if err != nil {
return fmt.Errorf("listing tags for EventBridge rule: %w", err)
}

View File

@ -17,10 +17,11 @@ limitations under the License.
package aws
import (
"context"
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/eventbridge"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/eventbridge"
"k8s.io/klog/v2"
"k8s.io/kops/pkg/resources"
@ -44,22 +45,22 @@ func EventBridgeRuleDeleter(cloud fi.Cloud, r *resources.Resource) error {
}
func DeleteEventBridgeRule(cloud fi.Cloud, ruleName string) error {
ctx := context.TODO()
c := cloud.(awsup.AWSCloud)
targets, err := c.EventBridge().ListTargetsByRule(&eventbridge.ListTargetsByRuleInput{
targets, err := c.EventBridge().ListTargetsByRule(ctx, &eventbridge.ListTargetsByRuleInput{
Rule: aws.String(ruleName),
})
if err != nil {
return fmt.Errorf("listing targets for EventBridge rule %q: %w", ruleName, err)
}
if len(targets.Targets) > 0 {
var ids []*string
var ids []string
for _, target := range targets.Targets {
ids = append(ids, target.Id)
ids = append(ids, aws.ToString(target.Id))
}
klog.V(2).Infof("Removing EventBridge Targets for rule %q", ruleName)
_, err = c.EventBridge().RemoveTargets(&eventbridge.RemoveTargetsInput{
_, err = c.EventBridge().RemoveTargets(ctx, &eventbridge.RemoveTargetsInput{
Ids: ids,
Rule: aws.String(ruleName),
})
@ -72,7 +73,7 @@ func DeleteEventBridgeRule(cloud fi.Cloud, ruleName string) error {
request := &eventbridge.DeleteRuleInput{
Name: aws.String(ruleName),
}
_, err = c.EventBridge().DeleteRule(request)
_, err = c.EventBridge().DeleteRule(ctx, request)
if err != nil {
return fmt.Errorf("deleting EventBridge rule %q: %w", ruleName, err)
}
@ -80,6 +81,7 @@ func DeleteEventBridgeRule(cloud fi.Cloud, ruleName string) error {
}
func ListEventBridgeRules(cloud fi.Cloud, vpcID, clusterName string) ([]*resources.Resource, error) {
ctx := context.TODO()
c := cloud.(awsup.AWSCloud)
klog.V(2).Infof("Listing EventBridge rules")
@ -91,7 +93,7 @@ func ListEventBridgeRules(cloud fi.Cloud, vpcID, clusterName string) ([]*resourc
Limit: nil,
NamePrefix: aws.String(clusterNamePrefix),
}
response, err := c.EventBridge().ListRules(request)
response, err := c.EventBridge().ListRules(ctx, request)
if err != nil {
return nil, fmt.Errorf("error listing Eventbridge rules: %v", err)
}

View File

@ -17,10 +17,12 @@ limitations under the License.
package awstasks
import (
"context"
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/eventbridge"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/eventbridge"
eventbridgetypes "github.com/aws/aws-sdk-go-v2/service/eventbridge/types"
"k8s.io/apimachinery/pkg/util/validation/field"
awsResources "k8s.io/kops/pkg/resources/aws"
"k8s.io/kops/upup/pkg/fi"
@ -57,7 +59,7 @@ func (eb *EventBridgeRule) Find(c *fi.CloudupContext) (*EventBridgeRule, error)
request := &eventbridge.ListRulesInput{
NamePrefix: eb.Name,
}
response, err := cloud.EventBridge().ListRules(request)
response, err := cloud.EventBridge().ListRules(c.Context(), request)
if err != nil {
return nil, fmt.Errorf("error listing EventBridge rules: %v", err)
}
@ -70,7 +72,7 @@ func (eb *EventBridgeRule) Find(c *fi.CloudupContext) (*EventBridgeRule, error)
rule := response.Rules[0]
tagResponse, err := cloud.EventBridge().ListTagsForResource(&eventbridge.ListTagsForResourceInput{ResourceARN: rule.Arn})
tagResponse, err := cloud.EventBridge().ListTagsForResource(c.Context(), &eventbridge.ListTagsForResourceInput{ResourceARN: rule.Arn})
if err != nil {
return nil, fmt.Errorf("error listing tags for EventBridge rule: %v", err)
}
@ -106,9 +108,9 @@ func (eb *EventBridgeRule) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Event
}
if a == nil {
var tags []*eventbridge.Tag
var tags []eventbridgetypes.Tag
for k, v := range eb.Tags {
tags = append(tags, &eventbridge.Tag{
tags = append(tags, eventbridgetypes.Tag{
Key: aws.String(k),
Value: aws.String(v),
})
@ -120,7 +122,7 @@ func (eb *EventBridgeRule) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Event
Tags: tags,
}
_, err := t.Cloud.EventBridge().PutRule(request)
_, err := t.Cloud.EventBridge().PutRule(context.TODO(), request)
if err != nil {
return fmt.Errorf("error creating EventBridge rule: %v", err)
}

View File

@ -17,13 +17,15 @@ limitations under the License.
package awstasks
import (
"context"
"fmt"
"k8s.io/apimachinery/pkg/util/validation/field"
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/eventbridge"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/eventbridge"
eventbridgetypes "github.com/aws/aws-sdk-go-v2/service/eventbridge/types"
"k8s.io/kops/upup/pkg/fi"
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
@ -65,7 +67,7 @@ func (eb *EventBridgeTarget) Find(c *fi.CloudupContext) (*EventBridgeTarget, err
Rule: eb.Rule.Name,
}
response, err := cloud.EventBridge().ListTargetsByRule(request)
response, err := cloud.EventBridge().ListTargetsByRule(c.Context(), request)
if err != nil {
return nil, fmt.Errorf("error listing EventBridge targets: %v", err)
}
@ -107,17 +109,17 @@ func (_ *EventBridgeTarget) CheckChanges(a, e, changes *EventBridgeTarget) error
func (eb *EventBridgeTarget) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *EventBridgeTarget) error {
if a == nil {
target := &eventbridge.Target{
target := eventbridgetypes.Target{
Arn: eb.SQSQueue.ARN,
Id: aws.String("1"),
}
request := &eventbridge.PutTargetsInput{
Rule: eb.Rule.Name,
Targets: []*eventbridge.Target{target},
Targets: []eventbridgetypes.Target{target},
}
_, err := t.Cloud.EventBridge().PutTargets(request)
_, err := t.Cloud.EventBridge().PutTargets(context.TODO(), request)
if err != nil {
return fmt.Errorf("error creating EventBridge target: %v", err)
}

View File

@ -19,9 +19,9 @@ package awstasks
import (
"strings"
eventbridgetypes "github.com/aws/aws-sdk-go-v2/service/eventbridge/types"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/ec2"
"github.com/aws/aws-sdk-go/service/eventbridge"
"github.com/aws/aws-sdk-go/service/iam"
)
@ -67,7 +67,7 @@ func mapToIAMTags(tags map[string]string) []*iam.Tag {
return m
}
func mapEventBridgeTagsToMap(tags []*eventbridge.Tag) map[string]string {
func mapEventBridgeTagsToMap(tags []eventbridgetypes.Tag) map[string]string {
if tags == nil {
return nil
}

View File

@ -30,7 +30,6 @@ import (
"github.com/aws/aws-sdk-go/service/elb/elbiface"
"github.com/aws/aws-sdk-go/service/elbv2"
"github.com/aws/aws-sdk-go/service/elbv2/elbv2iface"
"github.com/aws/aws-sdk-go/service/eventbridge/eventbridgeiface"
"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/sqs/sqsiface"
@ -43,6 +42,7 @@ import (
"k8s.io/kops/pkg/cloudinstances"
"k8s.io/kops/pkg/resources/spotinst"
"k8s.io/kops/upup/pkg/fi"
"k8s.io/kops/util/pkg/awsinterfaces"
)
type MockAWSCloud struct {
@ -87,7 +87,7 @@ type MockCloud struct {
MockELBV2 elbv2iface.ELBV2API
MockSpotinst spotinst.Cloud
MockSQS sqsiface.SQSAPI
MockEventBridge eventbridgeiface.EventBridgeAPI
MockEventBridge awsinterfaces.EventBridgeAPI
MockSSM ssmiface.SSMAPI
}
@ -295,7 +295,7 @@ func (c *MockAWSCloud) SQS() sqsiface.SQSAPI {
return c.MockSQS
}
func (c *MockAWSCloud) EventBridge() eventbridgeiface.EventBridgeAPI {
func (c *MockAWSCloud) EventBridge() awsinterfaces.EventBridgeAPI {
if c.MockEventBridge == nil {
klog.Fatalf("MockEventBridgess not set")
}

View File

@ -0,0 +1,33 @@
/*
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/eventbridge"
)
type EventBridgeAPI interface {
ListTargetsByRule(ctx context.Context, params *eventbridge.ListTargetsByRuleInput, optFns ...func(*eventbridge.Options)) (*eventbridge.ListTargetsByRuleOutput, error)
PutTargets(ctx context.Context, params *eventbridge.PutTargetsInput, optFns ...func(*eventbridge.Options)) (*eventbridge.PutTargetsOutput, error)
ListRules(ctx context.Context, params *eventbridge.ListRulesInput, optFns ...func(*eventbridge.Options)) (*eventbridge.ListRulesOutput, error)
PutRule(ctx context.Context, params *eventbridge.PutRuleInput, optFns ...func(*eventbridge.Options)) (*eventbridge.PutRuleOutput, error)
ListTagsForResource(ctx context.Context, params *eventbridge.ListTagsForResourceInput, optFns ...func(*eventbridge.Options)) (*eventbridge.ListTagsForResourceOutput, error)
DeleteRule(ctx context.Context, params *eventbridge.DeleteRuleInput, optFns ...func(*eventbridge.Options)) (*eventbridge.DeleteRuleOutput, error)
RemoveTargets(ctx context.Context, params *eventbridge.RemoveTargetsInput, optFns ...func(*eventbridge.Options)) (*eventbridge.RemoveTargetsOutput, error)
}