@@ -10,7 +10,7 @@ import (
1010 "github.com/hashicorp/aws-sdk-go-base/tfawserr"
1111 "github.com/hashicorp/terraform-plugin-log/tflog"
1212 "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
13- "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource "
13+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry "
1414 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1515 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/structure"
1616 "github.com/scaleway/scaleway-sdk-go/scw"
@@ -30,9 +30,10 @@ func resourceScalewayObjectBucketPolicy() *schema.Resource {
3030 },
3131 Schema : map [string ]* schema.Schema {
3232 "bucket" : {
33- Type : schema .TypeString ,
34- Required : true ,
35- Description : "The bucket name." ,
33+ Type : schema .TypeString ,
34+ Required : true ,
35+ Description : "The bucket's name or regional ID." ,
36+ DiffSuppressFunc : diffSuppressFuncLocality ,
3637 },
3738 "policy" : {
3839 Type : schema .TypeString ,
@@ -52,9 +53,19 @@ func resourceScalewayObjectBucketPolicyCreate(ctx context.Context, d *schema.Res
5253 return diag .FromErr (err )
5354 }
5455
55- bucket := expandID (d .Get ("bucket" ))
56+ regionalID := expandRegionalID (d .Get ("bucket" ))
57+ bucket := regionalID .ID
58+ bucketRegion := regionalID .Region
5659 tflog .Debug (ctx , fmt .Sprintf ("bucket name: %s" , bucket ))
5760
61+ if bucketRegion != "" && bucketRegion != region {
62+ s3Client , err = s3ClientForceRegion (d , meta , bucketRegion .String ())
63+ if err != nil {
64+ return diag .FromErr (err )
65+ }
66+ region = bucketRegion
67+ }
68+
5869 policy , err := structure .NormalizeJsonString (d .Get ("policy" ).(string ))
5970 if err != nil {
6071 return diag .FromErr (fmt .Errorf ("policy (%s) is an invalid JSON: %w" , policy , err ))
@@ -67,13 +78,13 @@ func resourceScalewayObjectBucketPolicyCreate(ctx context.Context, d *schema.Res
6778 Policy : scw .StringPtr (policy ),
6879 }
6980
70- err = resource .RetryContext (ctx , 1 * time .Minute , func () * resource .RetryError {
81+ err = retry .RetryContext (ctx , 1 * time .Minute , func () * retry .RetryError {
7182 _ , err := s3Client .PutBucketPolicyWithContext (ctx , params )
7283 if tfawserr .ErrCodeEquals (err , "MalformedPolicy" ) {
73- return resource .RetryableError (err )
84+ return retry .RetryableError (err )
7485 }
7586 if err != nil {
76- return resource .NonRetryableError (err )
87+ return retry .NonRetryableError (err )
7788 }
7889 return nil
7990 })
@@ -97,7 +108,8 @@ func resourceScalewayObjectBucketPolicyRead(ctx context.Context, d *schema.Resou
97108 return diag .FromErr (err )
98109 }
99110
100- bucket := expandID (d .Id ())
111+ regionalID := expandRegionalID (d .Id ())
112+ bucket := regionalID .ID
101113
102114 _ = d .Set ("region" , region )
103115
@@ -132,7 +144,7 @@ func resourceScalewayObjectBucketPolicyRead(ctx context.Context, d *schema.Resou
132144 return diag .FromErr (err )
133145 }
134146
135- if err := d .Set ("bucket" , bucket ); err != nil {
147+ if err := d .Set ("bucket" , regionalID . String () ); err != nil {
136148 return diag .FromErr (err )
137149 }
138150
0 commit comments