Skip to content

Commit 0dac2a5

Browse files
committed
lifecycle
1 parent f63b1ae commit 0dac2a5

File tree

4 files changed

+481
-7619
lines changed

4 files changed

+481
-7619
lines changed

internal/services/object/bucket.go

Lines changed: 69 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -213,30 +213,25 @@ func ResourceBucket() *schema.Resource {
213213
},
214214
CustomizeDiff: func(_ context.Context, diff *schema.ResourceDiff, _ interface{}) error {
215215
if diff.Get("object_lock_enabled").(bool) {
216-
if diff.HasChange("versioning") && !diff.Get("versioning.0.enabled").(bool) {
217-
return errors.New("versioning must be enabled when object lock is enabled")
216+
versioning := diff.Get("versioning").([]interface{})
217+
if len(versioning) == 0 || !versioning[0].(map[string]interface{})["enabled"].(bool) {
218+
return fmt.Errorf("versioning must be enabled when object lock is enabled")
218219
}
219220
}
220-
221221
return nil
222222
},
223223
}
224224
}
225225

226226
func resourceObjectBucketCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
227227
bucketName := d.Get("name").(string)
228-
//objectLockEnabled := d.Get("object_lock_enabled").(bool)
229-
//acl := d.Get("acl").(string)
230-
231228
s3Client, region, err := s3ClientWithRegion(ctx, d, m)
232229
if err != nil {
233230
return diag.FromErr(err)
234231
}
235232

236233
req := &s3.CreateBucketInput{
237234
Bucket: scw.StringPtr(bucketName),
238-
//ObjectLockEnabledForBucket: scw.BoolPtr(objectLockEnabled),
239-
//ACL: s3Types.BucketCannedACL(acl),
240235
}
241236

