Skip to content

Commit 1e549a1

Browse files
authored
test(object): bucket ACL take on bucket's region (#2261)
* test(object): acl: all tests OK on fr-par * test(object): acl: remove region attribute on the acl resource * test(object): acl: all tests OK on nl-ams * test(object): acl: remove retry
1 parent 3cd948a commit 1e549a1

7 files changed

+1820
-820
lines changed

docs/resources/object_bucket_acl.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ resource "scaleway_object_bucket" "some_bucket" {
2020
}
2121
2222
resource "scaleway_object_bucket_acl" "main" {
23-
bucket = scaleway_object_bucket.main.name
23+
bucket = scaleway_object_bucket.main.id
2424
acl = "private"
2525
}
2626
```
@@ -33,7 +33,7 @@ resource "scaleway_object_bucket" "main" {
3333
}
3434
3535
resource "scaleway_object_bucket_acl" "main" {
36-
bucket = scaleway_object_bucket.main.name
36+
bucket = scaleway_object_bucket.main.id
3737
access_control_policy {
3838
grant {
3939
grantee {
@@ -62,12 +62,12 @@ resource "scaleway_object_bucket_acl" "main" {
6262

6363
The following arguments are supported:
6464

65-
* `bucket` - (Required) The name of the bucket.
65+
* `bucket` - (Required) The name of the bucket, or its Terraform ID.
6666
* `acl` - (Optional) The canned ACL you want to apply to the bucket.
6767
* `access_control_policy` - (Optional, Conflicts with acl) A configuration block that sets the ACL permissions for an object per grantee documented below.
6868
* `expected_bucket_owner` - (Optional, Forces new resource) The project ID of the expected bucket owner.
6969
* `region` - (Optional) The [region](https://developers.scaleway.com/en/quickstart/#region-definition) in which the bucket should be created.
70-
* `project_id` - (Defaults to [provider](../index.md#project_id) `project_id`) The ID of the project the bucket is associated with.
70+
* `project_id` - (Defaults to [provider](../index.md#arguments-reference) `project_id`) The ID of the project the bucket is associated with.
7171

7272

7373
## The ACL

scaleway/resource_object_bucket_acl.go

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"fmt"
66
"strings"
7-
"time"
87

98
"github.com/aws/aws-sdk-go/aws"
109
"github.com/aws/aws-sdk-go/service/s3"
@@ -117,11 +116,12 @@ func resourceScalewayObjectBucketACL() *schema.Resource {
117116
}, false),
118117
},
119118
"bucket": {
120-
Type: schema.TypeString,
121-
Required: true,
122-
ForceNew: true,
123-
ValidateFunc: validation.StringLenBetween(1, 63),
124-
Description: "The bucket name.",
119+
Type: schema.TypeString,
120+
Required: true,
121+
ForceNew: true,
122+
ValidateFunc: validation.StringLenBetween(1, 63),
123+
Description: "The bucket's name or regional ID.",
124+
DiffSuppressFunc: diffSuppressFuncLocality,
125125
},
126126
"expected_bucket_owner": {
127127
Type: schema.TypeString,
@@ -142,7 +142,18 @@ func resourceBucketACLCreate(ctx context.Context, d *schema.ResourceData, meta i
142142
return diag.FromErr(err)
143143
}
144144

145-
bucket := expandID(d.Get("bucket").(string))
145+
regionalID := expandRegionalID(d.Get("bucket"))
146+
bucket := regionalID.ID
147+
bucketRegion := regionalID.Region
148+
149+
if bucketRegion != "" && bucketRegion != region {
150+
conn, err = s3ClientForceRegion(d, meta, bucketRegion.String())
151+
if err != nil {
152+
return diag.FromErr(err)
153+
}
154+
region = bucketRegion
155+
}
156+
146157
expectedBucketOwner := d.Get("expected_bucket_owner").(string)
147158
acl := d.Get("acl").(string)
148159

@@ -162,13 +173,7 @@ func resourceBucketACLCreate(ctx context.Context, d *schema.ResourceData, meta i
162173
input.AccessControlPolicy = expandBucketACLAccessControlPolicy(v.([]interface{}))
163174
}
164175

165-
out, err := retryWhenAWSErrCodeEquals(ctx, []string{s3.ErrCodeNoSuchBucket}, &RetryWhenConfig[*s3.PutBucketAclOutput]{
166-
Timeout: d.Timeout(schema.TimeoutCreate),
167-
Interval: 5 * time.Second,
168-
Function: func() (*s3.PutBucketAclOutput, error) {
169-
return conn.PutBucketAclWithContext(ctx, input)
170-
},
171-
})
176+
out, err := conn.PutBucketAclWithContext(ctx, input)
172177
if err != nil {
173178
return diag.FromErr(fmt.Errorf("error putting Object Storage ACL: %s", err))
174179
}

scaleway/resource_object_bucket_acl_test.go

Lines changed: 72 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package scaleway
22

33
import (
44
"fmt"
5+
"regexp"
56
"testing"
67

78
sdkacctest "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
@@ -11,7 +12,7 @@ import (
1112
func TestAccScalewayObjectBucketACL_Basic(t *testing.T) {
1213
tt := NewTestTools(t)
1314
defer tt.Cleanup()
14-
testBucketName := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-acl-basic")
15+
testBucketName := sdkacctest.RandomWithPrefix("test-acc-scw-object-acl-basic")
1516

1617
resource.Test(t, resource.TestCase{
1718
PreCheck: func() { testAccPreCheck(t) },
@@ -22,16 +23,16 @@ func TestAccScalewayObjectBucketACL_Basic(t *testing.T) {
2223
Config: fmt.Sprintf(`
2324
resource "scaleway_object_bucket" "main" {
2425
name = "%s"
25-
region = "nl-ams"
26+
region = "%s"
2627
}
2728
2829
resource "scaleway_object_bucket_acl" "main" {
29-
bucket = scaleway_object_bucket.main.name
30+
bucket = scaleway_object_bucket.main.id
3031
acl = "private"
31-
region = "nl-ams"
3232
}
33-
`, testBucketName),
33+
`, testBucketName, objectTestsMainRegion),
3434
Check: resource.ComposeTestCheckFunc(
35+
testAccCheckScalewayObjectBucketExistsForceRegion(tt, "scaleway_object_bucket.main", true),
3536
resource.TestCheckResourceAttr("scaleway_object_bucket_acl.main", "bucket", testBucketName),
3637
resource.TestCheckResourceAttr("scaleway_object_bucket_acl.main", "acl", "private"),
3738
),
@@ -40,16 +41,16 @@ func TestAccScalewayObjectBucketACL_Basic(t *testing.T) {
4041
Config: fmt.Sprintf(`
4142
resource "scaleway_object_bucket" "main" {
4243
name = "%s"
43-
region = "nl-ams"
44+
region = "%s"
4445
}
4546
4647
resource "scaleway_object_bucket_acl" "main" {
47-
bucket = scaleway_object_bucket.main.name
48+
bucket = scaleway_object_bucket.main.id
4849
acl = "public-read"
49-
region = "nl-ams"
5050
}
51-
`, testBucketName),
51+
`, testBucketName, objectTestsMainRegion),
5252
Check: resource.ComposeTestCheckFunc(
53+
testAccCheckScalewayObjectBucketExistsForceRegion(tt, "scaleway_object_bucket.main", true),
5354
resource.TestCheckResourceAttr("scaleway_object_bucket_acl.main", "bucket", testBucketName),
5455
resource.TestCheckResourceAttr("scaleway_object_bucket_acl.main", "acl", "public-read"),
5556
),
@@ -61,7 +62,7 @@ func TestAccScalewayObjectBucketACL_Basic(t *testing.T) {
6162
func TestAccScalewayObjectBucketACL_Grantee(t *testing.T) {
6263
tt := NewTestTools(t)
6364
defer tt.Cleanup()
64-
testBucketName := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-acl-grantee")
65+
testBucketName := sdkacctest.RandomWithPrefix("test-acc-scw-object-acl-grantee")
6566

6667
ownerID := "105bdce1-64c0-48ab-899d-868455867ecf"
6768
ownerIDChild := "50ab77d5-56bd-4981-a118-4e0fa5309b59"
@@ -74,10 +75,11 @@ func TestAccScalewayObjectBucketACL_Grantee(t *testing.T) {
7475
Config: fmt.Sprintf(`
7576
resource "scaleway_object_bucket" "main" {
7677
name = "%[1]s"
78+
region = "%[3]s"
7779
}
7880
7981
resource "scaleway_object_bucket_acl" "main" {
80-
bucket = scaleway_object_bucket.main.name
82+
bucket = scaleway_object_bucket.main.id
8183
access_control_policy {
8284
grant {
8385
grantee {
@@ -100,20 +102,21 @@ func TestAccScalewayObjectBucketACL_Grantee(t *testing.T) {
100102
}
101103
}
102104
}
103-
`, testBucketName, ownerID),
105+
`, testBucketName, ownerID, objectTestsMainRegion),
104106
Check: resource.ComposeTestCheckFunc(
105-
testAccCheckScalewayObjectBucketExists(tt, "scaleway_object_bucket.main"),
107+
testAccCheckScalewayObjectBucketExistsForceRegion(tt, "scaleway_object_bucket.main", true),
106108
resource.TestCheckResourceAttr("scaleway_object_bucket_acl.main", "bucket", testBucketName),
107109
),
108110
},
109111
{
110112
Config: fmt.Sprintf(`
111113
resource "scaleway_object_bucket" "main" {
112114
name = "%[1]s"
115+
region = "%[4]s"
113116
}
114117
115118
resource "scaleway_object_bucket_acl" "main" {
116-
bucket = scaleway_object_bucket.main.name
119+
bucket = scaleway_object_bucket.main.id
117120
access_control_policy {
118121
grant {
119122
grantee {
@@ -144,9 +147,9 @@ func TestAccScalewayObjectBucketACL_Grantee(t *testing.T) {
144147
}
145148
}
146149
}
147-
`, testBucketName, ownerID, ownerIDChild),
150+
`, testBucketName, ownerID, ownerIDChild, objectTestsMainRegion),
148151
Check: resource.ComposeTestCheckFunc(
149-
testAccCheckScalewayObjectBucketExists(tt, "scaleway_object_bucket.main"),
152+
testAccCheckScalewayObjectBucketExistsForceRegion(tt, "scaleway_object_bucket.main", true),
150153
resource.TestCheckResourceAttr("scaleway_object_bucket_acl.main", "bucket", testBucketName),
151154
),
152155
},
@@ -162,7 +165,7 @@ func TestAccScalewayObjectBucketACL_Grantee(t *testing.T) {
162165
func TestAccScalewayObjectBucketACL_GranteeWithOwner(t *testing.T) {
163166
tt := NewTestTools(t)
164167
defer tt.Cleanup()
165-
testBucketName := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-acl-grantee-owner")
168+
testBucketName := sdkacctest.RandomWithPrefix("test-acc-scw-object-acl-owner")
166169
ownerID := "105bdce1-64c0-48ab-899d-868455867ecf"
167170
resource.Test(t, resource.TestCase{
168171
PreCheck: func() { testAccPreCheck(t) },
@@ -173,10 +176,11 @@ func TestAccScalewayObjectBucketACL_GranteeWithOwner(t *testing.T) {
173176
Config: fmt.Sprintf(`
174177
resource "scaleway_object_bucket" "main" {
175178
name = "%[1]s"
179+
region = "%[3]s"
176180
}
177181
178182
resource "scaleway_object_bucket_acl" "main" {
179-
bucket = scaleway_object_bucket.main.name
183+
bucket = scaleway_object_bucket.main.id
180184
expected_bucket_owner = "%[2]s"
181185
access_control_policy {
182186
grant {
@@ -200,9 +204,58 @@ func TestAccScalewayObjectBucketACL_GranteeWithOwner(t *testing.T) {
200204
}
201205
}
202206
}
203-
`, testBucketName, ownerID),
207+
`, testBucketName, ownerID, objectTestsMainRegion),
208+
Check: resource.ComposeTestCheckFunc(
209+
testAccCheckScalewayObjectBucketExistsForceRegion(tt, "scaleway_object_bucket.main", true),
210+
resource.TestCheckResourceAttr("scaleway_object_bucket_acl.main", "bucket", testBucketName),
211+
),
212+
},
213+
},
214+
})
215+
}
216+
217+
func TestAccScalewayObjectBucketACL_WithBucketName(t *testing.T) {
218+
tt := NewTestTools(t)
219+
defer tt.Cleanup()
220+
testBucketName := sdkacctest.RandomWithPrefix("test-acc-scw-object-acl-name")
221+
222+
resource.Test(t, resource.TestCase{
223+
PreCheck: func() { testAccPreCheck(t) },
224+
ProviderFactories: tt.ProviderFactories,
225+
CheckDestroy: testAccCheckScalewayObjectBucketDestroy(tt),
226+
Steps: []resource.TestStep{
227+
{
228+
Config: fmt.Sprintf(`
229+
resource "scaleway_object_bucket" "main" {
230+
name = "%s"
231+
region = "%s"
232+
}
233+
234+
resource "scaleway_object_bucket_acl" "main" {
235+
bucket = scaleway_object_bucket.main.name
236+
acl = "public-read"
237+
238+
}
239+
`, testBucketName, objectTestsMainRegion),
240+
ExpectError: regexp.MustCompile("error putting Object Storage ACL: NoSuchBucket: The specified bucket does not exist"),
241+
},
242+
{
243+
Config: fmt.Sprintf(`
244+
resource "scaleway_object_bucket" "main" {
245+
name = "%s"
246+
region = "%s"
247+
}
248+
249+
resource "scaleway_object_bucket_acl" "main" {
250+
bucket = scaleway_object_bucket.main.name
251+
acl = "public-read"
252+
region = "%[2]s"
253+
}
254+
`, testBucketName, objectTestsMainRegion),
204255
Check: resource.ComposeTestCheckFunc(
256+
testAccCheckScalewayObjectBucketExistsForceRegion(tt, "scaleway_object_bucket.main", true),
205257
resource.TestCheckResourceAttr("scaleway_object_bucket_acl.main", "bucket", testBucketName),
258+
resource.TestCheckResourceAttr("scaleway_object_bucket_acl.main", "acl", "public-read"),
206259
),
207260
},
208261
},

0 commit comments

Comments
 (0)