Skip to content

Instantly share code, notes, and snippets.

Created January 19, 2016 07:08
  • Star 5 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save m3nu/62ffc2d402166f3e0694 to your computer and use it in GitHub Desktop.
Python Cloudflare Dynamic DNS Update script
#!/usr/bin/env python
Update Cloudflare zone entry to current external IP.
Works great with servers on changing IPs or AWS spot instances.
python subdomain
import sys
import json
import requests
ZONE = ''
RECORD = sys.argv[1]
CONTENT = requests.get('').json()['ip']
headers = {'X-Auth-Key': KEY, 'X-Auth-Email': EMAIL, 'Content-type': 'application/json'}
base_url = '{}'
# Get Zone ID
r = requests.get(base_url.format('/zones'), headers=headers)
for res in r.json()['result']:
if res['name'] == ZONE:
ZONE_ID = res['id']
# Get list of Zone DNS records
url_path = '/zones/{}/dns_records'.format(ZONE_ID)
r = requests.get(base_url.format(url_path), headers=headers)
for res in r.json()['result']:
if res['name'] == '{}.{}'.format(RECORD, ZONE):
RECORD_ID = res['id']
# Update or add Zone Record.
JSON_CONTENT = json.dumps({'type': 'A', 'name': RECORD, 'content': CONTENT})
url_path = '/zones/{}/dns_records/{}'.format(ZONE_ID, RECORD_ID)
url = base_url.format(url_path)
requests.put(url, headers=headers data=JSON_CONTENT)
url_path = '/zones/{}/dns_records'.format(ZONE_ID)
url = base_url.format(url_path), headers=headers, data=JSON_CONTENT)
Copy link

Hey this script only adds another A record to my Cloudflare but does not delete or alter the old one, so that I collect a lot of old entries... any idea how to fix that?

Copy link

Here is a similar bash script I just wrote for my company if anyone is interested:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment