Skip to content

Commit dd748ac

Browse files
author
Quentin Brosse
authored
fix(object): import bucket by name (scaleway#343)
1 parent f745c23 commit dd748ac

File tree

3 files changed

+29
-22
lines changed

3 files changed

+29
-22
lines changed

scaleway/helper_storage_object.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ func getS3ClientWithRegion(d *schema.ResourceData, m interface{}) (*s3.S3, scw.R
3131
return meta.s3Client, region, err
3232
}
3333

34-
// getS3ClientWithRegion returns a new S3 client with the correct region and id extracted from the resource data.
35-
func getS3ClientWithRegionAndID(m interface{}, id string) (*s3.S3, scw.Region, string, error) {
34+
// getS3ClientWithRegion returns a new S3 client with the correct region and name extracted from the resource data.
35+
func getS3ClientWithRegionAndName(m interface{}, name string) (*s3.S3, scw.Region, string, error) {
3636
meta := m.(*Meta)
3737

38-
region, id, err := parseRegionalID(id)
38+
region, name, err := parseRegionalID(name)
3939
if err != nil {
40-
return nil, "", id, err
40+
return nil, "", name, err
4141
}
4242

4343
if region != meta.DefaultRegion {
@@ -48,11 +48,11 @@ func getS3ClientWithRegionAndID(m interface{}, id string) (*s3.S3, scw.Region, s
4848

4949
err := newMeta.bootstrapS3Client()
5050
if err != nil {
51-
return nil, "", id, err
51+
return nil, "", name, err
5252
}
53-
return newMeta.s3Client, region, id, nil
53+
return newMeta.s3Client, region, name, nil
5454
}
5555

56-
return meta.s3Client, region, id, err
56+
return meta.s3Client, region, name, err
5757

5858
}

scaleway/resource_object_bucket.go

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ func resourceScalewayObjectBucket() *schema.Resource {
1919
Importer: &schema.ResourceImporter{
2020
State: schema.ImportStatePassthrough,
2121
},
22-
2322
Schema: map[string]*schema.Schema{
2423
"name": {
2524
Type: schema.TypeString,
@@ -33,13 +32,10 @@ func resourceScalewayObjectBucket() *schema.Resource {
3332
Default: "private",
3433
Description: "ACL of the bucket: either 'public-read' or 'private'.",
3534
ValidateFunc: validation.StringInSlice([]string{
36-
"private",
37-
"public-read",
38-
"public-read-write",
39-
"authenticated-read",
40-
"bucket-owner-read",
41-
"bucket-owner-full-control",
42-
"log-delivery-write",
35+
s3.ObjectCannedACLPrivate,
36+
s3.ObjectCannedACLPublicRead,
37+
s3.ObjectCannedACLPublicReadWrite,
38+
s3.ObjectCannedACLAuthenticatedRead,
4339
}, false),
4440
},
4541
"region": regionSchema(),
@@ -67,11 +63,22 @@ func resourceScalewayObjectBucketCreate(d *schema.ResourceData, m interface{}) e
6763
}
6864

6965
func resourceScalewayObjectBucketRead(d *schema.ResourceData, m interface{}) error {
70-
s3Client, _, bucketName, err := getS3ClientWithRegionAndID(m, d.Id())
66+
s3Client, _, bucketName, err := getS3ClientWithRegionAndName(m, d.Id())
7167
if err != nil {
7268
return err
7369
}
7470

71+
d.Set("name", bucketName)
72+
73+
// We do not read `acl` attribute because it could be impossible to find
74+
// the right canned ACL from a complex ACL object.
75+
//
76+
// Known issue:
77+
// Import a bucket (eg. terraform import scaleway_object_bucket.x fr-par/x)
78+
// will always trigger a diff (eg. terraform plan) on acl attribute because
79+
// we do not read it and it has a "private" default value.
80+
// AWS has the same issue: https://github.com/terraform-providers/terraform-provider-aws/issues/6193
81+
7582
_, err = s3Client.ListObjects(&s3.ListObjectsInput{
7683
Bucket: aws.String(bucketName),
7784
})
@@ -88,7 +95,7 @@ func resourceScalewayObjectBucketRead(d *schema.ResourceData, m interface{}) err
8895
}
8996

9097
func resourceScalewayObjectBucketUpdate(d *schema.ResourceData, m interface{}) error {
91-
s3Client, _, bucketName, err := getS3ClientWithRegionAndID(m, d.Id())
98+
s3Client, _, bucketName, err := getS3ClientWithRegionAndName(m, d.Id())
9299
if err != nil {
93100
return err
94101
}
@@ -110,7 +117,7 @@ func resourceScalewayObjectBucketUpdate(d *schema.ResourceData, m interface{}) e
110117
}
111118

112119
func resourceScalewayObjectBucketDelete(d *schema.ResourceData, m interface{}) error {
113-
s3Client, _, bucketName, err := getS3ClientWithRegionAndID(m, d.Id())
120+
s3Client, _, bucketName, err := getS3ClientWithRegionAndName(m, d.Id())
114121
if err != nil {
115122
return err
116123
}

website/docs/r/object_bucket.html.markdown

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ The following arguments are supported:
3030

3131
In addition to all above arguments, the following attribute is exported:
3232

33-
* `id` - The ID of the bucket.
33+
* `id` - The unique name of the bucket.
3434

3535
## Import
3636

37-
Buckets can be imported using the `{region}/{id}` identifier, e.g.
37+
Buckets can be imported using the `{region}/{bucketName}` identifier, e.g.
3838

39-
```
40-
$ terraform import scaleway_object_bucket.some_bucket fr-par/11111111-1111-1111-1111-111111111111
39+
```bash
40+
$ terraform import scaleway_object_bucket.some_bucket fr-par/some-bucket
4141
```

0 commit comments

Comments
 (0)