Skip to content

Commit 96e76b3

Browse files
committed
r/aws_s3_access_point & aws_s3control_access_point_policy: Switch to 'WithoutTimeout' CRUD handlers (#15090).
Acceptance test output: % make testacc TESTARGS='-run=TestAccS3ControlAccessPoint' PKG=s3control ACCTEST_PARALLELISM=3 ==> Checking that code complies with gofmt requirements... TF_ACC=1 go test ./internal/service/s3control/... -v -count 1 -parallel 3 -run=TestAccS3ControlAccessPoint -timeout 180m === RUN TestAccS3ControlAccessPointPolicy_basic === PAUSE TestAccS3ControlAccessPointPolicy_basic === RUN TestAccS3ControlAccessPointPolicy_disappears === PAUSE TestAccS3ControlAccessPointPolicy_disappears === RUN TestAccS3ControlAccessPointPolicy_disappears_AccessPoint === PAUSE TestAccS3ControlAccessPointPolicy_disappears_AccessPoint === RUN TestAccS3ControlAccessPointPolicy_update === PAUSE TestAccS3ControlAccessPointPolicy_update === RUN TestAccS3ControlAccessPoint_basic === PAUSE TestAccS3ControlAccessPoint_basic === RUN TestAccS3ControlAccessPoint_disappears === PAUSE TestAccS3ControlAccessPoint_disappears === RUN TestAccS3ControlAccessPoint_Bucket_arn === PAUSE TestAccS3ControlAccessPoint_Bucket_arn === RUN TestAccS3ControlAccessPoint_policy === PAUSE TestAccS3ControlAccessPoint_policy === RUN TestAccS3ControlAccessPoint_publicAccessBlock === PAUSE TestAccS3ControlAccessPoint_publicAccessBlock === RUN TestAccS3ControlAccessPoint_vpc === PAUSE TestAccS3ControlAccessPoint_vpc === CONT TestAccS3ControlAccessPointPolicy_basic === CONT TestAccS3ControlAccessPoint_disappears === CONT TestAccS3ControlAccessPointPolicy_update --- PASS: TestAccS3ControlAccessPoint_disappears (22.69s) === CONT TestAccS3ControlAccessPoint_basic --- PASS: TestAccS3ControlAccessPointPolicy_basic (25.78s) === CONT TestAccS3ControlAccessPoint_publicAccessBlock --- PASS: TestAccS3ControlAccessPointPolicy_update (41.65s) === CONT TestAccS3ControlAccessPoint_vpc --- PASS: TestAccS3ControlAccessPoint_basic (21.08s) === CONT TestAccS3ControlAccessPointPolicy_disappears_AccessPoint --- PASS: TestAccS3ControlAccessPoint_publicAccessBlock (20.66s) === CONT TestAccS3ControlAccessPoint_policy --- PASS: TestAccS3ControlAccessPointPolicy_disappears_AccessPoint (18.59s) === CONT TestAccS3ControlAccessPointPolicy_disappears --- PASS: TestAccS3ControlAccessPoint_vpc (22.30s) === CONT TestAccS3ControlAccessPoint_Bucket_arn acctest.go:1368: skipping since no Outposts found --- SKIP: TestAccS3ControlAccessPoint_Bucket_arn (0.76s) --- PASS: TestAccS3ControlAccessPointPolicy_disappears (19.75s) --- PASS: TestAccS3ControlAccessPoint_policy (51.57s) PASS ok github.com/hashicorp/terraform-provider-aws/internal/service/s3control 103.083s
1 parent a749d0b commit 96e76b3

8 files changed

+166
-158
lines changed

internal/provider/provider.go

-2
Original file line numberDiff line numberDiff line change
@@ -2006,8 +2006,6 @@ func New(ctx context.Context) (*schema.Provider, error) {
20062006
"aws_s3_object_copy": s3.ResourceObjectCopy(),
20072007
"aws_s3_bucket_object": s3.ResourceBucketObject(), // DEPRECATED: use aws_s3_object instead
20082008

2009-
"aws_s3_access_point": s3control.ResourceAccessPoint(),
2010-
"aws_s3control_access_point_policy": s3control.ResourceAccessPointPolicy(),
20112009
"aws_s3_account_public_access_block": s3control.ResourceAccountPublicAccessBlock(),
20122010
"aws_s3control_bucket": s3control.ResourceBucket(),
20132011
"aws_s3control_bucket_lifecycle_configuration": s3control.ResourceBucketLifecycleConfiguration(),

internal/service/s3control/access_point.go

+69-40
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package s3control
22

33
import (
4+
"context"
45
"fmt"
56
"log"
67
"strings"
@@ -9,6 +10,8 @@ import (
910
"github.com/aws/aws-sdk-go/aws/arn"
1011
"github.com/aws/aws-sdk-go/service/s3control"
1112
"github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr"
13+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
14+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1215
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1316
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure"
1417
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
@@ -17,12 +20,16 @@ import (
1720
"github.com/hashicorp/terraform-provider-aws/internal/verify"
1821
)
1922

20-
func ResourceAccessPoint() *schema.Resource {
23+
func init() {
24+
_sp.registerSDKResourceFactory("aws_s3_access_point", resourceAccessPoint)
25+
}
26+
27+
func resourceAccessPoint() *schema.Resource {
2128
return &schema.Resource{
22-
Create: resourceAccessPointCreate,
23-
Read: resourceAccessPointRead,
24-
Update: resourceAccessPointUpdate,
25-
Delete: resourceAccessPointDelete,
29+
CreateWithoutTimeout: resourceAccessPointCreate,
30+
ReadWithoutTimeout: resourceAccessPointRead,
31+
UpdateWithoutTimeout: resourceAccessPointUpdate,
32+
DeleteWithoutTimeout: resourceAccessPointDelete,
2633

2734
Importer: &schema.ResourceImporter{
2835
State: schema.ImportStatePassthrough,
@@ -140,7 +147,7 @@ func ResourceAccessPoint() *schema.Resource {
140147
}
141148
}
142149

143-
func resourceAccessPointCreate(d *schema.ResourceData, meta interface{}) error {
150+
func resourceAccessPointCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
144151
conn := meta.(*conns.AWSClient).S3ControlConn()
145152

146153
accountID := meta.(*conns.AWSClient).AccountID
@@ -163,23 +170,22 @@ func resourceAccessPointCreate(d *schema.ResourceData, meta interface{}) error {
163170
input.VpcConfiguration = expandVPCConfiguration(v.([]interface{})[0].(map[string]interface{}))
164171
}
165172

166-
log.Printf("[DEBUG] Creating S3 Access Point: %s", input)
167-
output, err := conn.CreateAccessPoint(input)
173+
output, err := conn.CreateAccessPointWithContext(ctx, input)
168174

169175
if err != nil {
170-
return fmt.Errorf("error creating S3 Access Point (%s): %w", name, err)
176+
return diag.Errorf("creating S3 Access Point (%s): %s", name, err)
171177
}
172178

173179
resourceID, err := AccessPointCreateResourceID(aws.StringValue(output.AccessPointArn))
174180

175181
if err != nil {
176-
return err
182+
return diag.FromErr(err)
177183
}
178184

179185
accountID, name, err = AccessPointParseResourceID(resourceID)
180186

181187
if err != nil {
182-
return err
188+
return diag.FromErr(err)
183189
}
184190

185191
d.SetId(resourceID)
@@ -188,7 +194,7 @@ func resourceAccessPointCreate(d *schema.ResourceData, meta interface{}) error {
188194
policy, err := structure.NormalizeJsonString(v.(string))
189195

190196
if err != nil {
191-
return fmt.Errorf("policy (%s) is invalid JSON: %w", v.(string), err)
197+
return diag.Errorf("policy (%s) is invalid JSON: %s", v.(string), err)
192198
}
193199

194200
input := &s3control.PutAccessPointPolicyInput{
@@ -197,29 +203,28 @@ func resourceAccessPointCreate(d *schema.ResourceData, meta interface{}) error {
197203
Policy: aws.String(policy),
198204
}
199205

200-
log.Printf("[DEBUG] Creating S3 Access Point policy: %s", input)
201-
_, err = conn.PutAccessPointPolicy(input)
206+
_, err = conn.PutAccessPointPolicyWithContext(ctx, input)
202207

203208
if err != nil {
204-
return fmt.Errorf("error creating S3 Access Point (%s) policy: %w", d.Id(), err)
209+
return diag.Errorf("creating S3 Access Point (%s) policy: %s", d.Id(), err)
205210
}
206211
}
207212

208-
return resourceAccessPointRead(d, meta)
213+
return resourceAccessPointRead(ctx, d, meta)
209214
}
210215

211-
func resourceAccessPointRead(d *schema.ResourceData, meta interface{}) error {
216+
func resourceAccessPointRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
212217
conn := meta.(*conns.AWSClient).S3ControlConn()
213218

214219
accountID, name, err := AccessPointParseResourceID(d.Id())
215220

216221
if err != nil {
217-
return err
222+
return diag.FromErr(err)
218223
}
219224

220225
s3OnOutposts := arn.IsARN(name)
221226

222-
output, err := FindAccessPointByAccountIDAndName(conn, accountID, name)
227+
output, err := FindAccessPointByTwoPartKey(ctx, conn, accountID, name)
223228

224229
if !d.IsNewResource() && tfresource.NotFound(err) {
225230
log.Printf("[WARN] S3 Access Point (%s) not found, removing from state", d.Id())
@@ -228,14 +233,14 @@ func resourceAccessPointRead(d *schema.ResourceData, meta interface{}) error {
228233
}
229234

230235
if err != nil {
231-
return fmt.Errorf("error reading S3 Access Point (%s): %w", d.Id(), err)
236+
return diag.Errorf("reading S3 Access Point (%s): %s", d.Id(), err)
232237
}
233238

234239
if s3OnOutposts {
235240
accessPointARN, err := arn.Parse(name)
236241

237242
if err != nil {
238-
return err
243+
return diag.FromErr(err)
239244
}
240245

241246
// https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3onoutposts.html#amazons3onoutposts-resources-for-iam-policies.
@@ -276,20 +281,20 @@ func resourceAccessPointRead(d *schema.ResourceData, meta interface{}) error {
276281
d.Set("network_origin", output.NetworkOrigin)
277282
if output.PublicAccessBlockConfiguration != nil {
278283
if err := d.Set("public_access_block_configuration", []interface{}{flattenPublicAccessBlockConfiguration(output.PublicAccessBlockConfiguration)}); err != nil {
279-
return fmt.Errorf("error setting public_access_block_configuration: %w", err)
284+
return diag.Errorf("setting public_access_block_configuration: %s", err)
280285
}
281286
} else {
282287
d.Set("public_access_block_configuration", nil)
283288
}
284289
if output.VpcConfiguration != nil {
285290
if err := d.Set("vpc_configuration", []interface{}{flattenVPCConfiguration(output.VpcConfiguration)}); err != nil {
286-
return fmt.Errorf("error setting vpc_configuration: %w", err)
291+
return diag.Errorf("setting vpc_configuration: %s", err)
287292
}
288293
} else {
289294
d.Set("vpc_configuration", nil)
290295
}
291296

292-
policy, status, err := FindAccessPointPolicyAndStatusByAccountIDAndName(conn, accountID, name)
297+
policy, status, err := FindAccessPointPolicyAndStatusByTwoPartKey(ctx, conn, accountID, name)
293298

294299
if err == nil && policy != "" {
295300
if s3OnOutposts {
@@ -301,35 +306,35 @@ func resourceAccessPointRead(d *schema.ResourceData, meta interface{}) error {
301306
policyToSet, err := verify.PolicyToSet(d.Get("policy").(string), policy)
302307

303308
if err != nil {
304-
return err
309+
return diag.FromErr(err)
305310
}
306311

307312
d.Set("policy", policyToSet)
308313
} else if policy == "" || tfresource.NotFound(err) {
309314
d.Set("has_public_access_policy", false)
310315
d.Set("policy", nil)
311316
} else {
312-
return fmt.Errorf("error reading S3 Access Point (%s) policy: %w", d.Id(), err)
317+
return diag.Errorf("reading S3 Access Point (%s) policy: %s", d.Id(), err)
313318
}
314319

315320
return nil
316321
}
317322

318-
func resourceAccessPointUpdate(d *schema.ResourceData, meta interface{}) error {
323+
func resourceAccessPointUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
319324
conn := meta.(*conns.AWSClient).S3ControlConn()
320325

321326
accountID, name, err := AccessPointParseResourceID(d.Id())
322327

323328
if err != nil {
324-
return err
329+
return diag.FromErr(err)
325330
}
326331

327332
if d.HasChange("policy") {
328333
if v, ok := d.GetOk("policy"); ok && v.(string) != "" && v.(string) != "{}" {
329334
policy, err := structure.NormalizeJsonString(v.(string))
330335

331336
if err != nil {
332-
return fmt.Errorf("policy (%s) is invalid JSON: %w", v.(string), err)
337+
return diag.Errorf("policy (%s) is invalid JSON: %s", v.(string), err)
333338
}
334339

335340
input := &s3control.PutAccessPointPolicyInput{
@@ -338,39 +343,37 @@ func resourceAccessPointUpdate(d *schema.ResourceData, meta interface{}) error {
338343
Policy: aws.String(policy),
339344
}
340345

341-
log.Printf("[DEBUG] Updating S3 Access Point policy: %s", input)
342-
_, err = conn.PutAccessPointPolicy(input)
346+
_, err = conn.PutAccessPointPolicyWithContext(ctx, input)
343347

344348
if err != nil {
345-
return fmt.Errorf("error updating S3 Access Point (%s) policy: %w", d.Id(), err)
349+
return diag.Errorf("updating S3 Access Point (%s) policy: %s", d.Id(), err)
346350
}
347351
} else {
348-
log.Printf("[DEBUG] Deleting S3 Access Point policy: %s", d.Id())
349-
_, err := conn.DeleteAccessPointPolicy(&s3control.DeleteAccessPointPolicyInput{
352+
_, err := conn.DeleteAccessPointPolicyWithContext(ctx, &s3control.DeleteAccessPointPolicyInput{
350353
AccountId: aws.String(accountID),
351354
Name: aws.String(name),
352355
})
353356

354357
if err != nil {
355-
return fmt.Errorf("error deleting S3 Access Point (%s) policy: %w", d.Id(), err)
358+
return diag.Errorf("deleting S3 Access Point (%s) policy: %s", d.Id(), err)
356359
}
357360
}
358361
}
359362

360-
return resourceAccessPointRead(d, meta)
363+
return resourceAccessPointRead(ctx, d, meta)
361364
}
362365

363-
func resourceAccessPointDelete(d *schema.ResourceData, meta interface{}) error {
366+
func resourceAccessPointDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
364367
conn := meta.(*conns.AWSClient).S3ControlConn()
365368

366369
accountID, name, err := AccessPointParseResourceID(d.Id())
367370

368371
if err != nil {
369-
return err
372+
return diag.FromErr(err)
370373
}
371374

372375
log.Printf("[DEBUG] Deleting S3 Access Point: %s", d.Id())
373-
_, err = conn.DeleteAccessPoint(&s3control.DeleteAccessPointInput{
376+
_, err = conn.DeleteAccessPointWithContext(ctx, &s3control.DeleteAccessPointInput{
374377
AccountId: aws.String(accountID),
375378
Name: aws.String(name),
376379
})
@@ -380,12 +383,38 @@ func resourceAccessPointDelete(d *schema.ResourceData, meta interface{}) error {
380383
}
381384

382385
if err != nil {
383-
return fmt.Errorf("error deleting S3 Access Point (%s): %w", d.Id(), err)
386+
return diag.Errorf("deleting S3 Access Point (%s): %s", d.Id(), err)
384387
}
385388

386389
return nil
387390
}
388391

392+
func FindAccessPointByTwoPartKey(ctx context.Context, conn *s3control.S3Control, accountID string, name string) (*s3control.GetAccessPointOutput, error) {
393+
input := &s3control.GetAccessPointInput{
394+
AccountId: aws.String(accountID),
395+
Name: aws.String(name),
396+
}
397+
398+
output, err := conn.GetAccessPointWithContext(ctx, input)
399+
400+
if tfawserr.ErrCodeEquals(err, errCodeNoSuchAccessPoint) {
401+
return nil, &resource.NotFoundError{
402+
LastError: err,
403+
LastRequest: input,
404+
}
405+
}
406+
407+
if err != nil {
408+
return nil, err
409+
}
410+
411+
if output == nil {
412+
return nil, tfresource.NewEmptyResultError(input)
413+
}
414+
415+
return output, nil
416+
}
417+
389418
const accessPointResourceIDSeparator = ":"
390419

391420
func AccessPointCreateResourceID(accessPointARN string) (string, error) {

0 commit comments

Comments
 (0)