117 lines
2.7 KiB
Python
117 lines
2.7 KiB
Python
import os
|
|
import traceback
|
|
from obs import ObsClient, Versions
|
|
|
|
bucketName = os.getenv(
|
|
"BUCKET"
|
|
)
|
|
|
|
ak = os.getenv(
|
|
"AKID"
|
|
)
|
|
|
|
sk = os.getenv(
|
|
"SKID"
|
|
)
|
|
|
|
endpoint = os.getenv(
|
|
"OBSENDPOINT"
|
|
)
|
|
|
|
obsClient = ObsClient(
|
|
access_key_id = ak,
|
|
secret_access_key = sk,
|
|
server = endpoint
|
|
)
|
|
|
|
encoding_type = 'url'
|
|
|
|
try:
|
|
|
|
actualVersions = []
|
|
deleteVersions = []
|
|
|
|
mark = None
|
|
index = 1
|
|
|
|
while True:
|
|
|
|
listing = obsClient.listVersions(
|
|
bucketName,
|
|
version = Versions(
|
|
encoding_type = encoding_type,
|
|
key_marker = mark,
|
|
max_keys = 1000
|
|
)
|
|
)
|
|
|
|
if listing['status'] < 300:
|
|
for dobject in listing['body']['versions']:
|
|
if dobject['versionId'] != None and dobject['isLatest'] != True:
|
|
actualObject = Object(
|
|
key=f'{dobject['key']}',
|
|
versionId=f['versionId']
|
|
)
|
|
actualVersions.append(actualObject)
|
|
|
|
for file_marker in listing['body']['markers']:
|
|
file_key = file_marker['key']
|
|
file_version = file_marker['versionId']
|
|
deleteMarkerObject = Object(
|
|
key=f'{dobject['key']}',
|
|
versionId=f['versionId']
|
|
)
|
|
deleteVersions.append(deleteMarkerObject)
|
|
|
|
# going to next file page
|
|
|
|
if listing['body']['head']['isTruncated'] == True:
|
|
mark = listing['body']['head']['nextKeyMarker']
|
|
else:
|
|
break
|
|
|
|
# now doing the right way
|
|
|
|
print("Deleting actual versions")
|
|
chunks = [
|
|
actualVersions[
|
|
x:x+1000
|
|
] for x in range (0, len(actualVersions), 1000)
|
|
]
|
|
for chunk in chunks:
|
|
deleteBatchObjects = obsClient.deleteObjects(
|
|
bucketName,
|
|
DeleteObjectsRequest(
|
|
quiet = False,
|
|
objects = chunk,
|
|
encoding_type = encoding_type
|
|
))
|
|
|
|
if deleteBatchObjects['status'] > 204:
|
|
print(deleteBatchObjects)
|
|
else:
|
|
pass
|
|
|
|
print("Deleting delete marker versions")
|
|
chunks = [
|
|
deleteVersions[
|
|
x:x+1000
|
|
] for x in range (0, len(deleteVersions), 1000)
|
|
]
|
|
for chunk in chunks:
|
|
deleteBatchObjects = obsClient.deleteObjects(
|
|
bucketName = bucket,
|
|
DeleteObjectsRequest(
|
|
quiet = False,
|
|
objects = chunk,
|
|
encoding_type = encoding_type
|
|
))
|
|
|
|
if deleteBatchObjects['status'] > 204:
|
|
print(deleteBatchObjects)
|
|
else:
|
|
pass
|
|
|
|
except:
|
|
print('exception')
|
|
print(traceback.format_exc()) |