import sys, logging, ipaddress, json import CloudFlare def main(TOKEN, NEW_IP): logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG) cf = CloudFlare.CloudFlare(token=TOKEN) zones = cf.zones.get() zone_identifier = [] for zone in zones: if zone['name'] == "firq.dev": zone_identifier = zone if not zone_identifier: raise Exception("No Zone identifier extracted") logging.info(f" Zone Identifier is {zone_identifier['id']}") records = cf.zones.dns_records.get(zone_identifier['id']) update_records = [] if not records: raise Exception(f"Could not extract records from {zone_identifier['name']}") for record in records: if record['type'] == 'AAAA': update_records.append({"id": record['id'], "type": record['type'], "name": record['name'], "content": record['content']}) logging.info(f" Got the following DNS records registered to {zone_identifier['name']}") logging.info(json.dumps(update_records, sort_keys=True, indent=2)) records_done = 0 for record in update_records: data = { "name": record['name'], "type": record['type'], "content": NEW_IP } try: cf.zones.dns_records.patch(zone_identifier['id'], record['id'], data=data) records_done += 1 except Exception as e: logging.error(e) logging.info(f"Finished updating {records_done} records for {zone_identifier['name']}") if __name__ == '__main__': assert len(sys.argv) == 3 assert isinstance(ipaddress.ip_address(sys.argv[2]), ipaddress.IPv6Address), \ f'IP {sys.argv[2]} is not a valid IPv4 address' main(sys.argv[1], sys.argv[2])