@@ -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
226226func 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
729762func resourceS3BucketCorsUpdate (ctx context.Context , s3conn * s3.Client , d * schema.ResourceData ) error {
730763 bucketName := d .Get ("name" ).(string )
0 commit comments