From 05b57cfce9b88b28c3d2927a4d8abf950b9a2842 Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Thu, 6 Jun 2024 17:23:43 +0100 Subject: [PATCH 01/19] Add default IGW resource --- .../ec2/vpc_default_internet_gateway.go | 143 ++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 internal/service/ec2/vpc_default_internet_gateway.go diff --git a/internal/service/ec2/vpc_default_internet_gateway.go b/internal/service/ec2/vpc_default_internet_gateway.go new file mode 100644 index 000000000000..975d07d60b1d --- /dev/null +++ b/internal/service/ec2/vpc_default_internet_gateway.go @@ -0,0 +1,143 @@ +package ec2 + +import ( + "context" + "log" + "time" + + ec2v2 "github.com/aws/aws-sdk-go-v2/service/ec2" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/ec2" + "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" + tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" + "github.com/hashicorp/terraform-provider-aws/internal/verify" + "github.com/hashicorp/terraform-provider-aws/names" +) + +// @SDKResource("aws_default_internet_gateway", name="Internet Gateway") +// @Tags(identifierAttribute="id") +// @Testing(tagsTest=false) +func ResourceDefaultInternetGateway() *schema.Resource { + return &schema.Resource{ + CreateWithoutTimeout: resourceDefaultInternetGatewayCreate, + ReadWithoutTimeout: resourceInternetGatewayRead, + UpdateWithoutTimeout: resourceInternetGatewayUpdate, + DeleteWithoutTimeout: resourceDefaultInternetGatewayDelete, + + Timeouts: &schema.ResourceTimeout{ + Create: schema.DefaultTimeout(20 * time.Minute), + Update: schema.DefaultTimeout(20 * time.Minute), + Delete: schema.DefaultTimeout(20 * time.Minute), + }, + + Importer: &schema.ResourceImporter{ + StateContext: schema.ImportStatePassthroughContext, + }, + + Schema: map[string]*schema.Schema{ + names.AttrARN: { + Type: schema.TypeString, + Computed: true, + }, + names.AttrOwnerID: { + Type: schema.TypeString, + Computed: true, + }, + names.AttrTags: tftags.TagsSchema(), + names.AttrTagsAll: tftags.TagsSchemaComputed(), + names.AttrVPCID: { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "existing_default_internet_gateway": { + Type: schema.TypeBool, + Computed: true, + }, + names.AttrForceDestroy: { + Type: schema.TypeBool, + Optional: true, + Default: false, + }, + }, + + CustomizeDiff: verify.SetTagsDiff, + } +} +func resourceDefaultInternetGatewayCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + var diags diag.Diagnostics + conn := meta.(*conns.AWSClient).EC2Conn(ctx) + + input := &ec2.CreateInternetGatewayInput{ + TagSpecifications: getTagSpecificationsIn(ctx, ec2.ResourceTypeInternetGateway), + } + + log.Printf("[DEBUG] Creating EC2 Internet Gateway: %s", input) + output, err := conn.CreateInternetGatewayWithContext(ctx, input) + + if err != nil { + return sdkdiag.AppendErrorf(diags, "creating EC2 Internet Gateway: %s", err) + } + + d.SetId(aws.StringValue(output.InternetGateway.InternetGatewayId)) + + if v, ok := d.GetOk(names.AttrVPCID); ok { + if err := attachInternetGateway(ctx, conn, d.Id(), v.(string), d.Timeout(schema.TimeoutCreate)); err != nil { + return sdkdiag.AppendErrorf(diags, "creating EC2 Internet Gateway: %s", err) + } + } + + return append(diags, resourceInternetGatewayRead(ctx, d, meta)...) +} + +func resourceDefaultInternetGatewayDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + var diags diag.Diagnostics + if d.Get(names.AttrForceDestroy).(bool) { + + // See if the VPC assigned to the IGW has the isDefault property + ec2Client := meta.(*conns.AWSClient).EC2Client(ctx) + input := &ec2v2.DescribeVpcsInput{ + Filters: newAttributeFilterListV2( + map[string]string{ + "isDefault": "true", + }, + ), + } + _, err := findVPCV2(ctx, ec2Client, input) + + conn := meta.(*conns.AWSClient).EC2Conn(ctx) + + if err == nil { + // Detach if it is attached. + if v, ok := d.GetOk(names.AttrVPCID); ok { + if err := detachInternetGateway(ctx, conn, d.Id(), v.(string), d.Timeout(schema.TimeoutDelete)); err != nil { + return sdkdiag.AppendErrorf(diags, "deleting EC2 Internet Gateway (%s): %s", d.Id(), err) + } + + input := &ec2.DeleteInternetGatewayInput{ + InternetGatewayId: aws.String(d.Id()), + } + + log.Printf("[INFO] Deleting Internet Gateway: %s", d.Id()) + _, err := tfresource.RetryWhenAWSErrCodeEquals(ctx, d.Timeout(schema.TimeoutDelete), func() (interface{}, error) { + return conn.DeleteInternetGatewayWithContext(ctx, input) + }, errCodeDependencyViolation) + + if tfawserr.ErrCodeEquals(err, errCodeInvalidInternetGatewayIDNotFound) { + return diags + } + + if err != nil { + return sdkdiag.AppendErrorf(diags, "deleting EC2 Internet Gateway (%s): %s", d.Id(), err) + } + } + } + } + log.Printf("[INFO] Skipping Internet Gateway: %s", d.Id()) + return diags +} From 1b1daaa94de2632b020640bcbeea968301fdc709 Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Thu, 6 Jun 2024 18:00:32 +0100 Subject: [PATCH 02/19] Fix the create branch of the code too --- .../ec2/vpc_default_internet_gateway.go | 53 ++++++++++++++----- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/internal/service/ec2/vpc_default_internet_gateway.go b/internal/service/ec2/vpc_default_internet_gateway.go index 975d07d60b1d..b0ace181eb74 100644 --- a/internal/service/ec2/vpc_default_internet_gateway.go +++ b/internal/service/ec2/vpc_default_internet_gateway.go @@ -71,27 +71,53 @@ func ResourceDefaultInternetGateway() *schema.Resource { } func resourceDefaultInternetGatewayCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).EC2Conn(ctx) - input := &ec2.CreateInternetGatewayInput{ - TagSpecifications: getTagSpecificationsIn(ctx, ec2.ResourceTypeInternetGateway), + // Check if there is a default VPC + ec2Client := meta.(*conns.AWSClient).EC2Client(ctx) + + input := &ec2v2.DescribeVpcsInput{ + Filters: newAttributeFilterListV2( + map[string]string{ + "isDefault": "true", + }, + ), } + _, err := findVPCV2(ctx, ec2Client, input) - log.Printf("[DEBUG] Creating EC2 Internet Gateway: %s", input) - output, err := conn.CreateInternetGatewayWithContext(ctx, input) + if err == nil { + // Check if there is an IGW assigned to the default VPC + input := &ec2.DescribeInternetGatewaysInput{} + input.Filters = newAttributeFilterList(map[string]string{ + "attachment.vpc-id": d.Get(names.AttrVPCID).(string), + }) - if err != nil { - return sdkdiag.AppendErrorf(diags, "creating EC2 Internet Gateway: %s", err) - } + conn := meta.(*conns.AWSClient).EC2Conn(ctx) + + _, err := FindInternetGateway(ctx, conn, input) + + // Attached IGW not found, so we create one + if err != nil { + + input := &ec2.CreateInternetGatewayInput{ + TagSpecifications: getTagSpecificationsIn(ctx, ec2.ResourceTypeInternetGateway), + } - d.SetId(aws.StringValue(output.InternetGateway.InternetGatewayId)) + log.Printf("[DEBUG] Creating EC2 Internet Gateway: %s", input) + output, err := conn.CreateInternetGatewayWithContext(ctx, input) - if v, ok := d.GetOk(names.AttrVPCID); ok { - if err := attachInternetGateway(ctx, conn, d.Id(), v.(string), d.Timeout(schema.TimeoutCreate)); err != nil { - return sdkdiag.AppendErrorf(diags, "creating EC2 Internet Gateway: %s", err) + if err != nil { + return sdkdiag.AppendErrorf(diags, "creating EC2 Internet Gateway: %s", err) + } + + d.SetId(aws.StringValue(output.InternetGateway.InternetGatewayId)) + + if v, ok := d.GetOk(names.AttrVPCID); ok { + if err := attachInternetGateway(ctx, conn, d.Id(), v.(string), d.Timeout(schema.TimeoutCreate)); err != nil { + return sdkdiag.AppendErrorf(diags, "creating EC2 Internet Gateway: %s", err) + } + } } } - return append(diags, resourceInternetGatewayRead(ctx, d, meta)...) } @@ -105,6 +131,7 @@ func resourceDefaultInternetGatewayDelete(ctx context.Context, d *schema.Resourc Filters: newAttributeFilterListV2( map[string]string{ "isDefault": "true", + "vpc-id": d.Get(names.AttrVPCID).(string), }, ), } From dac94326d4f89743c5dc4bba8fd39d69281fa78c Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Fri, 7 Jun 2024 11:56:43 +0100 Subject: [PATCH 03/19] Add test for vpc_default_internet_gateway --- .../ec2/vpc_default_internet_gateway_test.go | 289 ++++++++++++++++++ .../service/ec2/vpc_internet_gateway_test.go | 42 +-- 2 files changed, 310 insertions(+), 21 deletions(-) create mode 100644 internal/service/ec2/vpc_default_internet_gateway_test.go diff --git a/internal/service/ec2/vpc_default_internet_gateway_test.go b/internal/service/ec2/vpc_default_internet_gateway_test.go new file mode 100644 index 000000000000..289f5159fdd9 --- /dev/null +++ b/internal/service/ec2/vpc_default_internet_gateway_test.go @@ -0,0 +1,289 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package ec2_test + +import ( + "context" + "fmt" + "testing" + + "github.com/YakDriver/regexache" + "github.com/aws/aws-sdk-go/service/ec2" + sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/terraform" + "github.com/hashicorp/terraform-provider-aws/internal/acctest" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + tfec2 "github.com/hashicorp/terraform-provider-aws/internal/service/ec2" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" + "github.com/hashicorp/terraform-provider-aws/names" +) + +func TestAccVPCInternetGateway_basic(t *testing.T) { + ctx := acctest.Context(t) + var v ec2.InternetGateway + resourceName := "aws_internet_gateway.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckInternetGatewayDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccVPCInternetGatewayConfig_basic, + Check: resource.ComposeTestCheckFunc( + testAccCheckInternetGatewayExists(ctx, resourceName, &v), + acctest.MatchResourceAttrRegionalARN(resourceName, names.AttrARN, "ec2", regexache.MustCompile(`internet-gateway/igw-.+`)), + acctest.CheckResourceAttrAccountID(resourceName, names.AttrOwnerID), + resource.TestCheckResourceAttr(resourceName, acctest.CtTagsPercent, acctest.Ct0), + resource.TestCheckResourceAttr(resourceName, names.AttrVPCID, ""), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func TestAccVPCInternetGateway_disappears(t *testing.T) { + ctx := acctest.Context(t) + var v ec2.InternetGateway + resourceName := "aws_internet_gateway.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckInternetGatewayDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccVPCInternetGatewayConfig_basic, + Check: resource.ComposeTestCheckFunc( + testAccCheckInternetGatewayExists(ctx, resourceName, &v), + acctest.CheckResourceDisappears(ctx, acctest.Provider, tfec2.ResourceInternetGateway(), resourceName), + ), + ExpectNonEmptyPlan: true, + }, + }, + }) +} + +func TestAccVPCInternetGateway_Attachment(t *testing.T) { + ctx := acctest.Context(t) + var v ec2.InternetGateway + resourceName := "aws_internet_gateway.test" + vpc1ResourceName := "aws_vpc.test1" + vpc2ResourceName := "aws_vpc.test2" + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckInternetGatewayDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccVPCInternetGatewayConfig_attachment(rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckInternetGatewayExists(ctx, resourceName, &v), + resource.TestCheckResourceAttrPair(resourceName, names.AttrVPCID, vpc1ResourceName, names.AttrID), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + { + Config: testAccVPCInternetGatewayConfig_attachmentUpdated(rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckInternetGatewayExists(ctx, resourceName, &v), + resource.TestCheckResourceAttrPair(resourceName, names.AttrVPCID, vpc2ResourceName, names.AttrID), + ), + }, + }, + }) +} + +func TestAccVPCInternetGateway_Tags(t *testing.T) { + ctx := acctest.Context(t) + var v ec2.InternetGateway + resourceName := "aws_internet_gateway.test" + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckInternetGatewayDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccVPCInternetGatewayConfig_tags1(rName, acctest.CtKey1, acctest.CtValue1), + Check: resource.ComposeTestCheckFunc( + testAccCheckInternetGatewayExists(ctx, resourceName, &v), + resource.TestCheckResourceAttr(resourceName, acctest.CtTagsPercent, acctest.Ct1), + resource.TestCheckResourceAttr(resourceName, acctest.CtTagsKey1, acctest.CtValue1), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + { + Config: testAccVPCInternetGatewayConfig_tags2(rName, acctest.CtKey1, acctest.CtValue1Updated, acctest.CtKey2, acctest.CtValue2), + Check: resource.ComposeTestCheckFunc( + testAccCheckInternetGatewayExists(ctx, resourceName, &v), + resource.TestCheckResourceAttr(resourceName, acctest.CtTagsPercent, acctest.Ct2), + resource.TestCheckResourceAttr(resourceName, acctest.CtTagsKey1, acctest.CtValue1Updated), + resource.TestCheckResourceAttr(resourceName, acctest.CtTagsKey2, acctest.CtValue2), + ), + }, + { + Config: testAccVPCInternetGatewayConfig_tags1(rName, acctest.CtKey2, acctest.CtValue2), + Check: resource.ComposeTestCheckFunc( + testAccCheckInternetGatewayExists(ctx, resourceName, &v), + resource.TestCheckResourceAttr(resourceName, acctest.CtTagsPercent, acctest.Ct1), + resource.TestCheckResourceAttr(resourceName, acctest.CtTagsKey2, acctest.CtValue2), + ), + }, + }, + }) +} + +func testAccCheckInternetGatewayDestroy(ctx context.Context) resource.TestCheckFunc { + return func(s *terraform.State) error { + conn := acctest.Provider.Meta().(*conns.AWSClient).EC2Conn(ctx) + + for _, rs := range s.RootModule().Resources { + if rs.Type != "aws_internet_gateway" { + continue + } + + _, err := tfec2.FindInternetGatewayByID(ctx, conn, rs.Primary.ID) + + if tfresource.NotFound(err) { + continue + } + + if err != nil { + return err + } + + return fmt.Errorf("EC2 Internet Gateway %s still exists", rs.Primary.ID) + } + + return nil + } +} + +func testAccCheckInternetGatewayExists(ctx context.Context, n string, v *ec2.InternetGateway) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("Not found: %s", n) + } + + if rs.Primary.ID == "" { + return fmt.Errorf("No EC2 Internet Gateway ID is set") + } + + conn := acctest.Provider.Meta().(*conns.AWSClient).EC2Conn(ctx) + + output, err := tfec2.FindInternetGatewayByID(ctx, conn, rs.Primary.ID) + + if err != nil { + return err + } + + *v = *output + + return nil + } +} + +const testAccVPCInternetGatewayConfig_basic = ` +resource "aws_internet_gateway" "test" {} +` + +func testAccVPCInternetGatewayConfig_attachment(rName string) string { + return fmt.Sprintf(` +resource "aws_vpc" "test1" { + cidr_block = "10.1.0.0/16" + + tags = { + Name = "%[1]s-1" + } +} + +resource "aws_vpc" "test2" { + cidr_block = "10.2.0.0/16" + + tags = { + Name = "%[1]s-2" + } +} + +resource "aws_internet_gateway" "test" { + vpc_id = aws_vpc.test1.id + + tags = { + Name = %[1]q + } +} +`, rName) +} + +func testAccVPCInternetGatewayConfig_attachmentUpdated(rName string) string { + return fmt.Sprintf(` +resource "aws_vpc" "test1" { + cidr_block = "10.1.0.0/16" + + tags = { + Name = "%[1]s-1" + } +} + +resource "aws_vpc" "test2" { + cidr_block = "10.2.0.0/16" + + tags = { + Name = "%[1]s-2" + } +} + +resource "aws_internet_gateway" "test" { + vpc_id = aws_vpc.test2.id + + tags = { + Name = %[1]q + } +} +`, rName) +} + +func testAccVPCInternetGatewayConfig_tags1(rName, tagKey1, tagValue1 string) string { + return fmt.Sprintf(` +resource "aws_internet_gateway" "test" { + tags = { + %[2]q = %[3]q + } +} +`, rName, tagKey1, tagValue1) +} + +func testAccVPCInternetGatewayConfig_tags2(rName, tagKey1, tagValue1, tagKey2, tagValue2 string) string { + return fmt.Sprintf(` +resource "aws_internet_gateway" "test" { + tags = { + %[2]q = %[3]q + %[4]q = %[5]q + } +} +`, rName, tagKey1, tagValue1, tagKey2, tagValue2) +} diff --git a/internal/service/ec2/vpc_internet_gateway_test.go b/internal/service/ec2/vpc_internet_gateway_test.go index 289f5159fdd9..4ec09f8d7440 100644 --- a/internal/service/ec2/vpc_internet_gateway_test.go +++ b/internal/service/ec2/vpc_internet_gateway_test.go @@ -20,10 +20,10 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -func TestAccVPCInternetGateway_basic(t *testing.T) { +func TestAccVPCDefaultInternetGateway_basic(t *testing.T) { ctx := acctest.Context(t) var v ec2.InternetGateway - resourceName := "aws_internet_gateway.test" + resourceName := "aws_default_internet_gateway.test" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) }, @@ -50,10 +50,10 @@ func TestAccVPCInternetGateway_basic(t *testing.T) { }) } -func TestAccVPCInternetGateway_disappears(t *testing.T) { +func TestAccVPCDefaultInternetGateway_disappears(t *testing.T) { ctx := acctest.Context(t) var v ec2.InternetGateway - resourceName := "aws_internet_gateway.test" + resourceName := "aws_default_internet_gateway.test" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) }, @@ -73,10 +73,10 @@ func TestAccVPCInternetGateway_disappears(t *testing.T) { }) } -func TestAccVPCInternetGateway_Attachment(t *testing.T) { +func TestAccVPCDefaultInternetGateway_Attachment(t *testing.T) { ctx := acctest.Context(t) var v ec2.InternetGateway - resourceName := "aws_internet_gateway.test" + resourceName := "aws_default_internet_gateway.test" vpc1ResourceName := "aws_vpc.test1" vpc2ResourceName := "aws_vpc.test2" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -110,10 +110,10 @@ func TestAccVPCInternetGateway_Attachment(t *testing.T) { }) } -func TestAccVPCInternetGateway_Tags(t *testing.T) { +func TestAccVPCDefaultInternetGateway_Tags(t *testing.T) { ctx := acctest.Context(t) var v ec2.InternetGateway - resourceName := "aws_internet_gateway.test" + resourceName := "aws_default_internet_gateway.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resource.ParallelTest(t, resource.TestCase{ @@ -156,12 +156,12 @@ func TestAccVPCInternetGateway_Tags(t *testing.T) { }) } -func testAccCheckInternetGatewayDestroy(ctx context.Context) resource.TestCheckFunc { +func testAccCheckDefaultInternetGatewayDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { conn := acctest.Provider.Meta().(*conns.AWSClient).EC2Conn(ctx) for _, rs := range s.RootModule().Resources { - if rs.Type != "aws_internet_gateway" { + if rs.Type != "aws_default_internet_gateway" { continue } @@ -182,7 +182,7 @@ func testAccCheckInternetGatewayDestroy(ctx context.Context) resource.TestCheckF } } -func testAccCheckInternetGatewayExists(ctx context.Context, n string, v *ec2.InternetGateway) resource.TestCheckFunc { +func testAccCheckDefaultInternetGatewayExists(ctx context.Context, n string, v *ec2.InternetGateway) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { @@ -207,11 +207,11 @@ func testAccCheckInternetGatewayExists(ctx context.Context, n string, v *ec2.Int } } -const testAccVPCInternetGatewayConfig_basic = ` -resource "aws_internet_gateway" "test" {} +const testAccVPCDefaultInternetGatewayConfig_basic = ` +resource "aws_default_internet_gateway" "test" {} ` -func testAccVPCInternetGatewayConfig_attachment(rName string) string { +func testAccVPCDefaultInternetGatewayConfig_attachment(rName string) string { return fmt.Sprintf(` resource "aws_vpc" "test1" { cidr_block = "10.1.0.0/16" @@ -229,7 +229,7 @@ resource "aws_vpc" "test2" { } } -resource "aws_internet_gateway" "test" { +resource "aws_default_internet_gateway" "test" { vpc_id = aws_vpc.test1.id tags = { @@ -239,7 +239,7 @@ resource "aws_internet_gateway" "test" { `, rName) } -func testAccVPCInternetGatewayConfig_attachmentUpdated(rName string) string { +func testAccVPCDefaultInternetGatewayConfig_attachmentUpdated(rName string) string { return fmt.Sprintf(` resource "aws_vpc" "test1" { cidr_block = "10.1.0.0/16" @@ -257,7 +257,7 @@ resource "aws_vpc" "test2" { } } -resource "aws_internet_gateway" "test" { +resource "aws_default_internet_gateway" "test" { vpc_id = aws_vpc.test2.id tags = { @@ -267,9 +267,9 @@ resource "aws_internet_gateway" "test" { `, rName) } -func testAccVPCInternetGatewayConfig_tags1(rName, tagKey1, tagValue1 string) string { +func testAccVPCDefaultInternetGatewayConfig_tags1(rName, tagKey1, tagValue1 string) string { return fmt.Sprintf(` -resource "aws_internet_gateway" "test" { +resource "aws_default_internet_gateway" "test" { tags = { %[2]q = %[3]q } @@ -277,9 +277,9 @@ resource "aws_internet_gateway" "test" { `, rName, tagKey1, tagValue1) } -func testAccVPCInternetGatewayConfig_tags2(rName, tagKey1, tagValue1, tagKey2, tagValue2 string) string { +func testAccVPCDefaultInternetGatewayConfig_tags2(rName, tagKey1, tagValue1, tagKey2, tagValue2 string) string { return fmt.Sprintf(` -resource "aws_internet_gateway" "test" { +resource "aws_default_internet_gateway" "test" { tags = { %[2]q = %[3]q %[4]q = %[5]q From c605d419479d90e26f144efa20049921d9716abf Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Fri, 7 Jun 2024 14:18:34 +0100 Subject: [PATCH 04/19] switcheroo for cp issue --- .../ec2/vpc_default_internet_gateway_test.go | 42 +++++++++---------- .../service/ec2/vpc_internet_gateway_test.go | 42 +++++++++---------- 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/internal/service/ec2/vpc_default_internet_gateway_test.go b/internal/service/ec2/vpc_default_internet_gateway_test.go index 289f5159fdd9..4ec09f8d7440 100644 --- a/internal/service/ec2/vpc_default_internet_gateway_test.go +++ b/internal/service/ec2/vpc_default_internet_gateway_test.go @@ -20,10 +20,10 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -func TestAccVPCInternetGateway_basic(t *testing.T) { +func TestAccVPCDefaultInternetGateway_basic(t *testing.T) { ctx := acctest.Context(t) var v ec2.InternetGateway - resourceName := "aws_internet_gateway.test" + resourceName := "aws_default_internet_gateway.test" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) }, @@ -50,10 +50,10 @@ func TestAccVPCInternetGateway_basic(t *testing.T) { }) } -func TestAccVPCInternetGateway_disappears(t *testing.T) { +func TestAccVPCDefaultInternetGateway_disappears(t *testing.T) { ctx := acctest.Context(t) var v ec2.InternetGateway - resourceName := "aws_internet_gateway.test" + resourceName := "aws_default_internet_gateway.test" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) }, @@ -73,10 +73,10 @@ func TestAccVPCInternetGateway_disappears(t *testing.T) { }) } -func TestAccVPCInternetGateway_Attachment(t *testing.T) { +func TestAccVPCDefaultInternetGateway_Attachment(t *testing.T) { ctx := acctest.Context(t) var v ec2.InternetGateway - resourceName := "aws_internet_gateway.test" + resourceName := "aws_default_internet_gateway.test" vpc1ResourceName := "aws_vpc.test1" vpc2ResourceName := "aws_vpc.test2" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -110,10 +110,10 @@ func TestAccVPCInternetGateway_Attachment(t *testing.T) { }) } -func TestAccVPCInternetGateway_Tags(t *testing.T) { +func TestAccVPCDefaultInternetGateway_Tags(t *testing.T) { ctx := acctest.Context(t) var v ec2.InternetGateway - resourceName := "aws_internet_gateway.test" + resourceName := "aws_default_internet_gateway.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resource.ParallelTest(t, resource.TestCase{ @@ -156,12 +156,12 @@ func TestAccVPCInternetGateway_Tags(t *testing.T) { }) } -func testAccCheckInternetGatewayDestroy(ctx context.Context) resource.TestCheckFunc { +func testAccCheckDefaultInternetGatewayDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { conn := acctest.Provider.Meta().(*conns.AWSClient).EC2Conn(ctx) for _, rs := range s.RootModule().Resources { - if rs.Type != "aws_internet_gateway" { + if rs.Type != "aws_default_internet_gateway" { continue } @@ -182,7 +182,7 @@ func testAccCheckInternetGatewayDestroy(ctx context.Context) resource.TestCheckF } } -func testAccCheckInternetGatewayExists(ctx context.Context, n string, v *ec2.InternetGateway) resource.TestCheckFunc { +func testAccCheckDefaultInternetGatewayExists(ctx context.Context, n string, v *ec2.InternetGateway) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { @@ -207,11 +207,11 @@ func testAccCheckInternetGatewayExists(ctx context.Context, n string, v *ec2.Int } } -const testAccVPCInternetGatewayConfig_basic = ` -resource "aws_internet_gateway" "test" {} +const testAccVPCDefaultInternetGatewayConfig_basic = ` +resource "aws_default_internet_gateway" "test" {} ` -func testAccVPCInternetGatewayConfig_attachment(rName string) string { +func testAccVPCDefaultInternetGatewayConfig_attachment(rName string) string { return fmt.Sprintf(` resource "aws_vpc" "test1" { cidr_block = "10.1.0.0/16" @@ -229,7 +229,7 @@ resource "aws_vpc" "test2" { } } -resource "aws_internet_gateway" "test" { +resource "aws_default_internet_gateway" "test" { vpc_id = aws_vpc.test1.id tags = { @@ -239,7 +239,7 @@ resource "aws_internet_gateway" "test" { `, rName) } -func testAccVPCInternetGatewayConfig_attachmentUpdated(rName string) string { +func testAccVPCDefaultInternetGatewayConfig_attachmentUpdated(rName string) string { return fmt.Sprintf(` resource "aws_vpc" "test1" { cidr_block = "10.1.0.0/16" @@ -257,7 +257,7 @@ resource "aws_vpc" "test2" { } } -resource "aws_internet_gateway" "test" { +resource "aws_default_internet_gateway" "test" { vpc_id = aws_vpc.test2.id tags = { @@ -267,9 +267,9 @@ resource "aws_internet_gateway" "test" { `, rName) } -func testAccVPCInternetGatewayConfig_tags1(rName, tagKey1, tagValue1 string) string { +func testAccVPCDefaultInternetGatewayConfig_tags1(rName, tagKey1, tagValue1 string) string { return fmt.Sprintf(` -resource "aws_internet_gateway" "test" { +resource "aws_default_internet_gateway" "test" { tags = { %[2]q = %[3]q } @@ -277,9 +277,9 @@ resource "aws_internet_gateway" "test" { `, rName, tagKey1, tagValue1) } -func testAccVPCInternetGatewayConfig_tags2(rName, tagKey1, tagValue1, tagKey2, tagValue2 string) string { +func testAccVPCDefaultInternetGatewayConfig_tags2(rName, tagKey1, tagValue1, tagKey2, tagValue2 string) string { return fmt.Sprintf(` -resource "aws_internet_gateway" "test" { +resource "aws_default_internet_gateway" "test" { tags = { %[2]q = %[3]q %[4]q = %[5]q diff --git a/internal/service/ec2/vpc_internet_gateway_test.go b/internal/service/ec2/vpc_internet_gateway_test.go index 4ec09f8d7440..289f5159fdd9 100644 --- a/internal/service/ec2/vpc_internet_gateway_test.go +++ b/internal/service/ec2/vpc_internet_gateway_test.go @@ -20,10 +20,10 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -func TestAccVPCDefaultInternetGateway_basic(t *testing.T) { +func TestAccVPCInternetGateway_basic(t *testing.T) { ctx := acctest.Context(t) var v ec2.InternetGateway - resourceName := "aws_default_internet_gateway.test" + resourceName := "aws_internet_gateway.test" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) }, @@ -50,10 +50,10 @@ func TestAccVPCDefaultInternetGateway_basic(t *testing.T) { }) } -func TestAccVPCDefaultInternetGateway_disappears(t *testing.T) { +func TestAccVPCInternetGateway_disappears(t *testing.T) { ctx := acctest.Context(t) var v ec2.InternetGateway - resourceName := "aws_default_internet_gateway.test" + resourceName := "aws_internet_gateway.test" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) }, @@ -73,10 +73,10 @@ func TestAccVPCDefaultInternetGateway_disappears(t *testing.T) { }) } -func TestAccVPCDefaultInternetGateway_Attachment(t *testing.T) { +func TestAccVPCInternetGateway_Attachment(t *testing.T) { ctx := acctest.Context(t) var v ec2.InternetGateway - resourceName := "aws_default_internet_gateway.test" + resourceName := "aws_internet_gateway.test" vpc1ResourceName := "aws_vpc.test1" vpc2ResourceName := "aws_vpc.test2" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -110,10 +110,10 @@ func TestAccVPCDefaultInternetGateway_Attachment(t *testing.T) { }) } -func TestAccVPCDefaultInternetGateway_Tags(t *testing.T) { +func TestAccVPCInternetGateway_Tags(t *testing.T) { ctx := acctest.Context(t) var v ec2.InternetGateway - resourceName := "aws_default_internet_gateway.test" + resourceName := "aws_internet_gateway.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resource.ParallelTest(t, resource.TestCase{ @@ -156,12 +156,12 @@ func TestAccVPCDefaultInternetGateway_Tags(t *testing.T) { }) } -func testAccCheckDefaultInternetGatewayDestroy(ctx context.Context) resource.TestCheckFunc { +func testAccCheckInternetGatewayDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { conn := acctest.Provider.Meta().(*conns.AWSClient).EC2Conn(ctx) for _, rs := range s.RootModule().Resources { - if rs.Type != "aws_default_internet_gateway" { + if rs.Type != "aws_internet_gateway" { continue } @@ -182,7 +182,7 @@ func testAccCheckDefaultInternetGatewayDestroy(ctx context.Context) resource.Tes } } -func testAccCheckDefaultInternetGatewayExists(ctx context.Context, n string, v *ec2.InternetGateway) resource.TestCheckFunc { +func testAccCheckInternetGatewayExists(ctx context.Context, n string, v *ec2.InternetGateway) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { @@ -207,11 +207,11 @@ func testAccCheckDefaultInternetGatewayExists(ctx context.Context, n string, v * } } -const testAccVPCDefaultInternetGatewayConfig_basic = ` -resource "aws_default_internet_gateway" "test" {} +const testAccVPCInternetGatewayConfig_basic = ` +resource "aws_internet_gateway" "test" {} ` -func testAccVPCDefaultInternetGatewayConfig_attachment(rName string) string { +func testAccVPCInternetGatewayConfig_attachment(rName string) string { return fmt.Sprintf(` resource "aws_vpc" "test1" { cidr_block = "10.1.0.0/16" @@ -229,7 +229,7 @@ resource "aws_vpc" "test2" { } } -resource "aws_default_internet_gateway" "test" { +resource "aws_internet_gateway" "test" { vpc_id = aws_vpc.test1.id tags = { @@ -239,7 +239,7 @@ resource "aws_default_internet_gateway" "test" { `, rName) } -func testAccVPCDefaultInternetGatewayConfig_attachmentUpdated(rName string) string { +func testAccVPCInternetGatewayConfig_attachmentUpdated(rName string) string { return fmt.Sprintf(` resource "aws_vpc" "test1" { cidr_block = "10.1.0.0/16" @@ -257,7 +257,7 @@ resource "aws_vpc" "test2" { } } -resource "aws_default_internet_gateway" "test" { +resource "aws_internet_gateway" "test" { vpc_id = aws_vpc.test2.id tags = { @@ -267,9 +267,9 @@ resource "aws_default_internet_gateway" "test" { `, rName) } -func testAccVPCDefaultInternetGatewayConfig_tags1(rName, tagKey1, tagValue1 string) string { +func testAccVPCInternetGatewayConfig_tags1(rName, tagKey1, tagValue1 string) string { return fmt.Sprintf(` -resource "aws_default_internet_gateway" "test" { +resource "aws_internet_gateway" "test" { tags = { %[2]q = %[3]q } @@ -277,9 +277,9 @@ resource "aws_default_internet_gateway" "test" { `, rName, tagKey1, tagValue1) } -func testAccVPCDefaultInternetGatewayConfig_tags2(rName, tagKey1, tagValue1, tagKey2, tagValue2 string) string { +func testAccVPCInternetGatewayConfig_tags2(rName, tagKey1, tagValue1, tagKey2, tagValue2 string) string { return fmt.Sprintf(` -resource "aws_default_internet_gateway" "test" { +resource "aws_internet_gateway" "test" { tags = { %[2]q = %[3]q %[4]q = %[5]q From e03ed26dcbe67baf9413edf16c9a4a5d537bd572 Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Sun, 9 Jun 2024 14:33:14 +0100 Subject: [PATCH 05/19] somewhat working --- internal/service/ec2/service_package_gen.go | 8 +++ .../ec2/vpc_default_internet_gateway.go | 53 ++++++++++++------- 2 files changed, 41 insertions(+), 20 deletions(-) diff --git a/internal/service/ec2/service_package_gen.go b/internal/service/ec2/service_package_gen.go index b3df7eb83915..e4672f9fcbfa 100644 --- a/internal/service/ec2/service_package_gen.go +++ b/internal/service/ec2/service_package_gen.go @@ -464,6 +464,14 @@ func (p *servicePackage) SDKResources(ctx context.Context) []*types.ServicePacka IdentifierAttribute: names.AttrID, }, }, + { + Factory: ResourceDefaultInternetGateway, + TypeName: "aws_default_internet_gateway", + Name: "Internet Gateway", + Tags: &types.ServicePackageResourceTags{ + IdentifierAttribute: names.AttrID, + }, + }, { Factory: resourceDefaultNetworkACL, TypeName: "aws_default_network_acl", diff --git a/internal/service/ec2/vpc_default_internet_gateway.go b/internal/service/ec2/vpc_default_internet_gateway.go index b0ace181eb74..c0786e1b2368 100644 --- a/internal/service/ec2/vpc_default_internet_gateway.go +++ b/internal/service/ec2/vpc_default_internet_gateway.go @@ -5,8 +5,9 @@ import ( "log" "time" + "github.com/aws/aws-sdk-go-v2/aws" ec2v2 "github.com/aws/aws-sdk-go-v2/service/ec2" - "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/ec2" "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" @@ -82,41 +83,53 @@ func resourceDefaultInternetGatewayCreate(ctx context.Context, d *schema.Resourc }, ), } - _, err := findVPCV2(ctx, ec2Client, input) - + vpc, err := findVPCV2(ctx, ec2Client, input) if err == nil { + // Check if there is an IGW assigned to the default VPC input := &ec2.DescribeInternetGatewaysInput{} input.Filters = newAttributeFilterList(map[string]string{ - "attachment.vpc-id": d.Get(names.AttrVPCID).(string), + "attachment.vpc-id": *vpc.VpcId, }) conn := meta.(*conns.AWSClient).EC2Conn(ctx) - _, err := FindInternetGateway(ctx, conn, input) - - // Attached IGW not found, so we create one - if err != nil { + igw, err := FindInternetGateway(ctx, conn, input) + log.Printf("found igw with ID: %s", igw) - input := &ec2.CreateInternetGatewayInput{ - TagSpecifications: getTagSpecificationsIn(ctx, ec2.ResourceTypeInternetGateway), - } + if err == nil { + d.SetId(aws.ToString(igw.InternetGatewayId)) + d.Set("existing_default_internet_gateway", true) - log.Printf("[DEBUG] Creating EC2 Internet Gateway: %s", input) - output, err := conn.CreateInternetGatewayWithContext(ctx, input) + } else if tfresource.NotFound(err) { + log.Printf("not implemented yet") + } else { + log.Printf("some error") + } + /* + // Attached IGW not found, so we create one if err != nil { - return sdkdiag.AppendErrorf(diags, "creating EC2 Internet Gateway: %s", err) - } + log.Print("creating default igw") + input := &ec2.CreateInternetGatewayInput{ + TagSpecifications: getTagSpecificationsIn(ctx, ec2.ResourceTypeInternetGateway), + } - d.SetId(aws.StringValue(output.InternetGateway.InternetGatewayId)) + //log.Printf("[DEBUG] Creating EC2 Internet Gateway: %s", input) + //output, err := conn.CreateInternetGatewayWithContext(ctx, input) - if v, ok := d.GetOk(names.AttrVPCID); ok { - if err := attachInternetGateway(ctx, conn, d.Id(), v.(string), d.Timeout(schema.TimeoutCreate)); err != nil { + if err != nil { return sdkdiag.AppendErrorf(diags, "creating EC2 Internet Gateway: %s", err) } - } - } + + //d.SetId(aws.StringValue(output.InternetGateway.InternetGatewayId)) + + if v, ok := d.GetOk(names.AttrVPCID); ok { + if err := attachInternetGateway(ctx, conn, d.Id(), v.(string), d.Timeout(schema.TimeoutCreate)); err != nil { + return sdkdiag.AppendErrorf(diags, "creating EC2 Internet Gateway: %s", err) + } + } + }*/ } return append(diags, resourceInternetGatewayRead(ctx, d, meta)...) } From a25fd76c38d28501e60811c7bc2b935dc0bf5708 Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Mon, 10 Jun 2024 09:35:20 +0100 Subject: [PATCH 06/19] Remove commented bit --- .../ec2/vpc_default_internet_gateway.go | 23 ------------------- 1 file changed, 23 deletions(-) diff --git a/internal/service/ec2/vpc_default_internet_gateway.go b/internal/service/ec2/vpc_default_internet_gateway.go index c0786e1b2368..77ede5b6f1e7 100644 --- a/internal/service/ec2/vpc_default_internet_gateway.go +++ b/internal/service/ec2/vpc_default_internet_gateway.go @@ -107,29 +107,6 @@ func resourceDefaultInternetGatewayCreate(ctx context.Context, d *schema.Resourc log.Printf("some error") } - /* - // Attached IGW not found, so we create one - if err != nil { - log.Print("creating default igw") - input := &ec2.CreateInternetGatewayInput{ - TagSpecifications: getTagSpecificationsIn(ctx, ec2.ResourceTypeInternetGateway), - } - - //log.Printf("[DEBUG] Creating EC2 Internet Gateway: %s", input) - //output, err := conn.CreateInternetGatewayWithContext(ctx, input) - - if err != nil { - return sdkdiag.AppendErrorf(diags, "creating EC2 Internet Gateway: %s", err) - } - - //d.SetId(aws.StringValue(output.InternetGateway.InternetGatewayId)) - - if v, ok := d.GetOk(names.AttrVPCID); ok { - if err := attachInternetGateway(ctx, conn, d.Id(), v.(string), d.Timeout(schema.TimeoutCreate)); err != nil { - return sdkdiag.AppendErrorf(diags, "creating EC2 Internet Gateway: %s", err) - } - } - }*/ } return append(diags, resourceInternetGatewayRead(ctx, d, meta)...) } From a2f2f9b58f4f1e9b1c86e685bbc63a4c8c4d879c Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Mon, 10 Jun 2024 10:00:37 +0100 Subject: [PATCH 07/19] handle unexpected errors on creation and remove unused path --- internal/service/ec2/vpc_default_internet_gateway.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/internal/service/ec2/vpc_default_internet_gateway.go b/internal/service/ec2/vpc_default_internet_gateway.go index 77ede5b6f1e7..6cb8276dee0b 100644 --- a/internal/service/ec2/vpc_default_internet_gateway.go +++ b/internal/service/ec2/vpc_default_internet_gateway.go @@ -70,6 +70,7 @@ func ResourceDefaultInternetGateway() *schema.Resource { CustomizeDiff: verify.SetTagsDiff, } } + func resourceDefaultInternetGatewayCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics @@ -101,11 +102,8 @@ func resourceDefaultInternetGatewayCreate(ctx context.Context, d *schema.Resourc d.SetId(aws.ToString(igw.InternetGatewayId)) d.Set("existing_default_internet_gateway", true) - } else if tfresource.NotFound(err) { - log.Printf("not implemented yet") } else { - log.Printf("some error") - + return sdkdiag.AppendErrorf(diags, "creating EC2 Internet Gateway (%s): %s", d.Id(), err) } } return append(diags, resourceInternetGatewayRead(ctx, d, meta)...) From a6387356d303550de60d1fec38f056b7b7976b85 Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Mon, 10 Jun 2024 10:22:57 +0100 Subject: [PATCH 08/19] Add missing create path when IGW was removed previously --- .../ec2/vpc_default_internet_gateway.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/internal/service/ec2/vpc_default_internet_gateway.go b/internal/service/ec2/vpc_default_internet_gateway.go index 6cb8276dee0b..e59653a60a64 100644 --- a/internal/service/ec2/vpc_default_internet_gateway.go +++ b/internal/service/ec2/vpc_default_internet_gateway.go @@ -102,6 +102,24 @@ func resourceDefaultInternetGatewayCreate(ctx context.Context, d *schema.Resourc d.SetId(aws.ToString(igw.InternetGatewayId)) d.Set("existing_default_internet_gateway", true) + } else if tfresource.NotFound(err) { + input := &ec2.CreateInternetGatewayInput{} + + log.Printf("[DEBUG] Creating EC2 Internet Gateway: %s", input) + output, err := conn.CreateInternetGatewayWithContext(ctx, input) + + if err != nil { + return sdkdiag.AppendErrorf(diags, "creating EC2 Internet Gateway: %s", err) + } + + igw = output.InternetGateway + + d.SetId(aws.ToString(igw.InternetGatewayId)) + d.Set("existing_default_internet_gateway", false) + + if err := attachInternetGateway(ctx, conn, d.Id(), *vpc.VpcId, d.Timeout(schema.TimeoutDelete)); err != nil { + return sdkdiag.AppendErrorf(diags, "attaching EC2 Internet Gateway (%s): %s", d.Id(), err) + } } else { return sdkdiag.AppendErrorf(diags, "creating EC2 Internet Gateway (%s): %s", d.Id(), err) } From 6e9b32af7f01b30929d8956582d1cb06a05ae554 Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Mon, 10 Jun 2024 10:27:49 +0100 Subject: [PATCH 09/19] Add a bit better logging --- internal/service/ec2/vpc_default_internet_gateway.go | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/internal/service/ec2/vpc_default_internet_gateway.go b/internal/service/ec2/vpc_default_internet_gateway.go index e59653a60a64..f98b84a22d0e 100644 --- a/internal/service/ec2/vpc_default_internet_gateway.go +++ b/internal/service/ec2/vpc_default_internet_gateway.go @@ -86,8 +86,7 @@ func resourceDefaultInternetGatewayCreate(ctx context.Context, d *schema.Resourc } vpc, err := findVPCV2(ctx, ec2Client, input) if err == nil { - - // Check if there is an IGW assigned to the default VPC + log.Print("[INFO] Found existing attached EC2 Internet Gateway") input := &ec2.DescribeInternetGatewaysInput{} input.Filters = newAttributeFilterList(map[string]string{ "attachment.vpc-id": *vpc.VpcId, @@ -103,13 +102,12 @@ func resourceDefaultInternetGatewayCreate(ctx context.Context, d *schema.Resourc d.Set("existing_default_internet_gateway", true) } else if tfresource.NotFound(err) { + log.Print("[INFO] Found default VPC without attached EC2 Internet Gateway. Creating and attaching one") input := &ec2.CreateInternetGatewayInput{} - - log.Printf("[DEBUG] Creating EC2 Internet Gateway: %s", input) output, err := conn.CreateInternetGatewayWithContext(ctx, input) if err != nil { - return sdkdiag.AppendErrorf(diags, "creating EC2 Internet Gateway: %s", err) + return sdkdiag.AppendErrorf(diags, "Creating EC2 Internet Gateway: %s", err) } igw = output.InternetGateway @@ -118,10 +116,10 @@ func resourceDefaultInternetGatewayCreate(ctx context.Context, d *schema.Resourc d.Set("existing_default_internet_gateway", false) if err := attachInternetGateway(ctx, conn, d.Id(), *vpc.VpcId, d.Timeout(schema.TimeoutDelete)); err != nil { - return sdkdiag.AppendErrorf(diags, "attaching EC2 Internet Gateway (%s): %s", d.Id(), err) + return sdkdiag.AppendErrorf(diags, "Attaching EC2 Internet Gateway (%s): %s", d.Id(), err) } } else { - return sdkdiag.AppendErrorf(diags, "creating EC2 Internet Gateway (%s): %s", d.Id(), err) + return sdkdiag.AppendErrorf(diags, "Creating EC2 Internet Gateway (%s): %s", d.Id(), err) } } return append(diags, resourceInternetGatewayRead(ctx, d, meta)...) From ecfccb00ead4ad008553ba2f335ae832141406f0 Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Mon, 10 Jun 2024 11:38:30 +0100 Subject: [PATCH 10/19] Add changelog --- .changelog/37899.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/37899.txt diff --git a/.changelog/37899.txt b/.changelog/37899.txt new file mode 100644 index 000000000000..27dac1871370 --- /dev/null +++ b/.changelog/37899.txt @@ -0,0 +1,3 @@ +```release-note:new-resource +aws_vpc_default_internet_gateway +``` \ No newline at end of file From 2f42f4714b7fcee9ad44f057cc67078ad3e984c8 Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Mon, 10 Jun 2024 11:53:41 +0100 Subject: [PATCH 11/19] Add copyright --- internal/service/ec2/vpc_default_internet_gateway.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/service/ec2/vpc_default_internet_gateway.go b/internal/service/ec2/vpc_default_internet_gateway.go index f98b84a22d0e..55d5827da436 100644 --- a/internal/service/ec2/vpc_default_internet_gateway.go +++ b/internal/service/ec2/vpc_default_internet_gateway.go @@ -1,3 +1,6 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + package ec2 import ( From 9b2918dbb74ba293a45d71de8ea162ad3a71202f Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Mon, 10 Jun 2024 13:32:10 +0100 Subject: [PATCH 12/19] fix imports --- internal/service/ec2/vpc_default_internet_gateway.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/service/ec2/vpc_default_internet_gateway.go b/internal/service/ec2/vpc_default_internet_gateway.go index 55d5827da436..b9221ccd9440 100644 --- a/internal/service/ec2/vpc_default_internet_gateway.go +++ b/internal/service/ec2/vpc_default_internet_gateway.go @@ -10,7 +10,6 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" ec2v2 "github.com/aws/aws-sdk-go-v2/service/ec2" - "github.com/aws/aws-sdk-go/service/ec2" "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" From 3848bdb3d563ac443346fa3a21852a0ab6336c8c Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Mon, 10 Jun 2024 14:04:23 +0100 Subject: [PATCH 13/19] Add documentation for the resource --- .../r/default_internet_gateway.html.markdown | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 website/docs/r/default_internet_gateway.html.markdown diff --git a/website/docs/r/default_internet_gateway.html.markdown b/website/docs/r/default_internet_gateway.html.markdown new file mode 100644 index 000000000000..da31571f9d16 --- /dev/null +++ b/website/docs/r/default_internet_gateway.html.markdown @@ -0,0 +1,61 @@ +--- +subcategory: "VPC (Virtual Private Cloud)" +layout: "aws" +page_title: "AWS: aws_default_internet_gateway" +description: |- + Manage a default internet gateway resource. +--- + +# Resource: aws_default_internet_gateway + +Provides a resource to manage the [internet gateway](http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/default-vpc.html#default-vpc-basics) attached to the default VPC in the current region. + +**This is an advanced resource** and has special caveats to be aware of when using it. Please read this document in its entirety before using this resource. + +Please be aware that there is no such thing as "default Internet Gateway" on AWS. When creating a default VPC, it will automatically create an Internet Gateway and attach it to the default VPC. The new IGW has no properties that is specific for being part of the default VPC's infrastructure. The aws_default_internet_gateway resource assumes that the Internet Gateway attached to the default VPC is the "default Internet Gateway". + +The `aws_default_internet_gateway` resource behaves differently from normal resources in that, if an Internet Gateway exists and attached to the default VPC, Terraform does not _create_ this resource, but instead "adopts" it into management. +If no Internet Gateway exists that is attached to the default VPC, Terraform creates a new internet gateway and attaches to the default VPC. +By default, `terraform destroy` does not delete the internet gateway, but does remove the resource from Terraform state. +Set the `force_destroy` argument to `true` to delete the "default" Internet Gateway". + +## Example Usage + +```terraform +resource "aws_default_internet_gateway" "default" { + force_destroy = true + depends_on = [aws_default_vpc.default] +} +``` + +## Argument Reference + +This resource supports the following additional arguments: + +* `force_destroy` - (Optional) Whether destroying the resource deletes the Internet Gateway attached to the default VPC. Default: `false` + +## Attribute Reference + +This resource exports the following attributes in addition to the arguments above: + +* `id` - The ID of the Internet Gateway. +* `arn` - The ARN of the Internet Gateway. +* `owner_id` - The ID of the AWS account that owns the internet gateway. +* `tags_all` - A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-configuration-block). + +## Import + +In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import Internet Gateways using the `id`. For example: + +```terraform +import { + to = aws_default_internet_gateway.gw + id = "igw-c0a643a9" +} +``` + +Using `terraform import`, import default Internet Gateways using the `id`. For example: + +```console +% terraform import aws_default_internet_gateway.gw igw-c0a643a9 +``` From e7b7ba8ffadd2a96a5403a7cbd177af20aa472d7 Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Mon, 10 Jun 2024 14:58:43 +0100 Subject: [PATCH 14/19] Remove multiple SDKs --- .../ec2/vpc_default_internet_gateway.go | 28 ++++++++----------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/internal/service/ec2/vpc_default_internet_gateway.go b/internal/service/ec2/vpc_default_internet_gateway.go index b9221ccd9440..d6957b4a51e6 100644 --- a/internal/service/ec2/vpc_default_internet_gateway.go +++ b/internal/service/ec2/vpc_default_internet_gateway.go @@ -8,8 +8,7 @@ import ( "log" "time" - "github.com/aws/aws-sdk-go-v2/aws" - ec2v2 "github.com/aws/aws-sdk-go-v2/service/ec2" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ec2" "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" @@ -77,16 +76,15 @@ func resourceDefaultInternetGatewayCreate(ctx context.Context, d *schema.Resourc var diags diag.Diagnostics // Check if there is a default VPC - ec2Client := meta.(*conns.AWSClient).EC2Client(ctx) - - input := &ec2v2.DescribeVpcsInput{ - Filters: newAttributeFilterListV2( + input := &ec2.DescribeVpcsInput{ + Filters: newAttributeFilterList( map[string]string{ "isDefault": "true", }, ), } - vpc, err := findVPCV2(ctx, ec2Client, input) + conn := meta.(*conns.AWSClient).EC2Conn(ctx) + vpc, err := FindVPC(ctx, conn, input) if err == nil { log.Print("[INFO] Found existing attached EC2 Internet Gateway") input := &ec2.DescribeInternetGatewaysInput{} @@ -94,13 +92,11 @@ func resourceDefaultInternetGatewayCreate(ctx context.Context, d *schema.Resourc "attachment.vpc-id": *vpc.VpcId, }) - conn := meta.(*conns.AWSClient).EC2Conn(ctx) - igw, err := FindInternetGateway(ctx, conn, input) log.Printf("found igw with ID: %s", igw) if err == nil { - d.SetId(aws.ToString(igw.InternetGatewayId)) + d.SetId(*igw.InternetGatewayId) d.Set("existing_default_internet_gateway", true) } else if tfresource.NotFound(err) { @@ -114,7 +110,7 @@ func resourceDefaultInternetGatewayCreate(ctx context.Context, d *schema.Resourc igw = output.InternetGateway - d.SetId(aws.ToString(igw.InternetGatewayId)) + d.SetId(*igw.InternetGatewayId) d.Set("existing_default_internet_gateway", false) if err := attachInternetGateway(ctx, conn, d.Id(), *vpc.VpcId, d.Timeout(schema.TimeoutDelete)); err != nil { @@ -132,18 +128,16 @@ func resourceDefaultInternetGatewayDelete(ctx context.Context, d *schema.Resourc if d.Get(names.AttrForceDestroy).(bool) { // See if the VPC assigned to the IGW has the isDefault property - ec2Client := meta.(*conns.AWSClient).EC2Client(ctx) - input := &ec2v2.DescribeVpcsInput{ - Filters: newAttributeFilterListV2( + conn := meta.(*conns.AWSClient).EC2Conn(ctx) + input := &ec2.DescribeVpcsInput{ + Filters: newAttributeFilterList( map[string]string{ "isDefault": "true", "vpc-id": d.Get(names.AttrVPCID).(string), }, ), } - _, err := findVPCV2(ctx, ec2Client, input) - - conn := meta.(*conns.AWSClient).EC2Conn(ctx) + _, err := FindVPC(ctx, conn, input) if err == nil { // Detach if it is attached. From 2f106747c94d2a0f0d26b73fdf524e3321ffd5f0 Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Mon, 10 Jun 2024 15:17:39 +0100 Subject: [PATCH 15/19] fix tests to point on the right functions --- .../ec2/vpc_default_internet_gateway_test.go | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/internal/service/ec2/vpc_default_internet_gateway_test.go b/internal/service/ec2/vpc_default_internet_gateway_test.go index 4ec09f8d7440..d5f0c48f32fd 100644 --- a/internal/service/ec2/vpc_default_internet_gateway_test.go +++ b/internal/service/ec2/vpc_default_internet_gateway_test.go @@ -29,12 +29,12 @@ func TestAccVPCDefaultInternetGateway_basic(t *testing.T) { PreCheck: func() { acctest.PreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: testAccCheckInternetGatewayDestroy(ctx), + CheckDestroy: testAccCheckDefaultInternetGatewayDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccVPCInternetGatewayConfig_basic, + Config: testAccVPCDefaultInternetGatewayConfig_basic, Check: resource.ComposeTestCheckFunc( - testAccCheckInternetGatewayExists(ctx, resourceName, &v), + testAccCheckDefaultInternetGatewayExists(ctx, resourceName, &v), acctest.MatchResourceAttrRegionalARN(resourceName, names.AttrARN, "ec2", regexache.MustCompile(`internet-gateway/igw-.+`)), acctest.CheckResourceAttrAccountID(resourceName, names.AttrOwnerID), resource.TestCheckResourceAttr(resourceName, acctest.CtTagsPercent, acctest.Ct0), @@ -59,12 +59,12 @@ func TestAccVPCDefaultInternetGateway_disappears(t *testing.T) { PreCheck: func() { acctest.PreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: testAccCheckInternetGatewayDestroy(ctx), + CheckDestroy: testAccCheckDefaultInternetGatewayDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccVPCInternetGatewayConfig_basic, + Config: testAccVPCDefaultInternetGatewayConfig_basic, Check: resource.ComposeTestCheckFunc( - testAccCheckInternetGatewayExists(ctx, resourceName, &v), + testAccCheckDefaultInternetGatewayExists(ctx, resourceName, &v), acctest.CheckResourceDisappears(ctx, acctest.Provider, tfec2.ResourceInternetGateway(), resourceName), ), ExpectNonEmptyPlan: true, @@ -85,12 +85,12 @@ func TestAccVPCDefaultInternetGateway_Attachment(t *testing.T) { PreCheck: func() { acctest.PreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: testAccCheckInternetGatewayDestroy(ctx), + CheckDestroy: testAccCheckDefaultInternetGatewayDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccVPCInternetGatewayConfig_attachment(rName), + Config: testAccVPCDefaultInternetGatewayConfig_attachment(rName), Check: resource.ComposeTestCheckFunc( - testAccCheckInternetGatewayExists(ctx, resourceName, &v), + testAccCheckDefaultInternetGatewayExists(ctx, resourceName, &v), resource.TestCheckResourceAttrPair(resourceName, names.AttrVPCID, vpc1ResourceName, names.AttrID), ), }, @@ -100,9 +100,9 @@ func TestAccVPCDefaultInternetGateway_Attachment(t *testing.T) { ImportStateVerify: true, }, { - Config: testAccVPCInternetGatewayConfig_attachmentUpdated(rName), + Config: testAccVPCDefaultInternetGatewayConfig_attachmentUpdated(rName), Check: resource.ComposeTestCheckFunc( - testAccCheckInternetGatewayExists(ctx, resourceName, &v), + testAccCheckDefaultInternetGatewayExists(ctx, resourceName, &v), resource.TestCheckResourceAttrPair(resourceName, names.AttrVPCID, vpc2ResourceName, names.AttrID), ), }, @@ -120,12 +120,12 @@ func TestAccVPCDefaultInternetGateway_Tags(t *testing.T) { PreCheck: func() { acctest.PreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: testAccCheckInternetGatewayDestroy(ctx), + CheckDestroy: testAccCheckDefaultInternetGatewayDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccVPCInternetGatewayConfig_tags1(rName, acctest.CtKey1, acctest.CtValue1), + Config: testAccVPCDefaultInternetGatewayConfig_tags1(rName, acctest.CtKey1, acctest.CtValue1), Check: resource.ComposeTestCheckFunc( - testAccCheckInternetGatewayExists(ctx, resourceName, &v), + testAccCheckDefaultInternetGatewayExists(ctx, resourceName, &v), resource.TestCheckResourceAttr(resourceName, acctest.CtTagsPercent, acctest.Ct1), resource.TestCheckResourceAttr(resourceName, acctest.CtTagsKey1, acctest.CtValue1), ), @@ -136,18 +136,18 @@ func TestAccVPCDefaultInternetGateway_Tags(t *testing.T) { ImportStateVerify: true, }, { - Config: testAccVPCInternetGatewayConfig_tags2(rName, acctest.CtKey1, acctest.CtValue1Updated, acctest.CtKey2, acctest.CtValue2), + Config: testAccVPCDefaultInternetGatewayConfig_tags2(rName, acctest.CtKey1, acctest.CtValue1Updated, acctest.CtKey2, acctest.CtValue2), Check: resource.ComposeTestCheckFunc( - testAccCheckInternetGatewayExists(ctx, resourceName, &v), + testAccCheckDefaultInternetGatewayExists(ctx, resourceName, &v), resource.TestCheckResourceAttr(resourceName, acctest.CtTagsPercent, acctest.Ct2), resource.TestCheckResourceAttr(resourceName, acctest.CtTagsKey1, acctest.CtValue1Updated), resource.TestCheckResourceAttr(resourceName, acctest.CtTagsKey2, acctest.CtValue2), ), }, { - Config: testAccVPCInternetGatewayConfig_tags1(rName, acctest.CtKey2, acctest.CtValue2), + Config: testAccVPCDefaultInternetGatewayConfig_tags1(rName, acctest.CtKey2, acctest.CtValue2), Check: resource.ComposeTestCheckFunc( - testAccCheckInternetGatewayExists(ctx, resourceName, &v), + testAccCheckDefaultInternetGatewayExists(ctx, resourceName, &v), resource.TestCheckResourceAttr(resourceName, acctest.CtTagsPercent, acctest.Ct1), resource.TestCheckResourceAttr(resourceName, acctest.CtTagsKey2, acctest.CtValue2), ), @@ -196,7 +196,6 @@ func testAccCheckDefaultInternetGatewayExists(ctx context.Context, n string, v * conn := acctest.Provider.Meta().(*conns.AWSClient).EC2Conn(ctx) output, err := tfec2.FindInternetGatewayByID(ctx, conn, rs.Primary.ID) - if err != nil { return err } From 0d4a14cd4d8cc5fe51e3eedab9643c68896bf45c Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Mon, 10 Jun 2024 16:35:51 +0100 Subject: [PATCH 16/19] Fix formatting and docs --- .github/labeler-pr-triage.yml | 1 + GNUmakefile | 2 +- internal/service/ec2/vpc_default_internet_gateway.go | 6 ++---- names/data/names_data.csv | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/labeler-pr-triage.yml b/.github/labeler-pr-triage.yml index b9b21a363f2c..db7647e0ff8c 100644 --- a/.github/labeler-pr-triage.yml +++ b/.github/labeler-pr-triage.yml @@ -2174,6 +2174,7 @@ service/vpc: - 'website/**/default_route_*' - 'website/**/default_security_*' - 'website/**/default_subnet*' + - 'website/**/default_internet_gateway*' - 'website/**/default_vpc*' - 'website/**/ec2_managed_*' - 'website/**/ec2_network_*' diff --git a/GNUmakefile b/GNUmakefile index b3b79301d840..762c0eebca33 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -280,7 +280,7 @@ fumpt: ## Run gofumpt gen: prereq-go ## Run all Go generators @echo "make: Running Go generators..." - $(GO_VER) generate ./... + $(GO_VER) generate -v ./... # Generate service package lists last as they may depend on output of earlier generators. $(GO_VER) generate ./internal/provider $(GO_VER) generate ./internal/sweep diff --git a/internal/service/ec2/vpc_default_internet_gateway.go b/internal/service/ec2/vpc_default_internet_gateway.go index d6957b4a51e6..7b71499ebf9d 100644 --- a/internal/service/ec2/vpc_default_internet_gateway.go +++ b/internal/service/ec2/vpc_default_internet_gateway.go @@ -96,9 +96,8 @@ func resourceDefaultInternetGatewayCreate(ctx context.Context, d *schema.Resourc log.Printf("found igw with ID: %s", igw) if err == nil { - d.SetId(*igw.InternetGatewayId) + d.SetId(aws.StringValue(igw.InternetGatewayId)) d.Set("existing_default_internet_gateway", true) - } else if tfresource.NotFound(err) { log.Print("[INFO] Found default VPC without attached EC2 Internet Gateway. Creating and attaching one") input := &ec2.CreateInternetGatewayInput{} @@ -110,7 +109,7 @@ func resourceDefaultInternetGatewayCreate(ctx context.Context, d *schema.Resourc igw = output.InternetGateway - d.SetId(*igw.InternetGatewayId) + d.SetId(aws.StringValue(igw.InternetGatewayId)) d.Set("existing_default_internet_gateway", false) if err := attachInternetGateway(ctx, conn, d.Id(), *vpc.VpcId, d.Timeout(schema.TimeoutDelete)); err != nil { @@ -126,7 +125,6 @@ func resourceDefaultInternetGatewayCreate(ctx context.Context, d *schema.Resourc func resourceDefaultInternetGatewayDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics if d.Get(names.AttrForceDestroy).(bool) { - // See if the VPC assigned to the IGW has the isDefault property conn := meta.(*conns.AWSClient).EC2Conn(ctx) input := &ec2.DescribeVpcsInput{ diff --git a/names/data/names_data.csv b/names/data/names_data.csv index 10dd6e168895..99351ebe63ce 100644 --- a/names/data/names_data.csv +++ b/names/data/names_data.csv @@ -374,7 +374,7 @@ transfer,transfer,transfer,transfer,,transfer,,,Transfer,Transfer,,1,2,,aws_tran translate,translate,translate,translate,,translate,,,Translate,Translate,,1,,,aws_translate_,,translate_,Translate,Amazon,,x,,,,,Translate,,, ,,,,,,,,,,,,,,,,,Trusted Advisor,AWS,x,,,,,,,,,Part of Support ,,,,,verifiedaccess,ec2,,VerifiedAccess,,,,,aws_verifiedaccess,aws_verifiedaccess_,verifiedaccess_,verifiedaccess_,Verified Access,AWS,x,,,x,,,,,,Part of EC2 -,,,,,vpc,ec2,,VPC,,,,,aws_((default_)?(network_acl|route_table|security_group|subnet|vpc(?!_ipam))|ec2_(managed|network|subnet|traffic)|egress_only_internet|flow_log|internet_gateway|main_route_table_association|nat_gateway|network_interface|prefix_list|route\b),aws_vpc_,vpc_,default_network_;default_route_;default_security_;default_subnet;default_vpc;ec2_managed_;ec2_network_;ec2_subnet_;ec2_traffic_;egress_only_;flow_log;internet_gateway;main_route_;nat_;network_;prefix_list;route_;route\.;security_group;subnet;vpc_dhcp_;vpc_endpoint;vpc_ipv;vpc_network_performance;vpc_peering_;vpc_security_group_;vpc\.;vpcs\.,VPC (Virtual Private Cloud),Amazon,x,,,x,,,,,,Part of EC2 +,,,,,vpc,ec2,,VPC,,,,,aws_((default_)?(network_acl|route_table|security_group|subnet|vpc(?!_ipam))|ec2_(managed|network|subnet|traffic)|egress_only_internet|flow_log|internet_gateway|main_route_table_association|nat_gateway|network_interface|prefix_list|route\b),aws_vpc_,vpc_,default_network_;default_route_;default_security_;default_subnet;default_internet_gateway;default_vpc;ec2_managed_;ec2_network_;ec2_subnet_;ec2_traffic_;egress_only_;flow_log;internet_gateway;main_route_;nat_;network_;prefix_list;route_;route\.;security_group;subnet;vpc_dhcp_;vpc_endpoint;vpc_ipv;vpc_network_performance;vpc_peering_;vpc_security_group_;vpc\.;vpcs\.,VPC (Virtual Private Cloud),Amazon,x,,,x,,,,,,Part of EC2 vpc-lattice,vpclattice,vpclattice,vpclattice,,vpclattice,,,VPCLattice,VPCLattice,,,2,,aws_vpclattice_,,vpclattice_,VPC Lattice,Amazon,,,,,,,VPC Lattice,ListServices,, ,,,,,ipam,ec2,,IPAM,,,,,aws_vpc_ipam,aws_ipam_,ipam_,vpc_ipam,VPC IPAM (IP Address Manager),Amazon,x,,,x,,,,,,Part of EC2 ,,,,,vpnclient,ec2,,ClientVPN,,,,,aws_ec2_client_vpn,aws_vpnclient_,vpnclient_,ec2_client_vpn_,VPN (Client),AWS,x,,,x,,,,,,Part of EC2 From acbe205730531dcc4a6391a79f528fcfbe2d109a Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Mon, 10 Jun 2024 17:15:44 +0100 Subject: [PATCH 17/19] Add missing newline --- names/data/names_data.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/names/data/names_data.csv b/names/data/names_data.csv index 7902b6460758..0fe2e255e86e 100644 --- a/names/data/names_data.csv +++ b/names/data/names_data.csv @@ -395,4 +395,4 @@ workspaces-web,workspacesweb,workspacesweb,workspacesweb,,workspacesweb,,,WorkSp xray,xray,xray,xray,,xray,,,XRay,XRay,,,2,,aws_xray_,,xray_,X-Ray,AWS,,,,,,,XRay,ListResourcePolicies,,, verifiedpermissions,verifiedpermissions,verifiedpermissions,verifiedpermissions,,verifiedpermissions,,,VerifiedPermissions,VerifiedPermissions,,,2,,aws_verifiedpermissions_,,verifiedpermissions_,Verified Permissions,Amazon,,,,,,,VerifiedPermissions,ListPolicyStores,,, codecatalyst,codecatalyst,codecatalyst,codecatalyst,,codecatalyst,,,CodeCatalyst,CodeCatalyst,,,2,,aws_codecatalyst_,,codecatalyst_,CodeCatalyst,Amazon,,,,,,,CodeCatalyst,ListAccessTokens,,, -mediapackagev2,mediapackagev2,mediapackagev2,mediapackagev2,,mediapackagev2,,,MediaPackageV2,MediaPackageV2,,,2,aws_media_packagev2_,aws_mediapackagev2_,,media_packagev2_,Elemental MediaPackage Version 2,AWS,,,,,,,MediaPackageV2,ListChannelGroups,,, \ No newline at end of file +mediapackagev2,mediapackagev2,mediapackagev2,mediapackagev2,,mediapackagev2,,,MediaPackageV2,MediaPackageV2,,,2,aws_media_packagev2_,aws_mediapackagev2_,,media_packagev2_,Elemental MediaPackage Version 2,AWS,,,,,,,MediaPackageV2,ListChannelGroups,,, From 1968eb84e9cb40a5d9c932cd0db9b8e8579e5dff Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Mon, 10 Jun 2024 17:18:00 +0100 Subject: [PATCH 18/19] Undo debug change --- GNUmakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GNUmakefile b/GNUmakefile index 762c0eebca33..b3b79301d840 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -280,7 +280,7 @@ fumpt: ## Run gofumpt gen: prereq-go ## Run all Go generators @echo "make: Running Go generators..." - $(GO_VER) generate -v ./... + $(GO_VER) generate ./... # Generate service package lists last as they may depend on output of earlier generators. $(GO_VER) generate ./internal/provider $(GO_VER) generate ./internal/sweep From 8db4d7dc2f71b78925afe914bd3e268313e905ce Mon Sep 17 00:00:00 2001 From: PeterSzegedi Date: Mon, 10 Jun 2024 17:36:51 +0100 Subject: [PATCH 19/19] Undo debug change --- .github/labeler-pr-triage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/labeler-pr-triage.yml b/.github/labeler-pr-triage.yml index db7647e0ff8c..33fbe47ccbd8 100644 --- a/.github/labeler-pr-triage.yml +++ b/.github/labeler-pr-triage.yml @@ -2170,11 +2170,11 @@ service/vpc: - changed-files: - any-glob-to-any-file: - 'internal/service/ec2/**/vpc_*' + - 'website/**/default_internet_gateway*' - 'website/**/default_network_*' - 'website/**/default_route_*' - 'website/**/default_security_*' - 'website/**/default_subnet*' - - 'website/**/default_internet_gateway*' - 'website/**/default_vpc*' - 'website/**/ec2_managed_*' - 'website/**/ec2_network_*'