Skip to content

Commit 06f8c4a

Browse files
authored
Empty buckets during Delete()
1 parent 7718196 commit 06f8c4a

File tree

7 files changed

+48
-54
lines changed

7 files changed

+48
-54
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,4 @@ terraform
4141
# Ignore the Go vendor directory, superseded by proxy.golang.org and go.{mod,sum}
4242
vendor
4343

44-
./terraform-provider-iterative
44+
terraform-provider-iterative

task/aws/resources/resource_bucket.go

-39
Original file line numberDiff line numberDiff line change
@@ -76,45 +76,6 @@ func (b *Bucket) Update(ctx context.Context) error {
7676
}
7777

7878
func (b *Bucket) Delete(ctx context.Context) error {
79-
listInput := s3.ListObjectsV2Input{
80-
Bucket: aws.String(b.Identifier),
81-
}
82-
83-
for paginator := s3.NewListObjectsV2Paginator(b.Client.Services.S3, &listInput); paginator.HasMorePages(); {
84-
page, err := paginator.NextPage(ctx)
85-
86-
if err != nil {
87-
var e smithy.APIError
88-
if errors.As(err, &e) && e.ErrorCode() == "NoSuchBucket" {
89-
b.Resource = nil
90-
return nil
91-
}
92-
return err
93-
}
94-
95-
if len(page.Contents) == 0 {
96-
break
97-
}
98-
99-
var objects []types.ObjectIdentifier
100-
for _, object := range page.Contents {
101-
objects = append(objects, types.ObjectIdentifier{
102-
Key: object.Key,
103-
})
104-
}
105-
106-
input := s3.DeleteObjectsInput{
107-
Bucket: aws.String(b.Identifier),
108-
Delete: &types.Delete{
109-
Objects: objects,
110-
},
111-
}
112-
113-
if _, err = b.Client.Services.S3.DeleteObjects(ctx, &input); err != nil {
114-
return err
115-
}
116-
}
117-
11879
deleteInput := s3.DeleteBucketInput{
11980
Bucket: aws.String(b.Identifier),
12081
}

task/aws/task.go

+12
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,10 @@ func (t *Task) Delete(ctx context.Context) error {
220220
if err := t.DataSources.Credentials.Read(ctx); err != nil {
221221
return err
222222
}
223+
log.Println("[INFO] Emptying Bucket...")
224+
if err := t.Empty(ctx); err != nil {
225+
return err
226+
}
223227
log.Println("[INFO] Deleting Bucket...")
224228
if err := t.Resources.Bucket.Delete(ctx); err != nil {
225229
return err
@@ -252,6 +256,14 @@ func (t *Task) Push(ctx context.Context, source string) error {
252256
return machine.Transfer(ctx, source, (*t.DataSources.Credentials.Resource)["RCLONE_REMOTE"]+"/data")
253257
}
254258

259+
func (t *Task) Empty(ctx context.Context) error {
260+
if err := t.Read(ctx); err != nil {
261+
return err
262+
}
263+
264+
return machine.Purge(ctx, (*t.DataSources.Credentials.Resource)["RCLONE_REMOTE"])
265+
}
266+
255267
func (t *Task) Start(ctx context.Context) error {
256268
return t.Resources.AutoScalingGroup.Update(ctx)
257269
}

task/az/task.go

+12
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,10 @@ func (t *Task) Delete(ctx context.Context) error {
205205
if err := t.Resources.VirtualNetwork.Delete(ctx); err != nil {
206206
return err
207207
}
208+
log.Println("[INFO] Emptying BlobContainer...")
209+
if err := t.Empty(ctx); err != nil {
210+
return err
211+
}
208212
log.Println("[INFO] Deleting BlobContainer...")
209213
if err := t.Resources.BlobContainer.Delete(ctx); err != nil {
210214
return err
@@ -245,6 +249,14 @@ func (t *Task) Push(ctx context.Context, source string) error {
245249
return machine.Transfer(ctx, source, (*t.DataSources.Credentials.Resource)["RCLONE_REMOTE"]+"/data")
246250
}
247251

252+
func (t *Task) Empty(ctx context.Context) error {
253+
if err := t.Read(ctx); err != nil {
254+
return err
255+
}
256+
257+
return machine.Purge(ctx, (*t.DataSources.Credentials.Resource)["RCLONE_REMOTE"])
258+
}
259+
248260
func (t *Task) Start(ctx context.Context) error {
249261
return t.Resources.VirtualMachineScaleSet.Update(ctx)
250262
}

task/common/machine/storage.go

+11-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515

1616
"github.com/rclone/rclone/fs"
1717
"github.com/rclone/rclone/fs/sync"
18+
"github.com/rclone/rclone/fs/operations"
1819

1920
"terraform-provider-iterative/task/common"
2021
)
@@ -99,7 +100,16 @@ func Transfer(ctx context.Context, source, destination string) error {
99100
return err
100101
}
101102

102-
if err := sync.CopyDir(ctx, destinationFileSystem, sourceFileSystem, true); err != nil {
103+
return sync.CopyDir(ctx, destinationFileSystem, sourceFileSystem, true)
104+
}
105+
106+
func Purge(ctx context.Context, destination string) error {
107+
destinationFileSystem, err := fs.NewFs(ctx, destination)
108+
if err != nil {
109+
return err
110+
}
111+
112+
if err := operations.Purge(ctx, destinationFileSystem, ""); err.Error() != "resource not found" {
103113
return err
104114
}
105115

task/gcp/resources/resource_bucket.go

-13
Original file line numberDiff line numberDiff line change
@@ -65,19 +65,6 @@ func (b *Bucket) Delete(ctx context.Context) error {
6565
return nil
6666
}
6767

68-
deletePage := func(objects *storage.Objects) error {
69-
for _, object := range objects.Items {
70-
if err := b.Client.Services.Storage.Objects.Delete(b.Identifier, object.Name).Do(); err != nil {
71-
return err
72-
}
73-
}
74-
return nil
75-
}
76-
77-
if err := b.Client.Services.Storage.Objects.List(b.Identifier).Pages(ctx, deletePage); err != nil {
78-
return err
79-
}
80-
8168
if err := b.Client.Services.Storage.Buckets.Delete(b.Identifier).Do(); err != nil {
8269
return err
8370
}

task/gcp/task.go

+12
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,10 @@ func (t *Task) Delete(ctx context.Context) error {
300300
if err := t.Resources.FirewallDenyIngress.Delete(ctx); err != nil {
301301
return err
302302
}
303+
log.Println("[INFO] Emptying Bucket...")
304+
if err := t.Empty(ctx); err != nil {
305+
return err
306+
}
303307
log.Println("[INFO] Deleting Bucket...")
304308
if err := t.Resources.Bucket.Delete(ctx); err != nil {
305309
return err
@@ -332,6 +336,14 @@ func (t *Task) Push(ctx context.Context, source string) error {
332336
return machine.Transfer(ctx, source, (*t.DataSources.Credentials.Resource)["RCLONE_REMOTE"]+"/data")
333337
}
334338

339+
func (t *Task) Empty(ctx context.Context) error {
340+
if err := t.Read(ctx); err != nil {
341+
return err
342+
}
343+
344+
return machine.Purge(ctx, (*t.DataSources.Credentials.Resource)["RCLONE_REMOTE"])
345+
}
346+
335347
func (t *Task) Start(ctx context.Context) error {
336348
return t.Resources.InstanceGroupManager.Update(ctx)
337349
}

0 commit comments

Comments
 (0)