From d3fe8498ec2ab817ec1c599e1f709079d4ccc564 Mon Sep 17 00:00:00 2001 From: Richard Owen <1186519+richardowen@users.noreply.github.com> Date: Thu, 22 Jul 2021 09:20:57 +0100 Subject: [PATCH 01/18] Delete dependabot.yml --- .github/dependabot.yml | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 9d24fb90511d..000000000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,31 +0,0 @@ -version: 2 -updates: - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "daily" - - package-ecosystem: "gomod" - directory: "/" - ignore: - - dependency-name: "golang.org/x/tools" - - dependency-name: "google.golang.org/grpc" - schedule: - interval: "daily" - - package-ecosystem: "gomod" - directory: "/awsproviderlint" - ignore: - - dependency-name: "golang.org/x/tools" - - dependency-name: "google.golang.org/grpc" - schedule: - interval: "daily" - - package-ecosystem: "gomod" - directory: "/tools" - ignore: - - dependency-name: "golang.org/x/tools" - - dependency-name: "google.golang.org/grpc" - schedule: - interval: "daily" - - package-ecosystem: "terraform" - directory: "/infrastructure/repository" - schedule: - interval: "daily" From 8218ac8e1b20dba81e9a5dbdd229297a29af46a1 Mon Sep 17 00:00:00 2001 From: FrancescoFucile-CAZ Date: Fri, 23 Jul 2021 15:03:43 +0100 Subject: [PATCH 02/18] Add acceptance test for AWS EventBridge event bus configuration using an ARN as event_bus_name. --- ...resource_aws_cloudwatch_event_rule_test.go | 41 +++++++++++++++++++ docs/MAINTAINING.md | 1 + 2 files changed, 42 insertions(+) diff --git a/aws/resource_aws_cloudwatch_event_rule_test.go b/aws/resource_aws_cloudwatch_event_rule_test.go index 0b78f9ecf45f..89c08586f7c5 100644 --- a/aws/resource_aws_cloudwatch_event_rule_test.go +++ b/aws/resource_aws_cloudwatch_event_rule_test.go @@ -530,6 +530,47 @@ func TestAccAWSCloudWatchEventRule_PartnerEventBus(t *testing.T) { }) } +func TestAccAWSCloudWatchEventRule_EventBusArn(t *testing.T) { + key := "EVENT_BRIDGE_EVENT_BUS_ARN" + busName := os.Getenv(key) + if busName == "" { + t.Skipf("Environment variable %s is not set", key) + } + + var v events.DescribeRuleOutput + rName := acctest.RandomWithPrefix("tf-acc-test-rule") + resourceName := "aws_cloudwatch_event_rule.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + ErrorCheck: testAccErrorCheck(t, cloudwatchevents.EndpointsID), + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSCloudWatchEventRuleDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSCloudWatchEventRulePartnerEventBusConfig(rName, busName), + Check: resource.ComposeTestCheckFunc( + testAccCheckCloudWatchEventRuleExists(resourceName, &v), + testAccMatchResourceAttrRegionalARN(resourceName, "arn", "events", regexp.MustCompile(fmt.Sprintf(`rule/%s/%s$`, busName, rName))), + resource.TestCheckResourceAttr(resourceName, "description", ""), + resource.TestCheckResourceAttr(resourceName, "event_bus_name", busName), + testAccCheckResourceAttrEquivalentJSON(resourceName, "event_pattern", "{\"source\":[\"aws.ec2\"]}"), + resource.TestCheckResourceAttr(resourceName, "is_enabled", "true"), + resource.TestCheckResourceAttr(resourceName, "name", rName), + resource.TestCheckResourceAttr(resourceName, "role_arn", ""), + resource.TestCheckResourceAttr(resourceName, "schedule_expression", ""), + resource.TestCheckResourceAttr(resourceName, "tags.%", "0"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + func testAccCheckCloudWatchEventRuleExists(n string, rule *events.DescribeRuleOutput) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] diff --git a/docs/MAINTAINING.md b/docs/MAINTAINING.md index 8561a4e3ab8c..10c115f9992a 100644 --- a/docs/MAINTAINING.md +++ b/docs/MAINTAINING.md @@ -391,6 +391,7 @@ Environment variables (beyond standard AWS Go SDK ones) used by acceptance testi | `DX_VIRTUAL_INTERFACE_ID` | Identifier for Direct Connect Virtual Interface testing. | | `EC2_SECURITY_GROUP_RULES_PER_GROUP_LIMIT` | EC2 Quota for Rules per Security Group. Defaults to 50. **DEPRECATED:** Can be augmented or replaced with Service Quotas lookup. | | `EVENT_BRIDGE_PARTNER_EVENT_BUS_NAME` | Amazon EventBridge partner event bus name. | +| `EVENT_BRIDGE_EVENT_BUS_ARN` | Amazon EventBridge event bus ARN. | | `EVENT_BRIDGE_PARTNER_EVENT_SOURCE_NAME` | Amazon EventBridge partner event source name. | | `GCM_API_KEY` | API Key for Google Cloud Messaging in Pinpoint and SNS Platform Application testing. | | `GITHUB_TOKEN` | GitHub token for CodePipeline testing. | From 057922a43acb8724cac96c1be3c5fc913344f1f2 Mon Sep 17 00:00:00 2001 From: FrancescoFucile-CAZ Date: Fri, 23 Jul 2021 15:32:30 +0100 Subject: [PATCH 03/18] EventBridge event bus rule, READ operation: update rule ID validation to accept event bus ARN. --- aws/internal/service/cloudwatchevents/id.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/aws/internal/service/cloudwatchevents/id.go b/aws/internal/service/cloudwatchevents/id.go index 7d383458c5a8..4da4fc130d48 100644 --- a/aws/internal/service/cloudwatchevents/id.go +++ b/aws/internal/service/cloudwatchevents/id.go @@ -4,6 +4,8 @@ import ( "fmt" "regexp" "strings" + + awsarn "github.com/aws/aws-sdk-go/aws/arn" ) var ( @@ -54,7 +56,7 @@ func RuleParseID(id string) (string, string, error) { i := strings.LastIndex(id, ruleIDSeparator) busName := id[:i] statementID := id[i+1:] - if partnerEventBusPattern.MatchString(busName) && statementID != "" { + if (partnerEventBusPattern.MatchString(busName) || awsarn.IsARN(busName)) && statementID != "" { return busName, statementID, nil } } From a26f49f2fa7e39bda857a18322daafd301e76c6f Mon Sep 17 00:00:00 2001 From: FrancescoFucile-CAZ Date: Fri, 23 Jul 2021 16:38:25 +0100 Subject: [PATCH 04/18] Fix TestAccAWSCloudWatchEventRule_EventBusArn test. --- aws/resource_aws_cloudwatch_event_rule_test.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/aws/resource_aws_cloudwatch_event_rule_test.go b/aws/resource_aws_cloudwatch_event_rule_test.go index 89c08586f7c5..34c1e200abda 100644 --- a/aws/resource_aws_cloudwatch_event_rule_test.go +++ b/aws/resource_aws_cloudwatch_event_rule_test.go @@ -5,9 +5,11 @@ import ( "log" "os" "regexp" + "strings" "testing" "github.com/aws/aws-sdk-go/aws" + awsarn "github.com/aws/aws-sdk-go/aws/arn" "github.com/aws/aws-sdk-go/service/cloudwatchevents" events "github.com/aws/aws-sdk-go/service/cloudwatchevents" "github.com/hashicorp/go-multierror" @@ -532,10 +534,11 @@ func TestAccAWSCloudWatchEventRule_PartnerEventBus(t *testing.T) { func TestAccAWSCloudWatchEventRule_EventBusArn(t *testing.T) { key := "EVENT_BRIDGE_EVENT_BUS_ARN" - busName := os.Getenv(key) - if busName == "" { - t.Skipf("Environment variable %s is not set", key) + busArn, err := awsarn.Parse(os.Getenv(key)) + if err != nil { + t.Skipf("Environment variable %s is missing or is not a valid ARN", key) } + busName := strings.Replace(busArn.Resource, "event-bus/", "", 1) var v events.DescribeRuleOutput rName := acctest.RandomWithPrefix("tf-acc-test-rule") @@ -548,12 +551,12 @@ func TestAccAWSCloudWatchEventRule_EventBusArn(t *testing.T) { CheckDestroy: testAccCheckAWSCloudWatchEventRuleDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSCloudWatchEventRulePartnerEventBusConfig(rName, busName), + Config: testAccAWSCloudWatchEventRulePartnerEventBusConfig(rName, busArn.String()), Check: resource.ComposeTestCheckFunc( testAccCheckCloudWatchEventRuleExists(resourceName, &v), testAccMatchResourceAttrRegionalARN(resourceName, "arn", "events", regexp.MustCompile(fmt.Sprintf(`rule/%s/%s$`, busName, rName))), resource.TestCheckResourceAttr(resourceName, "description", ""), - resource.TestCheckResourceAttr(resourceName, "event_bus_name", busName), + resource.TestCheckResourceAttr(resourceName, "event_bus_name", busArn.String()), testAccCheckResourceAttrEquivalentJSON(resourceName, "event_pattern", "{\"source\":[\"aws.ec2\"]}"), resource.TestCheckResourceAttr(resourceName, "is_enabled", "true"), resource.TestCheckResourceAttr(resourceName, "name", rName), From eea3ee7643a4c2b8cdeb7399aee250e700af2f04 Mon Sep 17 00:00:00 2001 From: FrancescoFucile-CAZ Date: Fri, 23 Jul 2021 17:10:38 +0100 Subject: [PATCH 05/18] Update READ function for event bus rule to preserve event bus ARNs. --- aws/resource_aws_cloudwatch_event_rule.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/aws/resource_aws_cloudwatch_event_rule.go b/aws/resource_aws_cloudwatch_event_rule.go index 771697ee9ee3..1b4cdaa6b8a7 100644 --- a/aws/resource_aws_cloudwatch_event_rule.go +++ b/aws/resource_aws_cloudwatch_event_rule.go @@ -6,6 +6,7 @@ import ( "time" "github.com/aws/aws-sdk-go/aws" + awsarn "github.com/aws/aws-sdk-go/aws/arn" events "github.com/aws/aws-sdk-go/service/cloudwatchevents" "github.com/hashicorp/aws-sdk-go-base/tfawserr" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -180,7 +181,14 @@ func resourceAwsCloudWatchEventRuleRead(d *schema.ResourceData, meta interface{} d.Set("name_prefix", naming.NamePrefixFromName(aws.StringValue(out.Name))) d.Set("role_arn", out.RoleArn) d.Set("schedule_expression", out.ScheduleExpression) - d.Set("event_bus_name", out.EventBusName) + currentEventBusName := d.Get("event_bus_name").(string) + if awsarn.IsARN(currentEventBusName) { + eventBusArn, _ := awsarn.Parse(currentEventBusName) + eventBusArn.Resource = "event-bus/" + *out.EventBusName + d.Set("event_bus_name", eventBusArn.String()) + } else { + d.Set("event_bus_name", out.EventBusName) + } boolState, err := getBooleanStateFromString(*out.State) if err != nil { From 3c68959dcb76e2ed5834c52c4f953e7117ac73a3 Mon Sep 17 00:00:00 2001 From: FrancescoFucile-CAZ Date: Mon, 26 Jul 2021 14:57:18 +0100 Subject: [PATCH 06/18] Don't import event bus rule on test. --- aws/resource_aws_cloudwatch_event_rule_test.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/aws/resource_aws_cloudwatch_event_rule_test.go b/aws/resource_aws_cloudwatch_event_rule_test.go index 34c1e200abda..897825fe1dab 100644 --- a/aws/resource_aws_cloudwatch_event_rule_test.go +++ b/aws/resource_aws_cloudwatch_event_rule_test.go @@ -565,11 +565,6 @@ func TestAccAWSCloudWatchEventRule_EventBusArn(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "tags.%", "0"), ), }, - { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - }, }, }) } From e4e9f515800f6edec4fdbd80775d073ce6d7e502 Mon Sep 17 00:00:00 2001 From: FrancescoFucile-CAZ Date: Mon, 26 Jul 2021 16:25:11 +0100 Subject: [PATCH 07/18] Reintroduce import tests for event bus rule. --- .../service/cloudwatchevents/finder/finder.go | 12 +++++++++++- aws/resource_aws_cloudwatch_event_rule.go | 10 +--------- aws/resource_aws_cloudwatch_event_rule_test.go | 5 +++++ 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/aws/internal/service/cloudwatchevents/finder/finder.go b/aws/internal/service/cloudwatchevents/finder/finder.go index 408979e14e77..c270732ddb0e 100644 --- a/aws/internal/service/cloudwatchevents/finder/finder.go +++ b/aws/internal/service/cloudwatchevents/finder/finder.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/aws/aws-sdk-go/aws" + awsarn "github.com/aws/aws-sdk-go/aws/arn" events "github.com/aws/aws-sdk-go/service/cloudwatchevents" "github.com/hashicorp/aws-sdk-go-base/tfawserr" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -47,7 +48,16 @@ func Rule(conn *events.CloudWatchEvents, eventBusName, ruleName string) (*events input.EventBusName = aws.String(eventBusName) } - return conn.DescribeRule(&input) + out, err := conn.DescribeRule(&input) + + if err == nil && awsarn.IsARN(eventBusName) { + eventBusArn, _ := awsarn.Parse(eventBusName) + eventBusArn.Resource = "event-bus/" + *out.EventBusName + updatedEventBusArn := eventBusArn.String() + out.EventBusName = &updatedEventBusArn + } + + return out, err } diff --git a/aws/resource_aws_cloudwatch_event_rule.go b/aws/resource_aws_cloudwatch_event_rule.go index 1b4cdaa6b8a7..771697ee9ee3 100644 --- a/aws/resource_aws_cloudwatch_event_rule.go +++ b/aws/resource_aws_cloudwatch_event_rule.go @@ -6,7 +6,6 @@ import ( "time" "github.com/aws/aws-sdk-go/aws" - awsarn "github.com/aws/aws-sdk-go/aws/arn" events "github.com/aws/aws-sdk-go/service/cloudwatchevents" "github.com/hashicorp/aws-sdk-go-base/tfawserr" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -181,14 +180,7 @@ func resourceAwsCloudWatchEventRuleRead(d *schema.ResourceData, meta interface{} d.Set("name_prefix", naming.NamePrefixFromName(aws.StringValue(out.Name))) d.Set("role_arn", out.RoleArn) d.Set("schedule_expression", out.ScheduleExpression) - currentEventBusName := d.Get("event_bus_name").(string) - if awsarn.IsARN(currentEventBusName) { - eventBusArn, _ := awsarn.Parse(currentEventBusName) - eventBusArn.Resource = "event-bus/" + *out.EventBusName - d.Set("event_bus_name", eventBusArn.String()) - } else { - d.Set("event_bus_name", out.EventBusName) - } + d.Set("event_bus_name", out.EventBusName) boolState, err := getBooleanStateFromString(*out.State) if err != nil { diff --git a/aws/resource_aws_cloudwatch_event_rule_test.go b/aws/resource_aws_cloudwatch_event_rule_test.go index 897825fe1dab..34c1e200abda 100644 --- a/aws/resource_aws_cloudwatch_event_rule_test.go +++ b/aws/resource_aws_cloudwatch_event_rule_test.go @@ -565,6 +565,11 @@ func TestAccAWSCloudWatchEventRule_EventBusArn(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "tags.%", "0"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, }, }) } From 7480f549cca5d9788610215af58b5aaa1f9a8ea3 Mon Sep 17 00:00:00 2001 From: FrancescoFucile-CAZ Date: Mon, 26 Jul 2021 18:05:26 +0100 Subject: [PATCH 08/18] Allow for setting event_bus_name as ARN for aws_cloudwatch_event_target. --- aws/internal/service/cloudwatchevents/id.go | 2 +- ...source_aws_cloudwatch_event_target_test.go | 71 +++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/aws/internal/service/cloudwatchevents/id.go b/aws/internal/service/cloudwatchevents/id.go index 4da4fc130d48..5a9d8b2bc723 100644 --- a/aws/internal/service/cloudwatchevents/id.go +++ b/aws/internal/service/cloudwatchevents/id.go @@ -92,7 +92,7 @@ func TargetParseImportID(id string) (string, string, string, error) { iRule := strings.LastIndex(id[:iTarget], targetImportIDSeparator) busName := id[:iRule] ruleName := id[iRule+1 : iTarget] - if partnerEventBusPattern.MatchString(busName) && ruleName != "" && targetID != "" { + if (partnerEventBusPattern.MatchString(busName) || awsarn.IsARN(busName)) && ruleName != "" && targetID != "" { return busName, ruleName, targetID, nil } } diff --git a/aws/resource_aws_cloudwatch_event_target_test.go b/aws/resource_aws_cloudwatch_event_target_test.go index 24c57d411211..051442e7aeb9 100644 --- a/aws/resource_aws_cloudwatch_event_target_test.go +++ b/aws/resource_aws_cloudwatch_event_target_test.go @@ -10,6 +10,7 @@ import ( "testing" "github.com/aws/aws-sdk-go/aws" + awsarn "github.com/aws/aws-sdk-go/aws/arn" events "github.com/aws/aws-sdk-go/service/cloudwatchevents" "github.com/hashicorp/go-multierror" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest" @@ -219,6 +220,45 @@ func TestAccAWSCloudWatchEventTarget_EventBusName(t *testing.T) { }) } +func TestAccAWSCloudWatchEventTarget_EventBusArn(t *testing.T) { + resourceName := "aws_cloudwatch_event_target.test" + key := "EVENT_BRIDGE_EVENT_BUS_ARN" + busArn, err := awsarn.Parse(os.Getenv(key)) + if err != nil { + t.Skipf("Environment variable %s is missing or is not a valid ARN", key) + } + busName := strings.Replace(busArn.Resource, "event-bus/", "", 1) + + var target events.Target + ruleName := acctest.RandomWithPrefix("tf-acc-test-rule") + snsTopicName := acctest.RandomWithPrefix("tf-acc-test-sns") + targetID := acctest.RandomWithPrefix("tf-acc-test-target") + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + ErrorCheck: testAccErrorCheck(t, events.EndpointsID), + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSCloudWatchEventTargetDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSCloudWatchEventTargetConfigEventBusName(ruleName, busName, snsTopicName, targetID), + Check: resource.ComposeTestCheckFunc( + testAccCheckCloudWatchEventTargetExists(resourceName, &target), + resource.TestCheckResourceAttr(resourceName, "rule", ruleName), + resource.TestCheckResourceAttr(resourceName, "event_bus_name", busName), + resource.TestCheckResourceAttr(resourceName, "target_id", targetID), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateIdFunc: testAccAWSCloudWatchEventTargetImportStateIdFunc(resourceName), + ImportStateVerify: true, + }, + }, + }) +} + func TestAccAWSCloudWatchEventTarget_GeneratedTargetId(t *testing.T) { resourceName := "aws_cloudwatch_event_target.test" snsTopicResourceName := "aws_sns_topic.test" @@ -912,6 +952,37 @@ resource "aws_cloudwatch_event_bus" "test" { `, targetID, snsTopicName, ruleName, eventBusName) } +func testAccAWSCloudWatchEventTargetConfigEventBusArn(ruleName, eventBusName, snsTopicName, targetID string) string { + return fmt.Sprintf(` +resource "aws_cloudwatch_event_target" "test" { + rule = aws_cloudwatch_event_rule.test.name + event_bus_name = aws_cloudwatch_event_rule.test.event_bus_name + target_id = %[1]q + arn = aws_sns_topic.test.arn +} + +resource "aws_sns_topic" "test" { + name = %[2]q +} + +resource "aws_cloudwatch_event_rule" "test" { + name = %[3]q + event_bus_name = aws_cloudwatch_event_bus.test.name + event_pattern = < Date: Wed, 28 Jul 2021 13:03:43 +0100 Subject: [PATCH 09/18] Fix EventBusArn event bus target test. --- ...resource_aws_cloudwatch_event_target_test.go | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/aws/resource_aws_cloudwatch_event_target_test.go b/aws/resource_aws_cloudwatch_event_target_test.go index 051442e7aeb9..65146556bb59 100644 --- a/aws/resource_aws_cloudwatch_event_target_test.go +++ b/aws/resource_aws_cloudwatch_event_target_test.go @@ -227,7 +227,6 @@ func TestAccAWSCloudWatchEventTarget_EventBusArn(t *testing.T) { if err != nil { t.Skipf("Environment variable %s is missing or is not a valid ARN", key) } - busName := strings.Replace(busArn.Resource, "event-bus/", "", 1) var target events.Target ruleName := acctest.RandomWithPrefix("tf-acc-test-rule") @@ -241,11 +240,11 @@ func TestAccAWSCloudWatchEventTarget_EventBusArn(t *testing.T) { CheckDestroy: testAccCheckAWSCloudWatchEventTargetDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSCloudWatchEventTargetConfigEventBusName(ruleName, busName, snsTopicName, targetID), + Config: testAccAWSCloudWatchEventTargetConfigEventBusArn(ruleName, busArn.String(), snsTopicName, targetID), Check: resource.ComposeTestCheckFunc( testAccCheckCloudWatchEventTargetExists(resourceName, &target), resource.TestCheckResourceAttr(resourceName, "rule", ruleName), - resource.TestCheckResourceAttr(resourceName, "event_bus_name", busName), + resource.TestCheckResourceAttr(resourceName, "event_bus_name", busArn.String()), resource.TestCheckResourceAttr(resourceName, "target_id", targetID), ), }, @@ -952,11 +951,11 @@ resource "aws_cloudwatch_event_bus" "test" { `, targetID, snsTopicName, ruleName, eventBusName) } -func testAccAWSCloudWatchEventTargetConfigEventBusArn(ruleName, eventBusName, snsTopicName, targetID string) string { +func testAccAWSCloudWatchEventTargetConfigEventBusArn(ruleName, eventBusArn, snsTopicName, targetID string) string { return fmt.Sprintf(` resource "aws_cloudwatch_event_target" "test" { rule = aws_cloudwatch_event_rule.test.name - event_bus_name = aws_cloudwatch_event_rule.test.event_bus_name + event_bus_name = %[4]q target_id = %[1]q arn = aws_sns_topic.test.arn } @@ -967,7 +966,7 @@ resource "aws_sns_topic" "test" { resource "aws_cloudwatch_event_rule" "test" { name = %[3]q - event_bus_name = aws_cloudwatch_event_bus.test.name + event_bus_name = %[4]q event_pattern = < Date: Wed, 28 Jul 2021 14:09:54 +0100 Subject: [PATCH 10/18] Update changelog. --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 506be6c65df9..e1102bb281bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ ENHANCEMENTS: * resource/aws_rds_cluster_instance: Use engine_version and engine_version_actual to set and track engine versions ([#20211](https://github.com/hashicorp/terraform-provider-aws/issues/20211)) * resource/aws_secretsmanager_secret: Add replica support ([#20293](https://github.com/hashicorp/terraform-provider-aws/issues/20293)) * resource/aws_storagegateway_gateway: Add new option for gateway_type, FILE_FSX_SMB, to be used with aws_storagegateway_file_system_association ([#20082](https://github.com/hashicorp/terraform-provider-aws/issues/20082)) +* resource/resource_aws_cloudwatch_event_target: Allow to set event_bus_name as ARN. +* resource/resource_aws_cloudwatch_event_rule: Allow to set event_bus_name as ARN. BUG FIXES: From 434d25e196327b062df2aec7cf670bba4dff9bfc Mon Sep 17 00:00:00 2001 From: FrancescoFucile-CAZ Date: Thu, 29 Jul 2021 11:40:27 +0100 Subject: [PATCH 11/18] Revert "Delete dependabot.yml" This reverts commit d3fe8498ec2ab817ec1c599e1f709079d4ccc564. --- .github/dependabot.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000000..9d24fb90511d --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,31 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + - package-ecosystem: "gomod" + directory: "/" + ignore: + - dependency-name: "golang.org/x/tools" + - dependency-name: "google.golang.org/grpc" + schedule: + interval: "daily" + - package-ecosystem: "gomod" + directory: "/awsproviderlint" + ignore: + - dependency-name: "golang.org/x/tools" + - dependency-name: "google.golang.org/grpc" + schedule: + interval: "daily" + - package-ecosystem: "gomod" + directory: "/tools" + ignore: + - dependency-name: "golang.org/x/tools" + - dependency-name: "google.golang.org/grpc" + schedule: + interval: "daily" + - package-ecosystem: "terraform" + directory: "/infrastructure/repository" + schedule: + interval: "daily" From c9ae082806a73fdc6c0e1a71c464f800f85edb1b Mon Sep 17 00:00:00 2001 From: FrancescoFucile-CAZ Date: Thu, 29 Jul 2021 11:52:53 +0100 Subject: [PATCH 12/18] Add new TF configuration for event bus rule with arn test. --- aws/resource_aws_cloudwatch_event_rule_test.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/aws/resource_aws_cloudwatch_event_rule_test.go b/aws/resource_aws_cloudwatch_event_rule_test.go index 9b092809e77f..7948ad9f0633 100644 --- a/aws/resource_aws_cloudwatch_event_rule_test.go +++ b/aws/resource_aws_cloudwatch_event_rule_test.go @@ -552,7 +552,7 @@ func TestAccAWSCloudWatchEventRule_EventBusArn(t *testing.T) { CheckDestroy: testAccCheckAWSCloudWatchEventRuleDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSCloudWatchEventRulePartnerEventBusConfig(rName, busArn.String()), + Config: testAccAWSCloudWatchEventRulePartnerEventBusArn(rName, busArn.String()), Check: resource.ComposeTestCheckFunc( testAccCheckCloudWatchEventRuleExists(resourceName, &v), testAccMatchResourceAttrRegionalARN(resourceName, "arn", "events", regexp.MustCompile(fmt.Sprintf(`rule/%s/%s$`, busName, rName))), @@ -843,3 +843,18 @@ PATTERN } `, rName, eventBusName) } + +func testAccAWSCloudWatchEventRulePartnerEventBusArn(rName, eventBusName string) string { + return fmt.Sprintf(` +resource "aws_cloudwatch_event_rule" "test" { + name = %[1]q + event_bus_name = %[2]q + + event_pattern = < Date: Thu, 29 Jul 2021 15:58:14 +0100 Subject: [PATCH 13/18] Fix typo on event rule test. --- aws/resource_aws_cloudwatch_event_rule_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws/resource_aws_cloudwatch_event_rule_test.go b/aws/resource_aws_cloudwatch_event_rule_test.go index 7948ad9f0633..e318019affeb 100644 --- a/aws/resource_aws_cloudwatch_event_rule_test.go +++ b/aws/resource_aws_cloudwatch_event_rule_test.go @@ -555,7 +555,7 @@ func TestAccAWSCloudWatchEventRule_EventBusArn(t *testing.T) { Config: testAccAWSCloudWatchEventRulePartnerEventBusArn(rName, busArn.String()), Check: resource.ComposeTestCheckFunc( testAccCheckCloudWatchEventRuleExists(resourceName, &v), - testAccMatchResourceAttrRegionalARN(resourceName, "arn", "events", regexp.MustCompile(fmt.Sprintf(`rule/%s/%s$`, busName, rName))), + testAccMatchResourceAttrRegionalARN(resourceName, "arn", "events", regexp.MustCompile(fmt.Sprintf(`rule/%s/%s`, busName, rName))), resource.TestCheckResourceAttr(resourceName, "description", ""), resource.TestCheckResourceAttr(resourceName, "event_bus_name", busArn.String()), testAccCheckResourceAttrEquivalentJSON(resourceName, "event_pattern", "{\"source\":[\"aws.ec2\"]}"), From 7973c175509cf59e1ea00688c137780da5ac2210 Mon Sep 17 00:00:00 2001 From: FrancescoFucile-CAZ Date: Thu, 29 Jul 2021 17:10:45 +0100 Subject: [PATCH 14/18] Remove event bus rule dependency on AWS_DEFAULT_REGION env var. --- ...resource_aws_cloudwatch_event_rule_test.go | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/aws/resource_aws_cloudwatch_event_rule_test.go b/aws/resource_aws_cloudwatch_event_rule_test.go index e318019affeb..92ff60d5b4fd 100644 --- a/aws/resource_aws_cloudwatch_event_rule_test.go +++ b/aws/resource_aws_cloudwatch_event_rule_test.go @@ -555,7 +555,7 @@ func TestAccAWSCloudWatchEventRule_EventBusArn(t *testing.T) { Config: testAccAWSCloudWatchEventRulePartnerEventBusArn(rName, busArn.String()), Check: resource.ComposeTestCheckFunc( testAccCheckCloudWatchEventRuleExists(resourceName, &v), - testAccMatchResourceAttrRegionalARN(resourceName, "arn", "events", regexp.MustCompile(fmt.Sprintf(`rule/%s/%s`, busName, rName))), + testAccCheckRuleARN(resourceName, "arn", fmt.Sprintf(`rule/%s/%s`, busName, rName), "events", busArn), resource.TestCheckResourceAttr(resourceName, "description", ""), resource.TestCheckResourceAttr(resourceName, "event_bus_name", busArn.String()), testAccCheckResourceAttrEquivalentJSON(resourceName, "event_pattern", "{\"source\":[\"aws.ec2\"]}"), @@ -665,6 +665,26 @@ func testAccAWSCloudWatchEventRuleNoBusNameImportStateIdFunc(resourceName string } } +func testAccCheckRuleARN(resourceName, attributeName, arnResource, arnService string, eventBusARN awsarn.ARN) resource.TestCheckFunc { + return func(s *terraform.State) error { + arnRegexp := awsarn.ARN{ + AccountID: eventBusARN.AccountID, + Partition: eventBusARN.Partition, + Region: eventBusARN.Region, + Resource: arnResource, + Service: arnService, + }.String() + + attributeMatch, err := regexp.Compile(arnRegexp) + + if err != nil { + return fmt.Errorf("Unable to compile ARN regexp (%s): %w", arnRegexp, err) + } + + return resource.TestMatchResourceAttr(resourceName, attributeName, attributeMatch)(s) + } +} + func testAccAWSCloudWatchEventRuleConfig(name string) string { return fmt.Sprintf(` resource "aws_cloudwatch_event_rule" "test" { From 57c882eb82f3c3b2bea727fa80235dc8e25535b3 Mon Sep 17 00:00:00 2001 From: FrancescoFucile-CAZ Date: Fri, 30 Jul 2021 15:51:00 +0100 Subject: [PATCH 15/18] Fix event target test. --- ...source_aws_cloudwatch_event_target_test.go | 64 +++++++++++++------ 1 file changed, 43 insertions(+), 21 deletions(-) diff --git a/aws/resource_aws_cloudwatch_event_target_test.go b/aws/resource_aws_cloudwatch_event_target_test.go index e3ac9aca3983..1c55b3f0c26a 100644 --- a/aws/resource_aws_cloudwatch_event_target_test.go +++ b/aws/resource_aws_cloudwatch_event_target_test.go @@ -10,7 +10,6 @@ import ( "testing" "github.com/aws/aws-sdk-go/aws" - awsarn "github.com/aws/aws-sdk-go/aws/arn" events "github.com/aws/aws-sdk-go/service/cloudwatchevents" "github.com/hashicorp/go-multierror" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest" @@ -222,16 +221,12 @@ func TestAccAWSCloudWatchEventTarget_EventBusName(t *testing.T) { func TestAccAWSCloudWatchEventTarget_EventBusArn(t *testing.T) { resourceName := "aws_cloudwatch_event_target.test" - key := "EVENT_BRIDGE_EVENT_BUS_ARN" - busArn, err := awsarn.Parse(os.Getenv(key)) - if err != nil { - t.Skipf("Environment variable %s is missing or is not a valid ARN", key) - } var target events.Target ruleName := acctest.RandomWithPrefix("tf-acc-test-rule") - snsTopicName := acctest.RandomWithPrefix("tf-acc-test-sns") targetID := acctest.RandomWithPrefix("tf-acc-test-target") + originEventBusName := acctest.RandomWithPrefix("tf-acc-test") + targetEventBusName := acctest.RandomWithPrefix("tf-acc-test") resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -240,11 +235,12 @@ func TestAccAWSCloudWatchEventTarget_EventBusArn(t *testing.T) { CheckDestroy: testAccCheckAWSCloudWatchEventTargetDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSCloudWatchEventTargetConfigEventBusArn(ruleName, busArn.String(), snsTopicName, targetID), + Config: testAccAWSCloudWatchEventTargetConfigEventBusArn(ruleName, originEventBusName, targetID, targetEventBusName, acctest.RandomWithPrefix("tf-acc-test-target"), acctest.RandomWithPrefix("tf-acc-test-target")), Check: resource.ComposeTestCheckFunc( testAccCheckCloudWatchEventTargetExists(resourceName, &target), resource.TestCheckResourceAttr(resourceName, "rule", ruleName), - resource.TestCheckResourceAttr(resourceName, "event_bus_name", busArn.String()), + testAccMatchResourceAttrRegionalARN(resourceName, "arn", "events", regexp.MustCompile(fmt.Sprintf("event-bus/%s", targetEventBusName))), + testAccMatchResourceAttrRegionalARN(resourceName, "event_bus_name", "events", regexp.MustCompile(fmt.Sprintf("event-bus/%s", originEventBusName))), resource.TestCheckResourceAttr(resourceName, "target_id", targetID), ), }, @@ -984,23 +980,30 @@ resource "aws_cloudwatch_event_bus" "test" { `, targetID, snsTopicName, ruleName, eventBusName) } -func testAccAWSCloudWatchEventTargetConfigEventBusArn(ruleName, eventBusArn, snsTopicName, targetID string) string { +func testAccAWSCloudWatchEventTargetConfigEventBusArn(ruleName, originEventBusName, targetID, targetEventBusName, roleName, policyName string) string { return fmt.Sprintf(` -resource "aws_cloudwatch_event_target" "test" { - rule = aws_cloudwatch_event_rule.test.name - event_bus_name = %[4]q - target_id = %[1]q - arn = aws_sns_topic.test.arn +data "aws_partition" "current" {} + +resource "aws_cloudwatch_event_bus" "test_origin_bus" { + name = %[1]q } -resource "aws_sns_topic" "test" { - name = %[2]q +resource "aws_cloudwatch_event_bus" "test_destination_bus" { + name = %[4]q +} + +resource "aws_cloudwatch_event_target" "test" { + rule = aws_cloudwatch_event_rule.test.name + event_bus_name = aws_cloudwatch_event_bus.test_origin_bus.arn + target_id = %[3]q + arn = aws_cloudwatch_event_bus.test_destination_bus.arn + role_arn = aws_iam_role.test.arn } resource "aws_cloudwatch_event_rule" "test" { - name = %[3]q - event_bus_name = %[4]q - event_pattern = < Date: Mon, 2 Aug 2021 16:15:24 +0100 Subject: [PATCH 16/18] Remove reliance on EVENT_BRIDGE_EVENT_BUS_ARN env var. --- ...resource_aws_cloudwatch_event_rule_test.go | 23 ++++++++----------- docs/MAINTAINING.md | 1 - 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/aws/resource_aws_cloudwatch_event_rule_test.go b/aws/resource_aws_cloudwatch_event_rule_test.go index 92ff60d5b4fd..97f548a6e037 100644 --- a/aws/resource_aws_cloudwatch_event_rule_test.go +++ b/aws/resource_aws_cloudwatch_event_rule_test.go @@ -5,7 +5,6 @@ import ( "log" "os" "regexp" - "strings" "testing" "github.com/aws/aws-sdk-go/aws" @@ -534,16 +533,10 @@ func TestAccAWSCloudWatchEventRule_PartnerEventBus(t *testing.T) { } func TestAccAWSCloudWatchEventRule_EventBusArn(t *testing.T) { - key := "EVENT_BRIDGE_EVENT_BUS_ARN" - busArn, err := awsarn.Parse(os.Getenv(key)) - if err != nil { - t.Skipf("Environment variable %s is missing or is not a valid ARN", key) - } - busName := strings.Replace(busArn.Resource, "event-bus/", "", 1) - var v events.DescribeRuleOutput rName := acctest.RandomWithPrefix("tf-acc-test-rule") resourceName := "aws_cloudwatch_event_rule.test" + eventBusName := acctest.RandomWithPrefix("tf-acc-test") resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -552,12 +545,12 @@ func TestAccAWSCloudWatchEventRule_EventBusArn(t *testing.T) { CheckDestroy: testAccCheckAWSCloudWatchEventRuleDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSCloudWatchEventRulePartnerEventBusArn(rName, busArn.String()), + Config: testAccAWSCloudWatchEventRuleEventBusArn(rName, eventBusName), Check: resource.ComposeTestCheckFunc( testAccCheckCloudWatchEventRuleExists(resourceName, &v), - testAccCheckRuleARN(resourceName, "arn", fmt.Sprintf(`rule/%s/%s`, busName, rName), "events", busArn), + testAccMatchResourceAttrRegionalARN(resourceName, "arn", "events", regexp.MustCompile(fmt.Sprintf(`rule/%s/%s$`, eventBusName, rName))), resource.TestCheckResourceAttr(resourceName, "description", ""), - resource.TestCheckResourceAttr(resourceName, "event_bus_name", busArn.String()), + resource.TestCheckResourceAttrPair(resourceName, "event_bus_name", "aws_cloudwatch_event_bus.test", "arn"), testAccCheckResourceAttrEquivalentJSON(resourceName, "event_pattern", "{\"source\":[\"aws.ec2\"]}"), resource.TestCheckResourceAttr(resourceName, "is_enabled", "true"), resource.TestCheckResourceAttr(resourceName, "name", rName), @@ -864,11 +857,15 @@ PATTERN `, rName, eventBusName) } -func testAccAWSCloudWatchEventRulePartnerEventBusArn(rName, eventBusName string) string { +func testAccAWSCloudWatchEventRuleEventBusArn(rName, eventBusName string) string { return fmt.Sprintf(` +resource "aws_cloudwatch_event_bus" "test" { + name = %[2]q +} + resource "aws_cloudwatch_event_rule" "test" { name = %[1]q - event_bus_name = %[2]q + event_bus_name = aws_cloudwatch_event_bus.test.arn event_pattern = < Date: Tue, 3 Aug 2021 11:08:25 +0100 Subject: [PATCH 17/18] Remove unused function. --- ...resource_aws_cloudwatch_event_rule_test.go | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/aws/resource_aws_cloudwatch_event_rule_test.go b/aws/resource_aws_cloudwatch_event_rule_test.go index 97f548a6e037..dc31668f5fd5 100644 --- a/aws/resource_aws_cloudwatch_event_rule_test.go +++ b/aws/resource_aws_cloudwatch_event_rule_test.go @@ -8,7 +8,6 @@ import ( "testing" "github.com/aws/aws-sdk-go/aws" - awsarn "github.com/aws/aws-sdk-go/aws/arn" "github.com/aws/aws-sdk-go/service/cloudwatchevents" events "github.com/aws/aws-sdk-go/service/cloudwatchevents" "github.com/hashicorp/go-multierror" @@ -658,26 +657,6 @@ func testAccAWSCloudWatchEventRuleNoBusNameImportStateIdFunc(resourceName string } } -func testAccCheckRuleARN(resourceName, attributeName, arnResource, arnService string, eventBusARN awsarn.ARN) resource.TestCheckFunc { - return func(s *terraform.State) error { - arnRegexp := awsarn.ARN{ - AccountID: eventBusARN.AccountID, - Partition: eventBusARN.Partition, - Region: eventBusARN.Region, - Resource: arnResource, - Service: arnService, - }.String() - - attributeMatch, err := regexp.Compile(arnRegexp) - - if err != nil { - return fmt.Errorf("Unable to compile ARN regexp (%s): %w", arnRegexp, err) - } - - return resource.TestMatchResourceAttr(resourceName, attributeName, attributeMatch)(s) - } -} - func testAccAWSCloudWatchEventRuleConfig(name string) string { return fmt.Sprintf(` resource "aws_cloudwatch_event_rule" "test" { From d6a005a7a5298b026ce7c1a7e9658b19b6d8030c Mon Sep 17 00:00:00 2001 From: FrancescoFucile-CAZ Date: Wed, 4 Aug 2021 11:45:05 +0100 Subject: [PATCH 18/18] Rename parameters for test function for clarity. --- aws/resource_aws_cloudwatch_event_target_test.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/aws/resource_aws_cloudwatch_event_target_test.go b/aws/resource_aws_cloudwatch_event_target_test.go index 1c55b3f0c26a..a19e8169afae 100644 --- a/aws/resource_aws_cloudwatch_event_target_test.go +++ b/aws/resource_aws_cloudwatch_event_target_test.go @@ -226,7 +226,7 @@ func TestAccAWSCloudWatchEventTarget_EventBusArn(t *testing.T) { ruleName := acctest.RandomWithPrefix("tf-acc-test-rule") targetID := acctest.RandomWithPrefix("tf-acc-test-target") originEventBusName := acctest.RandomWithPrefix("tf-acc-test") - targetEventBusName := acctest.RandomWithPrefix("tf-acc-test") + destinationEventBusName := acctest.RandomWithPrefix("tf-acc-test") resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -235,11 +235,11 @@ func TestAccAWSCloudWatchEventTarget_EventBusArn(t *testing.T) { CheckDestroy: testAccCheckAWSCloudWatchEventTargetDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSCloudWatchEventTargetConfigEventBusArn(ruleName, originEventBusName, targetID, targetEventBusName, acctest.RandomWithPrefix("tf-acc-test-target"), acctest.RandomWithPrefix("tf-acc-test-target")), + Config: testAccAWSCloudWatchEventTargetConfigEventBusArn(ruleName, originEventBusName, targetID, destinationEventBusName, acctest.RandomWithPrefix("tf-acc-test-target"), acctest.RandomWithPrefix("tf-acc-test-target")), Check: resource.ComposeTestCheckFunc( testAccCheckCloudWatchEventTargetExists(resourceName, &target), resource.TestCheckResourceAttr(resourceName, "rule", ruleName), - testAccMatchResourceAttrRegionalARN(resourceName, "arn", "events", regexp.MustCompile(fmt.Sprintf("event-bus/%s", targetEventBusName))), + testAccMatchResourceAttrRegionalARN(resourceName, "arn", "events", regexp.MustCompile(fmt.Sprintf("event-bus/%s", destinationEventBusName))), testAccMatchResourceAttrRegionalARN(resourceName, "event_bus_name", "events", regexp.MustCompile(fmt.Sprintf("event-bus/%s", originEventBusName))), resource.TestCheckResourceAttr(resourceName, "target_id", targetID), ), @@ -980,7 +980,7 @@ resource "aws_cloudwatch_event_bus" "test" { `, targetID, snsTopicName, ruleName, eventBusName) } -func testAccAWSCloudWatchEventTargetConfigEventBusArn(ruleName, originEventBusName, targetID, targetEventBusName, roleName, policyName string) string { +func testAccAWSCloudWatchEventTargetConfigEventBusArn(ruleName, originEventBusName, targetID, destinationEventBusName, roleName, policyName string) string { return fmt.Sprintf(` data "aws_partition" "current" {} @@ -1030,7 +1030,7 @@ resource "aws_iam_role" "test" { } EOF } -`, originEventBusName, ruleName, targetID, targetEventBusName, roleName, policyName) +`, originEventBusName, ruleName, targetID, destinationEventBusName, roleName, policyName) } func testAccAWSCloudWatchEventTargetConfigMissingTargetId(ruleName, snsTopicName string) string {