Oci bucket delete fail
wordpress meta
title: 'OCI Bucket Delete Fail'
date: '2019-07-19T07:48:39-05:00'
status: publish
permalink: /oci-bucket-delete-fail
author: admin
excerpt: ''
type: post
id: 1386
category:
- Uncategorized
tag: []
post_format: []
title: 'OCI Bucket Delete Fail'
date: '2019-07-19T07:48:39-05:00'
status: publish
permalink: /oci-bucket-delete-fail
author: admin
excerpt: ''
type: post
id: 1386
category:
- Uncategorized
tag: []
post_format: []
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
#: Script Name : lobjectparts.py
#: 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_function
import os, optparse, sys, time, datetime
import 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 = 50
parser.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()