242237
_, err = s3Client.CreateBucket(ctx, req)
@@ -296,9 +291,25 @@ func resourceObjectBucketUpdate(ctx context.Context, d *schema.ResourceData, m i
296291

297292
// Object Lock enables versioning so we don't want to update versioning it is enabled
298293
objectLockEnabled := d.Get("object_lock_enabled").(bool)
299-
if !objectLockEnabled && d.HasChange("versioning") {
300-
if err := resourceObjectBucketVersioningUpdate(ctx, s3Client, d); err != nil {
301-
return diag.FromErr(err)
294+
//if !objectLockEnabled && d.HasChange("versioning") {
295+
// if err := resourceObjectBucketVersioningUpdate(ctx, s3Client, d); err != nil {
296+
// return diag.FromErr(err)
297+
// }
298+
//}
299+
300+
if objectLockEnabled && d.HasChange("versioning") {
301+
v := d.Get("versioning").([]interface{})
302+
var versioning *s3Types.VersioningConfiguration
303+
versioning = expandObjectBucketVersioningUpdate(v)
304+
if versioning != nil {
305+
input := &s3.PutBucketVersioningInput{
306+
Bucket: scw.StringPtr(bucketName),
307+
VersioningConfiguration: versioning,
308+
}
309+
_, err := s3Client.PutBucketVersioning(ctx, input)
310+
if err != nil {
311+
return diag.FromErr(fmt.Errorf("putting Bucket (%s) versioning: %s", bucketName, err))
312+
}
302313
}
303314
}
304315

@@ -363,8 +374,9 @@ func resourceBucketLifecycleUpdate(ctx context.Context, conn *s3.Client, d *sche
363374
rule := s3Types.LifecycleRule{}
364375

365376
// Filter
377+
prefix := r["prefix"].(string)
366378
tags := ExpandObjectBucketTags(r["tags"])
367-
ruleHasPrefix := len(r["prefix"].(string)) > 0
379+
ruleHasPrefix := &prefix != nil
368380
filter := &s3Types.LifecycleRuleFilter{}
369381

370382
if len(tags) > 1 || (ruleHasPrefix && len(tags) == 1) {
@@ -443,12 +455,12 @@ func resourceBucketLifecycleUpdate(ctx context.Context, conn *s3.Client, d *sche
443455
// As a lifecycle rule requires 1 or more transition/expiration actions,
444456
// we explicitly pass a default ExpiredObjectDeleteMarker value to be able to create
445457
// the rule while keeping the policy unaffected if the conditions are not met.
446-
if rule.Expiration == nil && rule.NoncurrentVersionExpiration == nil &&
447-
rule.Transitions == nil && rule.NoncurrentVersionTransitions == nil &&
448-
rule.AbortIncompleteMultipartUpload == nil {
449-
//rule.Expiration = &s3Types.LifecycleExpiration{}
450-
rule.Transitions = []s3Types.Transition{}
451-
}
458+
//if rule.Expiration == nil && rule.NoncurrentVersionExpiration == nil &&
459+
// rule.Transitions == nil && rule.NoncurrentVersionTransitions == nil &&
460+
// rule.AbortIncompleteMultipartUpload == nil {
461+
// //rule.Expiration = &s3Types.LifecycleExpiration{}
462+
// rule.Transitions = []s3Types.Transition{}
463+
//}
452464

453465
rules = append(rules, rule)
454466
}
@@ -707,24 +719,45 @@ func resourceObjectBucketDelete(ctx context.Context, d *schema.ResourceData, m i
707719
return nil
708720
}
709721

710-
func resourceObjectBucketVersioningUpdate(ctx context.Context, s3conn *s3.Client, d *schema.ResourceData) error {
711-
v := d.Get("versioning").([]interface{})
712-
bucketName := d.Get("name").(string)
713-
vc := expandObjectBucketVersioning(v)
714-
715-
i := &s3.PutBucketVersioningInput{
716-
Bucket: scw.StringPtr(bucketName),
717-
VersioningConfiguration: vc,
718-
}
719-
tflog.Debug(ctx, fmt.Sprintf("S3 put bucket versioning: %#v", i))
720-
721-
_, err := s3conn.PutBucketVersioning(ctx, i)
722-
if err != nil {
723-
return fmt.Errorf("error putting S3 versioning: %s", err)
724-
}
725-
726-
return nil
727-
}
722+
//func resourceObjectBucketVersioningUpdate(ctx context.Context, s3conn *s3.Client, d *schema.ResourceData) error {
723+
// v := d.Get("versioning").([]interface{})
724+
// bucketName := d.Get("name").(string)
725+
// vc := expandObjectBucketVersioning(v)
726+
//
727+
// i := &s3.PutBucketVersioningInput{
728+
// Bucket: scw.StringPtr(bucketName),
729+
// VersioningConfiguration: vc,
730+
// }
731+
// tflog.Debug(ctx, fmt.Sprintf("S3 put bucket versioning: %#v", i))
732+
//
733+
// _, err := s3conn.PutBucketVersioning(ctx, i)
734+
// if err != nil {
735+
// return fmt.Errorf("error putting S3 versioning: %s", err)
736+
// }
737+
//
738+
// return nil
739+
//}
740+
//
741+
//func resourceObjectBucketVersioningCreate(ctx context.Context, s3conn *s3.Client, d *schema.ResourceData) error {
742+
// v := d.Get("versioning").([]interface{})
743+
// bucketName := d.Get("name").(string)
744+
// vc := expandObjectBucketVersioning(v)
745+
// if vc.Status == "" {
746+
// return nil
747+
// }
748+
// i := &s3.PutBucketVersioningInput{
749+
// Bucket: scw.StringPtr(bucketName),
750+
// VersioningConfiguration: vc,
751+
// }
752+
// tflog.Debug(ctx, fmt.Sprintf("S3 put bucket versioning: %#v", i))
753+
//
754+
// _, err := s3conn.PutBucketVersioning(ctx, i)
755+
// if err != nil {
756+
// return fmt.Errorf("error putting S3 versioning: %s", err)
757+
// }
758+
//
759+
// return nil
760+
//}
728761

729762
func resourceS3BucketCorsUpdate(ctx context.Context, s3conn *s3.Client, d *schema.ResourceData) error {
730763
bucketName := d.Get("name").(string)

0 commit comments

Comments
 (0)