firq-dev-website/scripts/cloudflare-updater.py

53 lines
1.7 KiB
Python

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])