Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .changelog/45023.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:bug
resource/aws_ec2_image_block_public_access: Add `region` argument
```
6 changes: 6 additions & 0 deletions internal/generate/servicepackage/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,7 @@ type ResourceDatum struct {
HasV6_0SDKv2Fix bool
HasIdentityFix bool
IdentityVersion int64
SDKv2IdentityUpgraders []string
CustomInherentRegionIdentity bool
customIdentityAttribute string
CustomInherentRegionParser string
Expand Down Expand Up @@ -565,6 +566,11 @@ func (v *visitor) processFuncDecl(funcDecl *ast.FuncDecl) {
d.IdentityVersion = i
}

if attr, ok := args.Keyword["sdkV2IdentityUpgraders"]; ok {
attrs := strings.Split(attr, ";")
d.SDKv2IdentityUpgraders = attrs
}

case "CustomInherentRegionIdentity":
d.CustomInherentRegionIdentity = true
d.WrappedImport = true
Expand Down
22 changes: 10 additions & 12 deletions internal/generate/servicepackage/service_package_gen.go.gtpl
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,16 @@ inttypes.StringIdentityAttribute(
{{- if .HasIdentityFix }}
inttypes.WithIdentityFix(),
{{ end -}}
{{- if .IdentityVersion }}
inttypes.WithVersion({{ .IdentityVersion }}),
{{ end -}}
{{- if gt (len .SDKv2IdentityUpgraders) 0 }}
inttypes.WithSDKv2IdentityUpgraders(
{{- range .SDKv2IdentityUpgraders -}}
{{.}},
{{- end -}}
),
{{ end -}}
{{- end }}

package {{ .ProviderPackage }}
Expand Down Expand Up @@ -452,9 +462,6 @@ func (p *servicePackage) SDKResources(ctx context.Context) []*inttypes.ServicePa
{{- end }}
{{- if $value.HasResourceIdentity }}
Identity:
{{- if $value.IdentityVersion }}
inttypes.VersionedIdentity({{ $value.IdentityVersion }},
{{- end -}}
{{- if gt (len $value.IdentityAttributes) 1 }}
{{- if or $.IsGlobal $value.IsGlobal }}
inttypes.GlobalParameterizedIdentity([]inttypes.IdentityAttribute{
Expand Down Expand Up @@ -522,9 +529,6 @@ func (p *servicePackage) SDKResources(ctx context.Context) []*inttypes.ServicePa
{{- template "SDKv2CommonIdentityOpts" . }}
),
{{- end -}}
{{- if $value.IdentityVersion -}}
),
{{- end }}
{{- end }}
{{- if $value.WrappedImport }}
Import: inttypes.SDKv2Import{
Expand Down Expand Up @@ -574,9 +578,6 @@ func (p *servicePackage) SDKListResources(ctx context.Context) iter.Seq[*inttype
{{- end }}
{{- if $value.HasResourceIdentity }}
Identity:
{{- if $value.IdentityVersion }}
inttypes.VersionedIdentity({{ $value.IdentityVersion }},
{{- end -}}
{{- if gt (len $value.IdentityAttributes) 1 }}
{{- if or $.IsGlobal $value.IsGlobal }}
inttypes.GlobalParameterizedIdentity([]inttypes.IdentityAttribute{
Expand Down Expand Up @@ -660,9 +661,6 @@ func (p *servicePackage) SDKListResources(ctx context.Context) iter.Seq[*inttype
{{- template "SDKv2CommonIdentityOpts" . }}
),
{{- end -}}
{{- if $value.IdentityVersion }}
),
{{- end }}
{{- end }}
},
{{- end }}
Expand Down
3 changes: 2 additions & 1 deletion internal/provider/sdkv2/identity_interceptor.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,8 @@ func newIdentityInterceptor(identitySpec *inttypes.Identity) interceptorInvocati

func newResourceIdentity(v inttypes.Identity) *schema.ResourceIdentity {
return &schema.ResourceIdentity{
Version: v.Version(),
Version: v.Version(),
IdentityUpgraders: v.SDKv2IdentityUpgraders(),
SchemaFunc: func() map[string]*schema.Schema {
return identity.NewIdentitySchema(v)
},
Expand Down
11 changes: 10 additions & 1 deletion internal/service/ec2/ec2_image_block_public_access.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,14 @@ import (
)

// @SDKResource("aws_ec2_image_block_public_access", name="Image Block Public Access")
// @Region(global=true)
// @SingletonIdentity
// @IdentityVersion(1, sdkV2IdentityUpgraders="imageBlockPublicAccessIdentityUpgradeV0")
// @V60SDKv2Fix
// @NoImport
// @Testing(checkDestroyNoop=true)
// @Testing(hasExistsFunction=false)
// @Testing(generator=false)
// @Testing(identityTest=false)
func resourceImageBlockPublicAccess() *schema.Resource {
return &schema.Resource{
CreateWithoutTimeout: resourceImageBlockPublicAccessPut,
Expand Down Expand Up @@ -108,6 +109,14 @@ func resourceImageBlockPublicAccessRead(ctx context.Context, d *schema.ResourceD
return diags
}

var imageBlockPublicAccessIdentityUpgradeV0 = schema.IdentityUpgrader{
Version: 0,
Upgrade: func(ctx context.Context, rawState map[string]any, meta any) (map[string]any, error) {
rawState[names.AttrRegion] = meta.(*conns.AWSClient).Region(ctx)
return rawState, nil
},
}

func imageBlockPublicAccessDisabledState_Values() []string {
return enum.Values[awstypes.ImageBlockPublicAccessDisabledState]()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// Code generated by internal/generate/identitytests/main.go; DO NOT EDIT.
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

package ec2_test

Expand All @@ -18,13 +19,19 @@ import (
"github.com/hashicorp/terraform-provider-aws/names"
)

// This code was initially generated by internal/generate/identitytests/main.go and then
// modified by hand to deal with resource identity schema migration.

func testAccEC2ImageBlockPublicAccess_IdentitySerial(t *testing.T) {
t.Helper()

testCases := map[string]func(t *testing.T){
acctest.CtBasic: testAccEC2ImageBlockPublicAccess_Identity_Basic,
"ExistingResource": testAccEC2ImageBlockPublicAccess_Identity_ExistingResource,
"ExistingResourceNoRefresh": testAccEC2ImageBlockPublicAccess_Identity_ExistingResource_NoRefresh_NoChange,
"RegionOverride": testAccEC2ImageBlockPublicAccess_Identity_RegionOverride,
"Upgrade": testAccEC2ImageBlockPublicAccess_Identity_Upgrade,
"UpgradeNoRefresh": testAccEC2ImageBlockPublicAccess_Identity_Upgrade_NoRefresh,
}

acctest.RunSerialTests1Level(t, testCases, 0)
Expand All @@ -50,8 +57,43 @@ func testAccEC2ImageBlockPublicAccess_Identity_Basic(t *testing.T) {
ConfigVariables: config.Variables{},
ConfigStateChecks: []statecheck.StateCheck{
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New(names.AttrID), tfknownvalue.AccountID()),
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New(names.AttrRegion), knownvalue.StringExact(acctest.Region())),
statecheck.ExpectIdentity(resourceName, map[string]knownvalue.Check{
names.AttrAccountID: tfknownvalue.AccountID(),
names.AttrRegion: knownvalue.StringExact(acctest.Region()),
}),
},
},
},
})
}

func testAccEC2ImageBlockPublicAccess_Identity_RegionOverride(t *testing.T) {
ctx := acctest.Context(t)

resourceName := "aws_ec2_image_block_public_access.test"

acctest.Test(ctx, t, resource.TestCase{
TerraformVersionChecks: []tfversion.TerraformVersionCheck{
tfversion.SkipBelow(tfversion.Version1_12_0),
},
PreCheck: func() { acctest.PreCheck(ctx, t) },
ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID),
CheckDestroy: acctest.CheckDestroyNoop,
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories,
Steps: []resource.TestStep{
// Step 1: Setup
{
ConfigDirectory: config.StaticDirectory("testdata/ImageBlockPublicAccess/region_override/"),
ConfigVariables: config.Variables{
"region": config.StringVariable(acctest.AlternateRegion()),
},
ConfigStateChecks: []statecheck.StateCheck{
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New(names.AttrID), tfknownvalue.AccountID()),
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New(names.AttrRegion), knownvalue.StringExact(acctest.AlternateRegion())),
statecheck.ExpectIdentity(resourceName, map[string]knownvalue.Check{
names.AttrAccountID: tfknownvalue.AccountID(),
names.AttrRegion: knownvalue.StringExact(acctest.AlternateRegion()),
}),
},
},
Expand Down Expand Up @@ -116,6 +158,7 @@ func testAccEC2ImageBlockPublicAccess_Identity_ExistingResource(t *testing.T) {
ConfigStateChecks: []statecheck.StateCheck{
statecheck.ExpectIdentity(resourceName, map[string]knownvalue.Check{
names.AttrAccountID: tfknownvalue.AccountID(),
names.AttrRegion: knownvalue.StringExact(acctest.Region()),
}),
},
},
Expand Down Expand Up @@ -159,3 +202,103 @@ func testAccEC2ImageBlockPublicAccess_Identity_ExistingResource_NoRefresh_NoChan
},
})
}

// Resource Identity version 1 was added in version 6.20.0
func testAccEC2ImageBlockPublicAccess_Identity_Upgrade(t *testing.T) {
ctx := acctest.Context(t)

resourceName := "aws_ec2_image_block_public_access.test"

acctest.Test(ctx, t, resource.TestCase{
TerraformVersionChecks: []tfversion.TerraformVersionCheck{
tfversion.SkipBelow(tfversion.Version1_12_0),
},
PreCheck: func() { acctest.PreCheck(ctx, t) },
ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID),
CheckDestroy: acctest.CheckDestroyNoop,
Steps: []resource.TestStep{
// Step 1: Create with Identity version 0
{
ConfigDirectory: config.StaticDirectory("testdata/ImageBlockPublicAccess/basic_v6.19.0/"),
ConfigVariables: config.Variables{},
ConfigStateChecks: []statecheck.StateCheck{
tfstatecheck.ExpectHasIdentity(resourceName),
},
},

// Step 2: Current version
{
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories,
ConfigDirectory: config.StaticDirectory("testdata/ImageBlockPublicAccess/basic/"),
ConfigVariables: config.Variables{},
ConfigPlanChecks: resource.ConfigPlanChecks{
PreApply: []plancheck.PlanCheck{
plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionNoop),
},
PostApplyPostRefresh: []plancheck.PlanCheck{
plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionNoop),
},
},
ConfigStateChecks: []statecheck.StateCheck{
statecheck.ExpectIdentity(resourceName, map[string]knownvalue.Check{
names.AttrAccountID: tfknownvalue.AccountID(),
names.AttrRegion: knownvalue.StringExact(acctest.Region()),
}),
},
},
},
})
}

// Resource Identity version 1 was added in version 6.20.0
func testAccEC2ImageBlockPublicAccess_Identity_Upgrade_NoRefresh(t *testing.T) {
ctx := acctest.Context(t)

resourceName := "aws_ec2_image_block_public_access.test"

acctest.Test(ctx, t, resource.TestCase{
TerraformVersionChecks: []tfversion.TerraformVersionCheck{
tfversion.SkipBelow(tfversion.Version1_12_0),
},
PreCheck: func() { acctest.PreCheck(ctx, t) },
ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID),
CheckDestroy: acctest.CheckDestroyNoop,
AdditionalCLIOptions: &resource.AdditionalCLIOptions{
Plan: resource.PlanOptions{
NoRefresh: true,
},
},
Steps: []resource.TestStep{
// Step 1: Create with Identity version 0
{
ConfigDirectory: config.StaticDirectory("testdata/ImageBlockPublicAccess/basic_v6.19.0/"),
ConfigVariables: config.Variables{},
ConfigStateChecks: []statecheck.StateCheck{
tfstatecheck.ExpectHasIdentity(resourceName),
},
},

// Step 2: Current version
{
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories,
ConfigDirectory: config.StaticDirectory("testdata/ImageBlockPublicAccess/basic/"),
ConfigVariables: config.Variables{},
ConfigPlanChecks: resource.ConfigPlanChecks{
PreApply: []plancheck.PlanCheck{
// New "region" attribute.
plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate),
},
PostApplyPostRefresh: []plancheck.PlanCheck{
plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionNoop),
},
},
ConfigStateChecks: []statecheck.StateCheck{
statecheck.ExpectIdentity(resourceName, map[string]knownvalue.Check{
names.AttrAccountID: tfknownvalue.AccountID(),
names.AttrRegion: knownvalue.StringExact(acctest.Region()),
}),
},
},
},
})
}
7 changes: 5 additions & 2 deletions internal/service/ec2/service_package_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: MPL-2.0

resource "aws_ec2_image_block_public_access" "test" {
state = "block-new-sharing"
}

terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "6.19.0"
}
}
}

provider "aws" {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: MPL-2.0

resource "aws_ec2_image_block_public_access" "test" {
region = var.region

state = "block-new-sharing"
}


variable "region" {
description = "Region to deploy resource in"
type = string
nullable = false
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
resource "aws_ec2_image_block_public_access" "test" {
{{- template "region" }}
state = "block-new-sharing"
}
Loading
Loading