Tags: #python #cli #flags #cdn #purge
#!/usr/bin/env python3
import argparse
import time
import json
from urllib.request import Request, urlopen
def purge_cdn(service_id: str, key: str, fastly_key: str) -> None:
print('[cdn-purger] Purging {}'.format(key))
prurge_url = 'https://api.fastly.com/service/{}/purge/{}'.format(service_id, key)
headers = {
'X-Fastly-Key': fastly_key,
'Fastly-Soft-Purge': '1'
}
with urlopen(Request(prurge_url, method='POST', headers=headers), timeout=5) as response:
resp = json.loads(response.read().decode())
print('[cdn-purger] Purge status: {}, id: {}'.format(resp['status'], resp['id']))
def main():
parser = argparse.ArgumentParser(description='Purge CDN')
parser.add_argument('-d', '--delay', help='delay befor purge request (seconds)', type=int, default=30)
parser.add_argument('-r', '--retry', help='number of retries before giving up', type=int, default=3)
args = parser.parse_args()
time.sleep(args.delay)
service_id = "123"
key = '{}-{}'.format("foo", "stage")
fastly_key = "456"
for i, _ in enumerate(range(args.retry), 1):
try:
purge_cdn(service_id, key, fastly_key)
except Exception as e:
print('[cdn-purger] Purge failed: {}, try: {}/{}'.format(e, i, args.retry))
else:
break
if __name__ == '__main__':
main()