func()

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
}