Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Temp #4040

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open

Temp #4040

Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 25 additions & 1 deletion modules/base/templates/backups/wikitide-backup.py.erb
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,12 @@ from datetime import datetime
token = None

parser = argparse.ArgumentParser(description='Provides backup and download functionality for WikiTide backups from PCA.')
parser.add_argument('action', choices=['backup', 'download', 'find', 'unfreeze'], help='Action to be ran')
parser.add_argument('action', choices=['backup', 'download', 'find', 'delete', 'unfreeze'], help='Action to be ran')
parser.add_argument('type', choices=['private', 'sslkeys', 'phorge', 'sql', 'mediawiki-xml', 'swift-account-container', 'grafana'], help='Type of backup to handle using the action')
parser.add_argument('--date', dest='date', help='Date for backup to download', metavar='YYYY-MM-DD')
parser.add_argument('--database', dest='database', help='Specific database to download or backup')
parser.add_argument('--delete-all', dest='delete_all', required=False, action='store_true', default=False, help='Delete all backups for the "type" selected')
parser.add_argument('--file-name', dest='file_name', help='Specify the file to delete. To be used with "delete" action')
args = parser.parse_args()


Expand Down Expand Up @@ -59,6 +61,8 @@ def pca_web(method: str, url: str, expiry: int):
return requests.post(url, headers=headers, proxies=proxies)
elif method == 'HEAD':
return requests.head(url, headers=headers, proxies=proxies)
elif method == 'DELETE':
return requests.delete(url, headers=headers, proxies=proxies)
else:
raise Exception('Method is not currently implemented in WikiTide-Backup')

Expand Down Expand Up @@ -281,6 +285,24 @@ def find_backups(source: str, database: str):
print(backup_item)


def delete_backups(source: str, database: str, delete_all: bool, file_name: str):
if delete_all:
if file_name:
parser.exit(1, 'Cannot use --delete-all with --file-name.')

all_backups = pca_web('GET', f'https://storage.bhs.cloud.ovh.net/v1/AUTH_76f9bc606a8044e08db7ebd118f6b19a/{source}', 0)
backups_list = list(all_backups.text.split("\n"))
for backup_item in backups_list:
pca_web('DELETE', f'https://storage.bhs.cloud.ovh.net/v1/AUTH_76f9bc606a8044e08db7ebd118f6b19a/{source}/{backup_item}', 0)
print(f'Deleted file {backup_item}')
else:
if not file_name:
parser.exit(1, 'Must specify --file-name with the file you want deleting.')
paladox marked this conversation as resolved.
Show resolved Hide resolved

pca_web('DELETE', f'https://storage.bhs.cloud.ovh.net/v1/AUTH_76f9bc606a8044e08db7ebd118f6b19a/{source}/{file_name}', 0)
print(f'Deleted file {file_name}')


def unfreeze_backup(source: str, dt: str, database: str):
if source in ['private', 'sslkeys', 'phorge', 'swift-account-container']:
file = f'{source}/{dt}.tar.gz'
Expand All @@ -306,6 +328,8 @@ if __name__ == '__main__':
download(args.type, args.date, args.database)
elif args.action == 'find':
find_backups(args.type, args.database)
elif args.action == 'delete':
delete_backups(args.type, args.database, args.delete_all, args.file_name)
elif args.action == 'unfreeze':
if not args.date:
parser.exit(1, '--date is required when unfreezing a file!')
Expand Down
Loading