If you have trouble deleting an object storage bucket in Oracle Cloud Infrastructure you may have to clear old multipart uploads. The message may look something like this: Bucket named “DR-Validation” has pending multipart uploads. Stop all multipart uploads first.
At the time the only way I could do this was through the API. Did not appear like the CLI or Console could clear out the upload. Below is a little python that may help. Below is an example just to show the idea. And of course if you have thousands of multipart uploads(yes its possible); you will need to change this was only for one or two.
#!/usr/bin/python#: Author : Riaan Rossouw#: Date Created : June 13, 2019#: Date Updated : July 18, 2019#: Description : Python Script to list multipart uploads#: Examples : lobjectparts.py -t tenancy -r region -b bucket#: : lobjectparts.py --tenancy <ocid> --region <region> --bucket <bucket>
## Will need the api modules## new: https://oracle-cloud-infrastructure-python-sdk.readthedocs.io/en/latest/## old: https://oracle-bare-metal-cloud-services-python-sdk.readthedocs.io/en/latest/installation.html#install## https://oracle-cloud-infrastructure-python-sdk.readthedocs.io/en/latest/api/object_storage/client/oci.object_storage.ObjectStorageClient.html
from __future__ import print_functionimport os, optparse, sys, time, datetimeimport oci
__version__ = '0.9.1'optdesc = 'This script is used to list multipart uploads in a bucket'
parser = optparse.OptionParser(version='%prog version ' + __version__)parser.formatter.max_help_position = 50parser.add_option('-t', '--tenancy', help='Specify Tenancy ocid', dest='tenancy', action='append')parser.add_option('-r', '--region', help='region', dest='region', action='append')parser.add_option('-b', '--bucket', help='bucket', dest='bucket', action='append')
opts, args = parser.parse_args()
def showMultipartUploads(identity, bucket_name): object_storage = oci.object_storage.ObjectStorageClient(config) namespace_name = object_storage.get_namespace().data uploads = object_storage.list_multipart_uploads(namespace_name, bucket_name, limit = 1000).data print(' {:35} | {:15} | {:30} | {:35} | {:20}'.format('bucket','namespace','object','time_created','upload_id')) for o in uploads: print(' {:35} | {:15} | {:30} | {:35} | {:20}'.format(o.bucket, o.namespace, o.object, str(o.time_created), o.upload_id)) confirm = input("Confirm if you want to abort this multipart upload (Y/N): ") if confirm == "Y": response = object_storage.abort_multipart_upload(o.namespace, o.bucket, o.object, o.upload_id).data else: print ("Chose to not do the abort action on this multipart upload at this time...")
def main(): mandatories = ['tenancy','region','bucket'] for m in mandatories: if not opts.__dict__[m]: print ("mandatory option is missing\n") parser.print_help() exit(-1)
print ('Multipart Uploads') config['region'] = opts.region[0] identity = oci.identity.IdentityClient(config) showMultipartUploads(identity, opts.bucket)
if __name__ == '__main__': config = oci.config.from_file("/root/.oci/config","oci.api") main()