Skip to content

Commit 102c77c

Browse files
authored
Merge pull request #45023 from hashicorp/f-aws_ec2_image_block_public_access-add-region
r/aws_ec2_image_block_public_access: Add `region` argument
2 parents 70dee92 + 805a5d6 commit 102c77c

File tree

14 files changed

+244
-32
lines changed

14 files changed

+244
-32
lines changed

.changelog/45023.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
resource/aws_ec2_image_block_public_access: Add `region` argument
3+
```

internal/generate/servicepackage/main.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ type ResourceDatum struct {
238238
HasV6_0SDKv2Fix bool
239239
HasIdentityFix bool
240240
IdentityVersion int64
241+
SDKv2IdentityUpgraders []string
241242
CustomInherentRegionIdentity bool
242243
customIdentityAttribute string
243244
CustomInherentRegionParser string
@@ -565,6 +566,11 @@ func (v *visitor) processFuncDecl(funcDecl *ast.FuncDecl) {
565566
d.IdentityVersion = i
566567
}
567568

569+
if attr, ok := args.Keyword["sdkV2IdentityUpgraders"]; ok {
570+
attrs := strings.Split(attr, ";")
571+
d.SDKv2IdentityUpgraders = attrs
572+
}
573+
568574
case "CustomInherentRegionIdentity":
569575
d.CustomInherentRegionIdentity = true
570576
d.WrappedImport = true

internal/generate/servicepackage/service_package_gen.go.gtpl

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,16 @@ inttypes.StringIdentityAttribute(
2929
{{- if .HasIdentityFix }}
3030
inttypes.WithIdentityFix(),
3131
{{ end -}}
32+
{{- if .IdentityVersion }}
33+
inttypes.WithVersion({{ .IdentityVersion }}),
34+
{{ end -}}
35+
{{- if gt (len .SDKv2IdentityUpgraders) 0 }}
36+
inttypes.WithSDKv2IdentityUpgraders(
37+
{{- range .SDKv2IdentityUpgraders -}}
38+
{{.}},
39+
{{- end -}}
40+
),
41+
{{ end -}}
3242
{{- end }}
3343

3444
package {{ .ProviderPackage }}
@@ -452,9 +462,6 @@ func (p *servicePackage) SDKResources(ctx context.Context) []*inttypes.ServicePa
452462
{{- end }}
453463
{{- if $value.HasResourceIdentity }}
454464
Identity:
455-
{{- if $value.IdentityVersion }}
456-
inttypes.VersionedIdentity({{ $value.IdentityVersion }},
457-
{{- end -}}
458465
{{- if gt (len $value.IdentityAttributes) 1 }}
459466
{{- if or $.IsGlobal $value.IsGlobal }}
460467
inttypes.GlobalParameterizedIdentity([]inttypes.IdentityAttribute{
@@ -522,9 +529,6 @@ func (p *servicePackage) SDKResources(ctx context.Context) []*inttypes.ServicePa
522529
{{- template "SDKv2CommonIdentityOpts" . }}
523530
),
524531
{{- end -}}
525-
{{- if $value.IdentityVersion -}}
526-
),
527-
{{- end }}
528532
{{- end }}
529533
{{- if $value.WrappedImport }}
530534
Import: inttypes.SDKv2Import{
@@ -574,9 +578,6 @@ func (p *servicePackage) SDKListResources(ctx context.Context) iter.Seq[*inttype
574578
{{- end }}
575579
{{- if $value.HasResourceIdentity }}
576580
Identity:
577-
{{- if $value.IdentityVersion }}
578-
inttypes.VersionedIdentity({{ $value.IdentityVersion }},
579-
{{- end -}}
580581
{{- if gt (len $value.IdentityAttributes) 1 }}
581582
{{- if or $.IsGlobal $value.IsGlobal }}
582583
inttypes.GlobalParameterizedIdentity([]inttypes.IdentityAttribute{
@@ -660,9 +661,6 @@ func (p *servicePackage) SDKListResources(ctx context.Context) iter.Seq[*inttype
660661
{{- template "SDKv2CommonIdentityOpts" . }}
661662
),
662663
{{- end -}}
663-
{{- if $value.IdentityVersion }}
664-
),
665-
{{- end }}
666664
{{- end }}
667665
},
668666
{{- end }}

internal/provider/sdkv2/identity_interceptor.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,8 @@ func newIdentityInterceptor(identitySpec *inttypes.Identity) interceptorInvocati
147147

148148
func newResourceIdentity(v inttypes.Identity) *schema.ResourceIdentity {
149149
return &schema.ResourceIdentity{
150-
Version: v.Version(),
150+
Version: v.Version(),
151+
IdentityUpgraders: v.SDKv2IdentityUpgraders(),
151152
SchemaFunc: func() map[string]*schema.Schema {
152153
return identity.NewIdentitySchema(v)
153154
},

internal/service/ec2/ec2_image_block_public_access.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,14 @@ import (
2222
)
2323

2424
// @SDKResource("aws_ec2_image_block_public_access", name="Image Block Public Access")
25-
// @Region(global=true)
2625
// @SingletonIdentity
26+
// @IdentityVersion(1, sdkV2IdentityUpgraders="imageBlockPublicAccessIdentityUpgradeV0")
2727
// @V60SDKv2Fix
2828
// @NoImport
2929
// @Testing(checkDestroyNoop=true)
3030
// @Testing(hasExistsFunction=false)
3131
// @Testing(generator=false)
32+
// @Testing(identityTest=false)
3233
func resourceImageBlockPublicAccess() *schema.Resource {
3334
return &schema.Resource{
3435
CreateWithoutTimeout: resourceImageBlockPublicAccessPut,
@@ -108,6 +109,14 @@ func resourceImageBlockPublicAccessRead(ctx context.Context, d *schema.ResourceD
108109
return diags
109110
}
110111

112+
var imageBlockPublicAccessIdentityUpgradeV0 = schema.IdentityUpgrader{
113+
Version: 0,
114+
Upgrade: func(ctx context.Context, rawState map[string]any, meta any) (map[string]any, error) {
115+
rawState[names.AttrRegion] = meta.(*conns.AWSClient).Region(ctx)
116+
return rawState, nil
117+
},
118+
}
119+
111120
func imageBlockPublicAccessDisabledState_Values() []string {
112121
return enum.Values[awstypes.ImageBlockPublicAccessDisabledState]()
113122
}

internal/service/ec2/ec2_image_block_public_access_identity_gen_test.go renamed to internal/service/ec2/ec2_image_block_public_access_identity_test.go

Lines changed: 144 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
// Code generated by internal/generate/identitytests/main.go; DO NOT EDIT.
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
23

34
package ec2_test
45

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

22+
// This code was initially generated by internal/generate/identitytests/main.go and then
23+
// modified by hand to deal with resource identity schema migration.
24+
2125
func testAccEC2ImageBlockPublicAccess_IdentitySerial(t *testing.T) {
2226
t.Helper()
2327

2428
testCases := map[string]func(t *testing.T){
2529
acctest.CtBasic: testAccEC2ImageBlockPublicAccess_Identity_Basic,
2630
"ExistingResource": testAccEC2ImageBlockPublicAccess_Identity_ExistingResource,
2731
"ExistingResourceNoRefresh": testAccEC2ImageBlockPublicAccess_Identity_ExistingResource_NoRefresh_NoChange,
32+
"RegionOverride": testAccEC2ImageBlockPublicAccess_Identity_RegionOverride,
33+
"Upgrade": testAccEC2ImageBlockPublicAccess_Identity_Upgrade,
34+
"UpgradeNoRefresh": testAccEC2ImageBlockPublicAccess_Identity_Upgrade_NoRefresh,
2835
}
2936

3037
acctest.RunSerialTests1Level(t, testCases, 0)
@@ -50,8 +57,43 @@ func testAccEC2ImageBlockPublicAccess_Identity_Basic(t *testing.T) {
5057
ConfigVariables: config.Variables{},
5158
ConfigStateChecks: []statecheck.StateCheck{
5259
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New(names.AttrID), tfknownvalue.AccountID()),
60+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New(names.AttrRegion), knownvalue.StringExact(acctest.Region())),
5361
statecheck.ExpectIdentity(resourceName, map[string]knownvalue.Check{
5462
names.AttrAccountID: tfknownvalue.AccountID(),
63+
names.AttrRegion: knownvalue.StringExact(acctest.Region()),
64+
}),
65+
},
66+
},
67+
},
68+
})
69+
}
70+
71+
func testAccEC2ImageBlockPublicAccess_Identity_RegionOverride(t *testing.T) {
72+
ctx := acctest.Context(t)
73+
74+
resourceName := "aws_ec2_image_block_public_access.test"
75+
76+
acctest.Test(ctx, t, resource.TestCase{
77+
TerraformVersionChecks: []tfversion.TerraformVersionCheck{
78+
tfversion.SkipBelow(tfversion.Version1_12_0),
79+
},
80+
PreCheck: func() { acctest.PreCheck(ctx, t) },
81+
ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID),
82+
CheckDestroy: acctest.CheckDestroyNoop,
83+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories,
84+
Steps: []resource.TestStep{
85+
// Step 1: Setup
86+
{
87+
ConfigDirectory: config.StaticDirectory("testdata/ImageBlockPublicAccess/region_override/"),
88+
ConfigVariables: config.Variables{
89+
"region": config.StringVariable(acctest.AlternateRegion()),
90+
},
91+
ConfigStateChecks: []statecheck.StateCheck{
92+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New(names.AttrID), tfknownvalue.AccountID()),
93+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New(names.AttrRegion), knownvalue.StringExact(acctest.AlternateRegion())),
94+
statecheck.ExpectIdentity(resourceName, map[string]knownvalue.Check{
95+
names.AttrAccountID: tfknownvalue.AccountID(),
96+
names.AttrRegion: knownvalue.StringExact(acctest.AlternateRegion()),
5597
}),
5698
},
5799
},
@@ -116,6 +158,7 @@ func testAccEC2ImageBlockPublicAccess_Identity_ExistingResource(t *testing.T) {
116158
ConfigStateChecks: []statecheck.StateCheck{
117159
statecheck.ExpectIdentity(resourceName, map[string]knownvalue.Check{
118160
names.AttrAccountID: tfknownvalue.AccountID(),
161+
names.AttrRegion: knownvalue.StringExact(acctest.Region()),
119162
}),
120163
},
121164
},
@@ -159,3 +202,103 @@ func testAccEC2ImageBlockPublicAccess_Identity_ExistingResource_NoRefresh_NoChan
159202
},
160203
})
161204
}
205+
206+
// Resource Identity version 1 was added in version 6.20.0
207+
func testAccEC2ImageBlockPublicAccess_Identity_Upgrade(t *testing.T) {
208+
ctx := acctest.Context(t)
209+
210+
resourceName := "aws_ec2_image_block_public_access.test"
211+
212+
acctest.Test(ctx, t, resource.TestCase{
213+
TerraformVersionChecks: []tfversion.TerraformVersionCheck{
214+
tfversion.SkipBelow(tfversion.Version1_12_0),
215+
},
216+
PreCheck: func() { acctest.PreCheck(ctx, t) },
217+
ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID),
218+
CheckDestroy: acctest.CheckDestroyNoop,
219+
Steps: []resource.TestStep{
220+
// Step 1: Create with Identity version 0
221+
{
222+
ConfigDirectory: config.StaticDirectory("testdata/ImageBlockPublicAccess/basic_v6.19.0/"),
223+
ConfigVariables: config.Variables{},
224+
ConfigStateChecks: []statecheck.StateCheck{
225+
tfstatecheck.ExpectHasIdentity(resourceName),
226+
},
227+
},
228+
229+
// Step 2: Current version
230+
{
231+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories,
232+
ConfigDirectory: config.StaticDirectory("testdata/ImageBlockPublicAccess/basic/"),
233+
ConfigVariables: config.Variables{},
234+
ConfigPlanChecks: resource.ConfigPlanChecks{
235+
PreApply: []plancheck.PlanCheck{
236+
plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionNoop),
237+
},
238+
PostApplyPostRefresh: []plancheck.PlanCheck{
239+
plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionNoop),
240+
},
241+
},
242+
ConfigStateChecks: []statecheck.StateCheck{
243+
statecheck.ExpectIdentity(resourceName, map[string]knownvalue.Check{
244+
names.AttrAccountID: tfknownvalue.AccountID(),
245+
names.AttrRegion: knownvalue.StringExact(acctest.Region()),
246+
}),
247+
},
248+
},
249+
},
250+
})
251+
}
252+
253+
// Resource Identity version 1 was added in version 6.20.0
254+
func testAccEC2ImageBlockPublicAccess_Identity_Upgrade_NoRefresh(t *testing.T) {
255+
ctx := acctest.Context(t)
256+
257+
resourceName := "aws_ec2_image_block_public_access.test"
258+
259+
acctest.Test(ctx, t, resource.TestCase{
260+
TerraformVersionChecks: []tfversion.TerraformVersionCheck{
261+
tfversion.SkipBelow(tfversion.Version1_12_0),
262+
},
263+
PreCheck: func() { acctest.PreCheck(ctx, t) },
264+
ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID),
265+
CheckDestroy: acctest.CheckDestroyNoop,
266+
AdditionalCLIOptions: &resource.AdditionalCLIOptions{
267+
Plan: resource.PlanOptions{
268+
NoRefresh: true,
269+
},
270+
},
271+
Steps: []resource.TestStep{
272+
// Step 1: Create with Identity version 0
273+
{
274+
ConfigDirectory: config.StaticDirectory("testdata/ImageBlockPublicAccess/basic_v6.19.0/"),
275+
ConfigVariables: config.Variables{},
276+
ConfigStateChecks: []statecheck.StateCheck{
277+
tfstatecheck.ExpectHasIdentity(resourceName),
278+
},
279+
},
280+
281+
// Step 2: Current version
282+
{
283+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories,
284+
ConfigDirectory: config.StaticDirectory("testdata/ImageBlockPublicAccess/basic/"),
285+
ConfigVariables: config.Variables{},
286+
ConfigPlanChecks: resource.ConfigPlanChecks{
287+
PreApply: []plancheck.PlanCheck{
288+
// New "region" attribute.
289+
plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionUpdate),
290+
},
291+
PostApplyPostRefresh: []plancheck.PlanCheck{
292+
plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionNoop),
293+
},
294+
},
295+
ConfigStateChecks: []statecheck.StateCheck{
296+
statecheck.ExpectIdentity(resourceName, map[string]knownvalue.Check{
297+
names.AttrAccountID: tfknownvalue.AccountID(),
298+
names.AttrRegion: knownvalue.StringExact(acctest.Region()),
299+
}),
300+
},
301+
},
302+
},
303+
})
304+
}

internal/service/ec2/service_package_gen.go

Lines changed: 5 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Copyright (c) HashiCorp, Inc.
2+
# SPDX-License-Identifier: MPL-2.0
3+
4+
resource "aws_ec2_image_block_public_access" "test" {
5+
state = "block-new-sharing"
6+
}
7+
8+
terraform {
9+
required_providers {
10+
aws = {
11+
source = "hashicorp/aws"
12+
version = "6.19.0"
13+
}
14+
}
15+
}
16+
17+
provider "aws" {}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Copyright (c) HashiCorp, Inc.
2+
# SPDX-License-Identifier: MPL-2.0
3+
4+
resource "aws_ec2_image_block_public_access" "test" {
5+
region = var.region
6+
7+
state = "block-new-sharing"
8+
}
9+
10+
11+
variable "region" {
12+
description = "Region to deploy resource in"
13+
type = string
14+
nullable = false
15+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
resource "aws_ec2_image_block_public_access" "test" {
2+
{{- template "region" }}
23
state = "block-new-sharing"
34
}

0 commit comments

Comments
 (0)