Skip to content

Instantly share code, notes, and snippets.

@ghalevy
Created September 5, 2014 07:01
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 ghalevy/14a7d2f37d4a067748e6 to your computer and use it in GitHub Desktop.
Save ghalevy/14a7d2f37d4a067748e6 to your computer and use it in GitHub Desktop.
cloudflare host management
#!/usr/bin/env python
import os
import sys
import requests
def main(dns_short_name, ip):
url = os.environ['URL']
tkn = os.environ['TKN']
email = os.environ['EMAIL']
zone = os.environ['ZONE']
all_recs, host_recs = build_host_recs(url, tkn, email, zone)
if dns_short_name in host_recs:
rec_id = host_recs[dns_short_name]
delete_result = delete_host_rec(url, tkn, email, zone, rec_id)
if delete_result != 'success':
print "error deleting rec id '{0}'".format(rec_id)
add_host_result = add_host_rec(url, tkn, email, zone, dns_short_name, ip)
if add_host_result != 'success':
print "error adding host entry '{0}'".format(dns_short_name)
def build_host_recs(url, tkn, email, zone):
count, all_recs = rec_load_all(url, tkn, email, zone)
host_recs = {}
for rec in all_recs:
if rec['type'] == "A":
host_recs[rec['display_name']] = rec['rec_id']
return all_recs, host_recs
def json_request(url, method='post', req_data=''):
_json_request = getattr(requests, method)(url, data=req_data)
_json_reply = _json_request.json()
return _json_reply
def add_host_rec(url, tkn, email, zone, dns_short_name, ip):
_req_data = {"a": "rec_new", "tkn": tkn, "email": email, "z": zone, "type": "A",
"name": dns_short_name, "content": ip, "ttl": "1"}
rec_add_reply = json_request(url, req_data=_req_data)
result = rec_add_reply['result']
return result
def delete_host_rec(url, tkn, email, zone, rec_id):
_req_data = {"a": "rec_delete", "tkn": tkn, "email": email, "z": zone, "id": rec_id}
rec_del_reply = json_request(url, req_data=_req_data)
result = rec_del_reply['result']
return result
def rec_load_all(url, tkn, email, zone):
_req_data = {"a": "rec_load_all", "tkn": tkn, "email": email, "z": zone}
rec_load_reply = json_request(url, req_data=_req_data)
return rec_load_reply['response']['recs']['count'], rec_load_reply['response']['recs']['objs']
if __name__ == '__main__':
name = sys.argv[1]
ip = sys.argv[2]
main(name, ip)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment