in pkg/cloud_provider/storage/storage.go [126:160]
func (service *gcsService) DeleteBucket(ctx context.Context, obj *ServiceBucket) error {
// Check that the bucket exists
_, err := service.GetBucket(ctx, obj)
if err != nil {
if IsNotExistErr(err) {
return nil
}
return fmt.Errorf("failed to get bucket %q before deletion: %w", obj.Name, err)
}
// Delete all objects in the bucket first
bkt := service.storageClient.Bucket(obj.Name)
it := bkt.Objects(ctx, nil)
for {
attrs, err := it.Next()
if errors.Is(err, iterator.Done) {
break
}
if err != nil {
return fmt.Errorf("failed to iterate next object: %w", err)
}
if err := bkt.Object(attrs.Name).Delete(ctx); err != nil {
return fmt.Errorf("failed to delete object %q: %w", attrs.Name, err)
}
}
// Delete the bucket
err = bkt.Delete(ctx)
if err != nil {
return fmt.Errorf("failed to delete bucket %q: %w", obj.Name, err)
}
return nil
}