From 403fa76331d4a8c131e93e77cf7e228e7cc995f7 Mon Sep 17 00:00:00 2001 From: Oussama Bounaim <1151352+obounaim@users.noreply.github.com> Date: Fri, 10 May 2024 06:43:43 +0000 Subject: [PATCH 1/4] Init ebs_snapshot_block_public_access module and test files --- internal/service/ec2/ebs_snapshot_block_public_access.go | 4 ++++ .../service/ec2/ebs_snapshot_block_public_access_test.go | 4 ++++ .../d/ebs_snapshot_block_public_access.html.markdown | 9 +++++++++ 3 files changed, 17 insertions(+) create mode 100644 internal/service/ec2/ebs_snapshot_block_public_access.go create mode 100644 internal/service/ec2/ebs_snapshot_block_public_access_test.go create mode 100644 website/docs/d/ebs_snapshot_block_public_access.html.markdown diff --git a/internal/service/ec2/ebs_snapshot_block_public_access.go b/internal/service/ec2/ebs_snapshot_block_public_access.go new file mode 100644 index 00000000000..dd6f5620d2b --- /dev/null +++ b/internal/service/ec2/ebs_snapshot_block_public_access.go @@ -0,0 +1,4 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package ec2 diff --git a/internal/service/ec2/ebs_snapshot_block_public_access_test.go b/internal/service/ec2/ebs_snapshot_block_public_access_test.go new file mode 100644 index 00000000000..4cafa2af8b3 --- /dev/null +++ b/internal/service/ec2/ebs_snapshot_block_public_access_test.go @@ -0,0 +1,4 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package ec2_test diff --git a/website/docs/d/ebs_snapshot_block_public_access.html.markdown b/website/docs/d/ebs_snapshot_block_public_access.html.markdown new file mode 100644 index 00000000000..b4fc937d07f --- /dev/null +++ b/website/docs/d/ebs_snapshot_block_public_access.html.markdown @@ -0,0 +1,9 @@ +--- +subcategory: "EBS (EC2)" +layout: "aws" +page_title: "AWS: aws_ebs_snapshot_block_public_access" +description: |- + Manages EBS snapshot public access block configuration +--- + +# Resource: aws_ebs_snapshot_block_public_access From d0d0f8adbf237d24793a39dde1089fb8389f4ba5 Mon Sep 17 00:00:00 2001 From: Oussama Bounaim <1151352+obounaim@users.noreply.github.com> Date: Fri, 10 May 2024 19:18:56 +0000 Subject: [PATCH 2/4] First implementation of schema functions --- .../ec2/ebs_snapshot_block_public_access.go | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/internal/service/ec2/ebs_snapshot_block_public_access.go b/internal/service/ec2/ebs_snapshot_block_public_access.go index dd6f5620d2b..c0dc43ba808 100644 --- a/internal/service/ec2/ebs_snapshot_block_public_access.go +++ b/internal/service/ec2/ebs_snapshot_block_public_access.go @@ -2,3 +2,103 @@ // SPDX-License-Identifier: MPL-2.0 package ec2 + +import ( + "context" + + "github.com/aws/aws-sdk-go-v2/service/ec2" + "github.com/aws/aws-sdk-go-v2/service/ec2/types" + "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/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" +) + +// @SDKResource("aws_ebs_snapshot_block_public_access") +func ResourceEBSSnapshotBlockPublicAccess() *schema.Resource { + return &schema.Resource{ + CreateWithoutTimeout: resourceEBSSnapshotBlockPublicAccessCreate, + ReadWithoutTimeout: resourceEBSSnapshotBlockPublicAccessRead, + UpdateWithoutTimeout: resourceEBSSnapshotBlockPublicAccessUpdate, + DeleteWithoutTimeout: resourceEBSSnapshotBlockPublicAccessDelete, + + Importer: &schema.ResourceImporter{ + StateContext: schema.ImportStatePassthroughContext, + }, + + Schema: map[string]*schema.Schema{ + "state": { + Type: schema.TypeString, + Required: true, + ValidateDiagFunc: enum.Validate[types.SnapshotBlockPublicAccessState](), + }, + }, + } +} + +func resourceEBSSnapshotBlockPublicAccessCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + var diags diag.Diagnostics + conn := meta.(*conns.AWSClient).EC2Client(ctx) + + input := &ec2.EnableSnapshotBlockPublicAccessInput{ + State: types.SnapshotBlockPublicAccessState(d.Get("state").(string)), + } + + _, err := conn.EnableSnapshotBlockPublicAccess(ctx, input) + + if err != nil { + return sdkdiag.AppendErrorf(diags, "enabling EBS snapshot block public access: %s", err) + } + + d.SetId(meta.(*conns.AWSClient).Region) + + return append(diags, resourceEBSSnapshotBlockPublicAccessRead(ctx, d, meta)...) +} + +func resourceEBSSnapshotBlockPublicAccessRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + var diags diag.Diagnostics + conn := meta.(*conns.AWSClient).EC2Client(ctx) + + output, err := conn.GetSnapshotBlockPublicAccessState(ctx, &ec2.GetSnapshotBlockPublicAccessStateInput{}) + + if err != nil { + return sdkdiag.AppendErrorf(diags, "reading EBS snapshot block public access: %s", err) + } + + d.Set("state", string(output.State)) + + return diags +} + +func resourceEBSSnapshotBlockPublicAccessUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + var diags diag.Diagnostics + conn := meta.(*conns.AWSClient).EC2Client(ctx) + + input := &ec2.EnableSnapshotBlockPublicAccessInput{ + State: types.SnapshotBlockPublicAccessState(d.Get("state").(string)), + } + + _, err := conn.EnableSnapshotBlockPublicAccess(ctx, input) + + if err != nil { + return sdkdiag.AppendErrorf(diags, "update EBS snapshot block public access: %s", err) + } + + d.SetId(meta.(*conns.AWSClient).Region) + + return append(diags, resourceEBSSnapshotBlockPublicAccessRead(ctx, d, meta)...) +} + +func resourceEBSSnapshotBlockPublicAccessDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + var diags diag.Diagnostics + conn := meta.(*conns.AWSClient).EC2Client(ctx) + + _, err := conn.DisableSnapshotBlockPublicAccess(ctx, &ec2.DisableSnapshotBlockPublicAccessInput{}) + + if err != nil { + return sdkdiag.AppendErrorf(diags, "disabling EBS snapshot block public access: %s", err) + } + + return diags +} From cac9ec3662caa25c585c7553daf920ab2017b898 Mon Sep 17 00:00:00 2001 From: Oussama Bounaim <1151352+obounaim@users.noreply.github.com> Date: Sat, 27 Jul 2024 20:05:43 +0200 Subject: [PATCH 3/4] Move documentation file --- .../docs/{d => r}/ebs_snapshot_block_public_access.html.markdown | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename website/docs/{d => r}/ebs_snapshot_block_public_access.html.markdown (100%) diff --git a/website/docs/d/ebs_snapshot_block_public_access.html.markdown b/website/docs/r/ebs_snapshot_block_public_access.html.markdown similarity index 100% rename from website/docs/d/ebs_snapshot_block_public_access.html.markdown rename to website/docs/r/ebs_snapshot_block_public_access.html.markdown From 3c3a5907e098ab70339e0a11ffdc5a01640d113f Mon Sep 17 00:00:00 2001 From: Oussama Bounaim <1151352+obounaim@users.noreply.github.com> Date: Sat, 27 Jul 2024 20:18:32 +0200 Subject: [PATCH 4/4] Init tests --- .../ebs_snapshot_block_public_access_test.go | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/internal/service/ec2/ebs_snapshot_block_public_access_test.go b/internal/service/ec2/ebs_snapshot_block_public_access_test.go index 4cafa2af8b3..af943416c1f 100644 --- a/internal/service/ec2/ebs_snapshot_block_public_access_test.go +++ b/internal/service/ec2/ebs_snapshot_block_public_access_test.go @@ -2,3 +2,47 @@ // SPDX-License-Identifier: MPL-2.0 package ec2_test + +import ( + "fmt" + "testing" + + "github.com/aws/aws-sdk-go-v2/service/ec2/types" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-aws/internal/acctest" + "github.com/hashicorp/terraform-provider-aws/names" +) + +func TestAccSnapshotBlockPublicAccess_basic(t *testing.T) { + ctx := acctest.Context(t) + resourceName := "aws_ebs_snapshot_block_public_access.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckSnapshotBlockAccessDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccSnapshotBlockPublicAccess_basic(string(types.SnapshotBlockPublicAccessStateBlockAllSharing)), + Check: resource.ComposeTestCheckFunc( + testAccCheckSnapshotBlockPublicAccess(ctx, resourceName, false), + resource.TestCheckResourceAttr(resourceName, names.AttrEnabled, "false"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccSnapshotBlockPublicAccess_basic(status string) string { + return fmt.Sprintf(` +resource "aws_ebs_snapshot_block_public_access" "test" { + status = %[1]s +} +`, status) +}