Skip to content

Commit 0aec006

Browse files
authored
feat(object): versioning should be enabled with object locking (#1679)
1 parent ed7af2e commit 0aec006

6 files changed

+3600
-2401
lines changed

scaleway/resource_object_bucket.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,12 +197,21 @@ func resourceScalewayObjectBucket() *schema.Resource {
197197
Description: "Enable versioning. Once you version-enable a bucket, it can never return to an unversioned state",
198198
Type: schema.TypeBool,
199199
Optional: true,
200-
Default: false,
200+
Computed: true,
201201
},
202202
},
203203
},
204204
},
205205
},
206+
CustomizeDiff: func(ctx context.Context, diff *schema.ResourceDiff, meta interface{}) error {
207+
if diff.Get("object_lock_enabled").(bool) {
208+
if diff.HasChange("versioning") && !diff.Get("versioning.0.enabled").(bool) {
209+
return fmt.Errorf("versioning must be enabled when object lock is enabled")
210+
}
211+
}
212+
213+
return nil
214+
},
206215
}
207216
}
208217

@@ -267,7 +276,9 @@ func resourceScalewayObjectBucketUpdate(ctx context.Context, d *schema.ResourceD
267276
}
268277
}
269278

270-
if d.HasChange("versioning") {
279+
// Object Lock enables versioning so we don't want to update versioning it is enabled
280+
objectLockEnabled := d.Get("object_lock_enabled").(bool)
281+
if !objectLockEnabled && d.HasChange("versioning") {
271282
if err := resourceScalewayObjectBucketVersioningUpdate(ctx, s3Client, d); err != nil {
272283
return diag.FromErr(err)
273284
}

scaleway/resource_object_bucket_test.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ func TestAccScalewayObjectBucket_Basic(t *testing.T) {
3232
bucketAms := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-bucket-ams")
3333
bucketPar := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-bucket-par")
3434
bucketLifecycle := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-bucket-lifecycle")
35+
bucketObjectLock := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-bucket-lock")
3536
resourceNameLifecycle := "scaleway_object_bucket.par-bucket-lifecycle"
3637
resource.ParallelTest(t, resource.TestCase{
3738
PreCheck: func() { testAccPreCheck(t) },
@@ -325,6 +326,55 @@ func TestAccScalewayObjectBucket_Basic(t *testing.T) {
325326
resource.TestCheckResourceAttr(resourceNameLifecycle, "lifecycle_rule.0.abort_incomplete_multipart_upload_days", "30"),
326327
),
327328
},
329+
{
330+
Config: fmt.Sprintf(`
331+
resource "scaleway_object_bucket" "object-locked-bucket"{
332+
name = "%s"
333+
region = "fr-par"
334+
335+
object_lock_enabled = true
336+
}
337+
`, bucketObjectLock),
338+
Check: resource.ComposeTestCheckFunc(
339+
resource.TestCheckResourceAttr("scaleway_object_bucket.object-locked-bucket", "name", bucketObjectLock),
340+
resource.TestCheckResourceAttr("scaleway_object_bucket.object-locked-bucket", "object_lock_enabled", "true"),
341+
resource.TestCheckResourceAttr("scaleway_object_bucket.object-locked-bucket", "versioning.0.enabled", "true"),
342+
),
343+
},
344+
{
345+
Config: fmt.Sprintf(`
346+
resource "scaleway_object_bucket" "object-locked-bucket"{
347+
name = "%s"
348+
region = "fr-par"
349+
350+
object_lock_enabled = true
351+
352+
versioning {
353+
enabled = true
354+
}
355+
}
356+
`, bucketObjectLock),
357+
Check: resource.ComposeTestCheckFunc(
358+
resource.TestCheckResourceAttr("scaleway_object_bucket.object-locked-bucket", "name", bucketObjectLock),
359+
resource.TestCheckResourceAttr("scaleway_object_bucket.object-locked-bucket", "object_lock_enabled", "true"),
360+
resource.TestCheckResourceAttr("scaleway_object_bucket.object-locked-bucket", "versioning.0.enabled", "true"),
361+
),
362+
},
363+
{
364+
Config: fmt.Sprintf(`
365+
resource "scaleway_object_bucket" "object-locked-bucket"{
366+
name = "%s"
367+
region = "fr-par"
368+
369+
object_lock_enabled = true
370+
371+
versioning {
372+
enabled = false
373+
}
374+
}
375+
`, bucketObjectLock),
376+
ExpectError: regexp.MustCompile("versioning must be enabled when object lock is enabled"),
377+
},
328378
},
329379
})
330380
}

0 commit comments

Comments
 (0)