Skip to content

Commit ee77de7

Browse files
authored
Merge pull request #37450 from DanielRieske/f/migrate-ram-sdkv2
Migrate `ram` resources to AWS Go SDKv2
2 parents 5c5363c + 056ba07 commit ee77de7

25 files changed

+402
-388
lines changed

.changelog/37450.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
resource/aws_ram_principal_association: Correct plan-time validation of `principal` to fix `panic: unexpected format for ID parts ([...]), the following id parts indexes are blank ([1])`
3+
```

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ require (
132132
github.com/aws/aws-sdk-go-v2/service/pricing v1.28.2
133133
github.com/aws/aws-sdk-go-v2/service/qbusiness v1.6.1
134134
github.com/aws/aws-sdk-go-v2/service/qldb v1.21.5
135+
github.com/aws/aws-sdk-go-v2/service/ram v1.25.5
135136
github.com/aws/aws-sdk-go-v2/service/rbin v1.16.5
136137
github.com/aws/aws-sdk-go-v2/service/rds v1.78.1
137138
github.com/aws/aws-sdk-go-v2/service/redshift v1.44.1

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,8 @@ github.com/aws/aws-sdk-go-v2/service/qbusiness v1.6.1 h1:TjDg29LJwoLOe53kf5TJ7te
294294
github.com/aws/aws-sdk-go-v2/service/qbusiness v1.6.1/go.mod h1:GA+mlGvbl5shamVdR+zkQDrdExUQ9WAEnPlMtdiuVr8=
295295
github.com/aws/aws-sdk-go-v2/service/qldb v1.21.5 h1:wh+eFaiLFeISAoINkD9tLOJ/rrpLPy6sVhFXkEfKvxM=
296296
github.com/aws/aws-sdk-go-v2/service/qldb v1.21.5/go.mod h1:T789CzkMLwKq1b5MxcUfQeoUisJ6jJhciaZTtAQtUOU=
297+
github.com/aws/aws-sdk-go-v2/service/ram v1.25.5 h1:9g8PSZ1SmvmEAIu64JjfdTj+49+CL21DI8EL5jKEd4E=
298+
github.com/aws/aws-sdk-go-v2/service/ram v1.25.5/go.mod h1:ZDVnnA45kEAe24PtJOB3pgU0GdKeoRAJPIDCIVXal9c=
297299
github.com/aws/aws-sdk-go-v2/service/rbin v1.16.5 h1:/HQfwoS7nNnbuyrBAqJOCHSpYBzVKENQjY2JzsCiYxs=
298300
github.com/aws/aws-sdk-go-v2/service/rbin v1.16.5/go.mod h1:BUtbswz07qEjzGypmeUdtP53noKx1PBKAnX9Fe0Mul4=
299301
github.com/aws/aws-sdk-go-v2/service/rds v1.78.1 h1:D3XX2O6IzStNWEK2GU5EQTZVZ2r2Q4aRhWplndGIQR4=

internal/conns/awsclient_gen.go

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/service/ram/consts.go

-13
This file was deleted.

internal/service/ram/generate.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright (c) HashiCorp, Inc.
22
// SPDX-License-Identifier: MPL-2.0
33

4-
//go:generate go run ../../generate/tags/main.go -ListTagsInIDElem=ResourceShareArn -ServiceTagsSlice -TagInIDElem=ResourceShareArn -UpdateTags
4+
//go:generate go run ../../generate/tags/main.go -AWSSDKVersion=2 -ListTagsInIDElem=ResourceShareArn -ServiceTagsSlice -TagInIDElem=ResourceShareArn -UpdateTags
55
//go:generate go run ../../generate/servicepackage/main.go
66
// ONLY generate directives and package declaration! Do not add anything else to this file.
77

internal/service/ram/principal_association.go

+36-30
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,16 @@ import (
1010
"log"
1111
"time"
1212

13-
"github.com/aws/aws-sdk-go/aws"
14-
"github.com/aws/aws-sdk-go/service/ram"
15-
"github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr"
13+
"github.com/aws/aws-sdk-go-v2/aws"
14+
"github.com/aws/aws-sdk-go-v2/service/ram"
15+
awstypes "github.com/aws/aws-sdk-go-v2/service/ram/types"
1616
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1717
sdkid "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id"
1818
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
1919
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
2020
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
2121
"github.com/hashicorp/terraform-provider-aws/internal/conns"
22+
"github.com/hashicorp/terraform-provider-aws/internal/enum"
2223
"github.com/hashicorp/terraform-provider-aws/internal/errs"
2324
"github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag"
2425
"github.com/hashicorp/terraform-provider-aws/internal/flex"
@@ -44,9 +45,12 @@ func resourcePrincipalAssociation() *schema.Resource {
4445
Type: schema.TypeString,
4546
Required: true,
4647
ForceNew: true,
47-
ValidateFunc: validation.Any(
48-
verify.ValidAccountID,
49-
verify.ValidARN,
48+
ValidateFunc: validation.All(
49+
validation.StringIsNotEmpty,
50+
validation.Any(
51+
verify.ValidAccountID,
52+
verify.ValidARN,
53+
),
5054
),
5155
},
5256
"resource_share_arn": {
@@ -65,7 +69,7 @@ const (
6569

6670
func resourcePrincipalAssociationCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
6771
var diags diag.Diagnostics
68-
conn := meta.(*conns.AWSClient).RAMConn(ctx)
72+
conn := meta.(*conns.AWSClient).RAMClient(ctx)
6973

7074
resourceShareARN, principal := d.Get("resource_share_arn").(string), d.Get(names.AttrPrincipal).(string)
7175
id := errs.Must(flex.FlattenResourceId([]string{resourceShareARN, principal}, principalAssociationResourceIDPartCount, false))
@@ -82,11 +86,11 @@ func resourcePrincipalAssociationCreate(ctx context.Context, d *schema.ResourceD
8286

8387
input := &ram.AssociateResourceShareInput{
8488
ClientToken: aws.String(sdkid.UniqueId()),
85-
Principals: []*string{aws.String(principal)},
89+
Principals: []string{principal},
8690
ResourceShareArn: aws.String(resourceShareARN),
8791
}
8892

89-
_, err = conn.AssociateResourceShareWithContext(ctx, input)
93+
_, err = conn.AssociateResourceShare(ctx, input)
9094

9195
if err != nil {
9296
return sdkdiag.AppendErrorf(diags, "creating RAM Principal Association (%s): %s", id, err)
@@ -108,7 +112,7 @@ func resourcePrincipalAssociationCreate(ctx context.Context, d *schema.ResourceD
108112

109113
func resourcePrincipalAssociationRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
110114
var diags diag.Diagnostics
111-
conn := meta.(*conns.AWSClient).RAMConn(ctx)
115+
conn := meta.(*conns.AWSClient).RAMClient(ctx)
112116

113117
parts, err := flex.ExpandResourceId(d.Id(), principalAssociationResourceIDPartCount, false)
114118
if err != nil {
@@ -136,7 +140,7 @@ func resourcePrincipalAssociationRead(ctx context.Context, d *schema.ResourceDat
136140

137141
func resourcePrincipalAssociationDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
138142
var diags diag.Diagnostics
139-
conn := meta.(*conns.AWSClient).RAMConn(ctx)
143+
conn := meta.(*conns.AWSClient).RAMClient(ctx)
140144

141145
parts, err := flex.ExpandResourceId(d.Id(), principalAssociationResourceIDPartCount, false)
142146
if err != nil {
@@ -145,12 +149,12 @@ func resourcePrincipalAssociationDelete(ctx context.Context, d *schema.ResourceD
145149
resourceShareARN, principal := parts[0], parts[1]
146150

147151
log.Printf("[DEBUG] Deleting RAM Principal Association: %s", d.Id())
148-
_, err = conn.DisassociateResourceShareWithContext(ctx, &ram.DisassociateResourceShareInput{
149-
Principals: []*string{aws.String(principal)},
152+
_, err = conn.DisassociateResourceShare(ctx, &ram.DisassociateResourceShareInput{
153+
Principals: []string{principal},
150154
ResourceShareArn: aws.String(resourceShareARN),
151155
})
152156

153-
if tfawserr.ErrCodeEquals(err, ram.ErrCodeUnknownResourceException) {
157+
if errs.IsA[*awstypes.UnknownResourceException](err) {
154158
return diags
155159
}
156160

@@ -165,11 +169,11 @@ func resourcePrincipalAssociationDelete(ctx context.Context, d *schema.ResourceD
165169
return diags
166170
}
167171

168-
func findPrincipalAssociationByTwoPartKey(ctx context.Context, conn *ram.RAM, resourceShareARN, principal string) (*ram.ResourceShareAssociation, error) {
172+
func findPrincipalAssociationByTwoPartKey(ctx context.Context, conn *ram.Client, resourceShareARN, principal string) (*awstypes.ResourceShareAssociation, error) {
169173
input := &ram.GetResourceShareAssociationsInput{
170-
AssociationType: aws.String(ram.ResourceShareAssociationTypePrincipal),
174+
AssociationType: awstypes.ResourceShareAssociationTypePrincipal,
171175
Principal: aws.String(principal),
172-
ResourceShareArns: aws.StringSlice([]string{resourceShareARN}),
176+
ResourceShareArns: []string{resourceShareARN},
173177
}
174178

175179
output, err := findResourceShareAssociation(ctx, conn, input)
@@ -178,17 +182,17 @@ func findPrincipalAssociationByTwoPartKey(ctx context.Context, conn *ram.RAM, re
178182
return nil, err
179183
}
180184

181-
if status := aws.StringValue(output.Status); status == ram.ResourceShareAssociationStatusDisassociated {
185+
if status := output.Status; status == awstypes.ResourceShareAssociationStatusDisassociated {
182186
return nil, &retry.NotFoundError{
183-
Message: status,
187+
Message: string(status),
184188
LastRequest: input,
185189
}
186190
}
187191

188192
return output, err
189193
}
190194

191-
func statusPrincipalAssociation(ctx context.Context, conn *ram.RAM, resourceShareARN, principal string) retry.StateRefreshFunc {
195+
func statusPrincipalAssociation(ctx context.Context, conn *ram.Client, resourceShareARN, principal string) retry.StateRefreshFunc {
192196
return func() (interface{}, string, error) {
193197
output, err := findPrincipalAssociationByTwoPartKey(ctx, conn, resourceShareARN, principal)
194198

@@ -200,48 +204,50 @@ func statusPrincipalAssociation(ctx context.Context, conn *ram.RAM, resourceShar
200204
return nil, "", err
201205
}
202206

203-
return output, aws.StringValue(output.Status), nil
207+
return output, string(output.Status), nil
204208
}
205209
}
206210

207-
func waitPrincipalAssociationCreated(ctx context.Context, conn *ram.RAM, resourceShareARN, principal string) (*ram.ResourceShareAssociation, error) {
211+
func waitPrincipalAssociationCreated(ctx context.Context, conn *ram.Client, resourceShareARN, principal string) (*awstypes.ResourceShareAssociation, error) {
208212
const (
209213
timeout = 3 * time.Minute
210214
)
211215
stateConf := &retry.StateChangeConf{
212-
Pending: []string{ram.ResourceShareAssociationStatusAssociating},
213-
Target: []string{ram.ResourceShareAssociationStatusAssociated},
216+
Pending: enum.Slice(awstypes.ResourceShareAssociationStatusAssociating),
217+
Target: enum.Slice(awstypes.ResourceShareAssociationStatusAssociated),
214218
Refresh: statusPrincipalAssociation(ctx, conn, resourceShareARN, principal),
215219
Timeout: timeout,
216220
NotFoundChecks: 20,
217221
}
218222

219223
outputRaw, err := stateConf.WaitForStateContext(ctx)
220224

221-
if output, ok := outputRaw.(*ram.ResourceShareAssociation); ok {
222-
tfresource.SetLastError(err, errors.New(aws.StringValue(output.StatusMessage)))
225+
if output, ok := outputRaw.(*awstypes.ResourceShareAssociation); ok {
226+
tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusMessage)))
223227

224228
return output, err
225229
}
226230

227231
return nil, err
228232
}
229233

230-
func waitPrincipalAssociationDeleted(ctx context.Context, conn *ram.RAM, resourceShareARN, principal string) (*ram.ResourceShareAssociation, error) {
234+
func waitPrincipalAssociationDeleted(ctx context.Context, conn *ram.Client, resourceShareARN, principal string) (*awstypes.ResourceShareAssociation, error) {
231235
const (
232236
timeout = 3 * time.Minute
233237
)
234238
stateConf := &retry.StateChangeConf{
235-
Pending: []string{ram.ResourceShareAssociationStatusAssociated, ram.ResourceShareAssociationStatusDisassociating},
239+
Pending: enum.Slice(awstypes.ResourceShareAssociationStatusAssociated, awstypes.ResourceShareAssociationStatusDisassociating),
236240
Target: []string{},
237241
Refresh: statusPrincipalAssociation(ctx, conn, resourceShareARN, principal),
238242
Timeout: timeout,
239243
}
240244

241245
outputRaw, err := stateConf.WaitForStateContext(ctx)
242246

243-
if v, ok := outputRaw.(*ram.ResourceShareAssociation); ok {
244-
return v, err
247+
if output, ok := outputRaw.(*awstypes.ResourceShareAssociation); ok {
248+
tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusMessage)))
249+
250+
return output, err
245251
}
246252

247253
return nil, err

internal/service/ram/principal_association_test.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"testing"
1010

1111
"github.com/YakDriver/regexache"
12-
"github.com/aws/aws-sdk-go/service/ram"
12+
awstypes "github.com/aws/aws-sdk-go-v2/service/ram/types"
1313
sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest"
1414
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
1515
"github.com/hashicorp/terraform-plugin-testing/terraform"
@@ -22,7 +22,7 @@ import (
2222

2323
func TestAccRAMPrincipalAssociation_basic(t *testing.T) {
2424
ctx := acctest.Context(t)
25-
var association ram.ResourceShareAssociation
25+
var association awstypes.ResourceShareAssociation
2626
resourceName := "aws_ram_principal_association.test"
2727
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
2828

@@ -52,7 +52,7 @@ func TestAccRAMPrincipalAssociation_basic(t *testing.T) {
5252

5353
func TestAccRAMPrincipalAssociation_AccountID(t *testing.T) {
5454
ctx := acctest.Context(t)
55-
var association ram.ResourceShareAssociation
55+
var association awstypes.ResourceShareAssociation
5656
resourceName := "aws_ram_principal_association.test"
5757
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
5858

@@ -82,7 +82,7 @@ func TestAccRAMPrincipalAssociation_AccountID(t *testing.T) {
8282

8383
func TestAccRAMPrincipalAssociation_disappears(t *testing.T) {
8484
ctx := acctest.Context(t)
85-
var association ram.ResourceShareAssociation
85+
var association awstypes.ResourceShareAssociation
8686
resourceName := "aws_ram_principal_association.test"
8787
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
8888

@@ -140,14 +140,14 @@ func testAccPreCheckSharingWithOrganizationEnabled(ctx context.Context, t *testi
140140
}
141141
}
142142

143-
func testAccCheckPrincipalAssociationExists(ctx context.Context, n string, v *ram.ResourceShareAssociation) resource.TestCheckFunc {
143+
func testAccCheckPrincipalAssociationExists(ctx context.Context, n string, v *awstypes.ResourceShareAssociation) resource.TestCheckFunc {
144144
return func(s *terraform.State) error {
145145
rs, ok := s.RootModule().Resources[n]
146146
if !ok {
147147
return fmt.Errorf("Not found: %s", n)
148148
}
149149

150-
conn := acctest.Provider.Meta().(*conns.AWSClient).RAMConn(ctx)
150+
conn := acctest.Provider.Meta().(*conns.AWSClient).RAMClient(ctx)
151151

152152
output, err := tfram.FindPrincipalAssociationByTwoPartKey(ctx, conn, rs.Primary.Attributes["resource_share_arn"], rs.Primary.Attributes[names.AttrPrincipal])
153153

@@ -163,7 +163,7 @@ func testAccCheckPrincipalAssociationExists(ctx context.Context, n string, v *ra
163163

164164
func testAccCheckPrincipalAssociationDestroy(ctx context.Context) resource.TestCheckFunc {
165165
return func(s *terraform.State) error {
166-
conn := acctest.Provider.Meta().(*conns.AWSClient).RAMConn(ctx)
166+
conn := acctest.Provider.Meta().(*conns.AWSClient).RAMClient(ctx)
167167

168168
for _, rs := range s.RootModule().Resources {
169169
if rs.Type != "aws_ram_principal_association" {
@@ -180,7 +180,7 @@ func testAccCheckPrincipalAssociationDestroy(ctx context.Context) resource.TestC
180180
return err
181181
}
182182

183-
return fmt.Errorf("RAM Resource Association %s still exists", rs.Primary.ID)
183+
return fmt.Errorf("RAM Principal Association %s still exists", rs.Primary.ID)
184184
}
185185

186186
return nil

0 commit comments

Comments
 (0)