Last active
March 20, 2018 16:00
-
-
Save alistairncoles/722e3e8a6d7107c9fd93c1db7ff7d73c to your computer and use it in GitHub Desktop.
use internal client to delete object metadata
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
import argparse | |
import swift.common.internal_client as internal_client | |
DESCRIPTION = 'Delete object metadata via internal client. Use with extreme ' \ | |
'caution. Must be run on a node with an internal-client.conf ' \ | |
'file and access to the swift proxy server endpoint.' | |
def delete_object_metadata(args): | |
client = internal_client.InternalClient( | |
'/etc/swift/internal-client.conf', 'hack', 1) | |
# since swift 2.15.0 x-backend-replication causes x-delete-at to be ignored | |
# so we can update an expired object | |
metadata = {'x-backend-replication': 'true'} | |
existing = client.get_object_metadata( | |
args.account, args.container, args.object, | |
metadata_prefix='x-object-meta-', headers=metadata) | |
if existing and not args.force: | |
print('Found existing metadata: %s' % existing) | |
print('Aborting (use --force to delete existing metadata).') | |
return 1 | |
client.set_object_metadata( | |
args.account, args.container, args.object, metadata) | |
def main(args=None): | |
parser = argparse.ArgumentParser(description=DESCRIPTION) | |
parser.add_argument('account') | |
parser.add_argument('container') | |
parser.add_argument('object') | |
parser.add_argument( | |
'--force', '-f', action='store_true', default=False, | |
help="Don't ask before deleting existing metadata.") | |
args = parser.parse_args(args) | |
return delete_object_metadata(args) | |
if __name__ == '__main__': | |
exit(main()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment