Skip to content

Instantly share code, notes, and snippets.

@alistairncoles
Last active March 20, 2018 16:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alistairncoles/722e3e8a6d7107c9fd93c1db7ff7d73c to your computer and use it in GitHub Desktop.
Save alistairncoles/722e3e8a6d7107c9fd93c1db7ff7d73c to your computer and use it in GitHub Desktop.
use internal client to delete object metadata
#!/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