1#!/usr/bin/env python 2"""Cloudflare API code - example""" 3 4import os 5import sys 6import re 7 8sys.path.insert(0, os.path.abspath('..')) 9import CloudFlare 10 11def main(): 12 """Cloudflare API code - example""" 13 14 # Grab the first argument, if there is one 15 try: 16 zone_name = sys.argv[1] 17 params = {'name':zone_name, 'per_page':1} 18 except IndexError: 19 params = {'per_page':50} 20 21 cf = CloudFlare.CloudFlare() 22 23 # grab the zone identifier 24 try: 25 zones = cf.zones.get(params=params) 26 except CloudFlare.exceptions.CloudFlareAPIError as e: 27 exit('/zones %d %s - api call failed' % (e, e)) 28 except Exception as e: 29 exit('/zones.get - %s - api call failed' % (e)) 30 31 # there should only be one zone 32 for zone in sorted(zones, key=lambda v: v['name']): 33 zone_name = zone['name'] 34 zone_id = zone['id'] 35 zone_type = zone['type'] 36 if 'email' in zone['owner']: 37 zone_owner = zone['owner']['email'] 38 else: 39 zone_owner = '"' + zone['owner']['name'] + '"' 40 zone_plan = zone['plan']['name'] 41 42 print('%s %-35s %-30s %-20s %s' % (zone_id, zone_name, zone_type, zone_owner, zone_plan)) 43 44 try: 45 dns_records = cf.zones.dns_records.get(zone_id) 46 except CloudFlare.exceptions.CloudFlareAPIError as e: 47 sys.stderr.write('/zones/dns_records %d %s - api call failed\n' % (e, e)) 48 continue 49 50 prog = re.compile('\.*'+zone_name+'$') 51 dns_records = sorted(dns_records, key=lambda v: prog.sub('', v['name']) + '_' + v['type']) 52 for dns_record in dns_records: 53 r_name = dns_record['name'] 54 r_type = dns_record['type'] 55 if 'content' in dns_record: 56 r_value = dns_record['content'] 57 else: 58 # should not happen 59 r_value = '' 60 if 'priority' in dns_record: 61 r_priority = dns_record['priority'] 62 else: 63 r_priority = '' 64 r_ttl = dns_record['ttl'] 65 if zone_type == 'secondary': 66 r_id = 'secondary' 67 else: 68 r_id = dns_record['id'] 69 print('\t%s %60s %6d %-5s %4s %s' % (r_id, r_name, r_ttl, r_type, r_priority, r_value)) 70 71 print('') 72 73 exit(0) 74 75if __name__ == '__main__': 76 main() 77 78