Skip to content

Commit d2ae788

Browse files
authored
fix(object): lifecycle rules: fix parsing error when prefix+1tag set (#2455)
* fix(object): lifecycle rules: fix parsing error when prefix+1tag set * whitespace fixing attempt * whitespace fixing attempt 2 * rework to check for prefix content before setting it * cassette
1 parent 4f33d1d commit d2ae788

File tree

3 files changed

+1454
-725
lines changed

3 files changed

+1454
-725
lines changed

scaleway/resource_object_bucket.go

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -352,19 +352,22 @@ func resourceBucketLifecycleUpdate(ctx context.Context, conn *s3.S3, d *schema.R
352352

353353
// Filter
354354
tags := expandObjectBucketTags(r["tags"])
355+
ruleHasPrefix := len(r["prefix"].(string)) > 0
355356
filter := &s3.LifecycleRuleFilter{}
356-
if len(tags) == 1 {
357+
358+
if !ruleHasPrefix && len(tags) == 1 {
357359
filter.SetTag(tags[0])
358-
}
359-
if len(tags) > 1 {
360-
lifecycleRuleAndOp := &s3.LifecycleRuleAndOperator{}
361-
if len(r["prefix"].(string)) > 0 {
362-
lifecycleRuleAndOp.SetPrefix(r["prefix"].(string))
360+
} else {
361+
if len(tags) == 0 && ruleHasPrefix {
362+
filter.SetPrefix(r["prefix"].(string))
363+
} else {
364+
lifecycleRuleAndOp := &s3.LifecycleRuleAndOperator{}
365+
lifecycleRuleAndOp.SetTags(tags)
366+
if ruleHasPrefix {
367+
lifecycleRuleAndOp.SetPrefix(r["prefix"].(string))
368+
}
369+
filter.SetAnd(lifecycleRuleAndOp)
363370
}
364-
lifecycleRuleAndOp.SetTags(tags)
365-
filter.SetAnd(lifecycleRuleAndOp)
366-
} else if len(r["prefix"].(string)) > 0 {
367-
filter.SetPrefix(r["prefix"].(string))
368371
}
369372
rule.SetFilter(filter)
370373

scaleway/resource_object_bucket_test.go

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ func TestAccScalewayObjectBucket_Lifecycle(t *testing.T) {
140140
name = "%s"
141141
region = "%s"
142142
acl = "private"
143-
143+
144144
lifecycle_rule {
145145
id = "id1"
146146
prefix = "path1/"
@@ -348,6 +348,34 @@ func TestAccScalewayObjectBucket_Lifecycle(t *testing.T) {
348348
resource.TestCheckResourceAttr(resourceNameLifecycle, "lifecycle_rule.0.abort_incomplete_multipart_upload_days", "30"),
349349
),
350350
},
351+
{
352+
Config: fmt.Sprintf(`
353+
resource "scaleway_object_bucket" "main-bucket-lifecycle"{
354+
name = "%s"
355+
region = "%s"
356+
acl = "private"
357+
358+
lifecycle_rule {
359+
prefix = "path1/"
360+
enabled = true
361+
tags = {
362+
"deleted" = "true"
363+
}
364+
expiration {
365+
days = 1
366+
}
367+
}
368+
}
369+
`, bucketLifecycle, objectTestsMainRegion),
370+
Check: resource.ComposeTestCheckFunc(
371+
testAccCheckScalewayObjectBucketExists(tt, "scaleway_object_bucket.main-bucket-lifecycle", true),
372+
testAccCheckScalewayObjectBucketLifecycleConfigurationExists(tt, resourceNameLifecycle),
373+
resource.TestCheckResourceAttrSet(resourceNameLifecycle, "lifecycle_rule.0.id"),
374+
resource.TestCheckResourceAttr(resourceNameLifecycle, "lifecycle_rule.0.tags.deleted", "true"),
375+
resource.TestCheckResourceAttr(resourceNameLifecycle, "lifecycle_rule.0.prefix", "path1/"),
376+
resource.TestCheckResourceAttr(resourceNameLifecycle, "lifecycle_rule.0.expiration.0.days", "1"),
377+
),
378+
},
351379
},
352380
})
353381
}

0 commit comments

Comments
 (0)