mirror of
https://github.com/KevinMidboe/cloudflare-ddns.git
synced 2025-10-29 17:40:17 +00:00
Added logger and replaced print statements
This commit is contained in:
@@ -12,6 +12,7 @@ permission: DNS:Edit for one or more zones.
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
import requests
|
import requests
|
||||||
|
from logger import logger
|
||||||
|
|
||||||
API_KEY = ''
|
API_KEY = ''
|
||||||
|
|
||||||
@@ -63,13 +64,13 @@ def getZones():
|
|||||||
data = cloudflareRequest(url)
|
data = cloudflareRequest(url)
|
||||||
|
|
||||||
if data['success'] is False:
|
if data['success'] is False:
|
||||||
print('Request to cloudflare was unsuccessful, error:')
|
logger.info('Request to cloudflare was unsuccessful, error:')
|
||||||
print(data['errors'])
|
logger.info(data['errors'])
|
||||||
raise Exception('Unexpected Cloudflare error! Check logs.')
|
raise Exception('Unexpected Cloudflare error! Check logs.')
|
||||||
|
|
||||||
if data['result'] is None or len(data['result']) < 1:
|
if data['result'] is None or len(data['result']) < 1:
|
||||||
# TODO
|
# TODO
|
||||||
print('no zones!')
|
logger.info('no zones!')
|
||||||
|
|
||||||
zones = list(map(lambda zone: getZoneInfo(zone), data['result']))
|
zones = list(map(lambda zone: getZoneInfo(zone), data['result']))
|
||||||
return zones
|
return zones
|
||||||
@@ -80,13 +81,13 @@ def getRecordsForZone(zoneId):
|
|||||||
data = cloudflareRequest(url)
|
data = cloudflareRequest(url)
|
||||||
|
|
||||||
if data['success'] is False:
|
if data['success'] is False:
|
||||||
print('Request from cloudflare was unsuccessful, error:')
|
logger.info('Request from cloudflare was unsuccessful, error:')
|
||||||
print(data['errors'])
|
logger.info(data['errors'])
|
||||||
raise Exception('Unexpected Cloudflare error! Check logs.')
|
raise Exception('Unexpected Cloudflare error! Check logs.')
|
||||||
|
|
||||||
if data['result'] is None or len(data['result']) < 1:
|
if data['result'] is None or len(data['result']) < 1:
|
||||||
# TODO
|
# TODO
|
||||||
print('no records!')
|
logger.info('no records!')
|
||||||
|
|
||||||
records = list(map(lambda record: getRecordInfo(record), data['result']))
|
records = list(map(lambda record: getRecordInfo(record), data['result']))
|
||||||
return records
|
return records
|
||||||
@@ -100,7 +101,7 @@ def getDDNSAddresszoneId(ddnsZone):
|
|||||||
continue
|
continue
|
||||||
return record
|
return record
|
||||||
|
|
||||||
raise Exception('No ddns record found for zone: {}'.format(DDNS_ZONE))
|
raise Exception('No ddns record found for zone: {}'.format(ddnsZone))
|
||||||
|
|
||||||
|
|
||||||
def updateRecord(zoneId, recordId, name, newIP, ttl, proxied):
|
def updateRecord(zoneId, recordId, name, newIP, ttl, proxied):
|
||||||
@@ -114,7 +115,7 @@ def updateRecord(zoneId, recordId, name, newIP, ttl, proxied):
|
|||||||
}
|
}
|
||||||
|
|
||||||
response = cloudflareUpdateRequest(url, data)
|
response = cloudflareUpdateRequest(url, data)
|
||||||
print('\tRecord updated: {}'.format('✅' if response['success'] is True else '❌'))
|
logger.info('\tRecord updated: {}'.format('✅' if response['success'] is True else '❌'))
|
||||||
|
|
||||||
|
|
||||||
def getMatchingRecordsForZone(zoneId, oldIP):
|
def getMatchingRecordsForZone(zoneId, oldIP):
|
||||||
@@ -123,22 +124,24 @@ def getMatchingRecordsForZone(zoneId, oldIP):
|
|||||||
|
|
||||||
|
|
||||||
def updateZone(zone, oldIP, newIP):
|
def updateZone(zone, oldIP, newIP):
|
||||||
print('Updating records for {}'.format(zone['name']))
|
logger.info('Updating records for {}'.format(zone['name']))
|
||||||
records = getMatchingRecordsForZone(zone['id'], oldIP)
|
records = getMatchingRecordsForZone(zone['id'], oldIP)
|
||||||
if len(records) < 1:
|
if len(records) < 1:
|
||||||
print('No matching records for {}\n'.format(zone['name']))
|
logger.info('No matching records for {}\n'.format(zone['name']))
|
||||||
return
|
return
|
||||||
|
|
||||||
for record in records:
|
for record in records:
|
||||||
print('\tRecord {}: {} -> {}'.format(record['name'], record['content'], newIP))
|
logger.info('\tRecord {}: {} -> {}'.format(record['name'], record['content'], newIP))
|
||||||
updateRecord(zone['id'], record['id'], record['name'], newIP, record['ttl'], record['proxied'])
|
updateRecord(zone['id'], record['id'], record['name'], newIP, record['ttl'], record['proxied'])
|
||||||
|
|
||||||
|
|
||||||
def updateAllZones(oldIP, newIP):
|
def updateAllZones(oldIP, newIP):
|
||||||
zones = getZones()
|
zones = getZones()
|
||||||
|
|
||||||
for zone in zones:
|
for zone in zones:
|
||||||
updateZone(zone, oldIP, newIP)
|
updateZone(zone, oldIP, newIP)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
oldIP = input('Old IP address: ')
|
oldIP = input('Old IP address: ')
|
||||||
newIP = input('New IP address: ')
|
newIP = input('New IP address: ')
|
||||||
|
|||||||
14
logger.py
Normal file
14
logger.py
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import logging
|
||||||
|
import sys
|
||||||
|
|
||||||
|
stdout_handler = logging.StreamHandler(stream=sys.stdout)
|
||||||
|
handlers = [stdout_handler]
|
||||||
|
|
||||||
|
logging.basicConfig(
|
||||||
|
level=logging.DEBUG,
|
||||||
|
format='[%(asctime)s] %(levelname)s\t %(message)s',
|
||||||
|
handlers=handlers
|
||||||
|
)
|
||||||
|
|
||||||
|
logger = logging.getLogger('cloudflare-ddns')
|
||||||
|
|
||||||
13
main.py
13
main.py
@@ -2,6 +2,7 @@ import os
|
|||||||
import requests
|
import requests
|
||||||
from bulk_dns_update import updateAllZones, setAPIKey, getDDNSAddresszoneId
|
from bulk_dns_update import updateAllZones, setAPIKey, getDDNSAddresszoneId
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
from logger import logger
|
||||||
|
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
|
||||||
@@ -11,24 +12,24 @@ DDNS_ZONE = os.getenv('DDNS_ZONE')
|
|||||||
|
|
||||||
def publicAddress():
|
def publicAddress():
|
||||||
global currentIP
|
global currentIP
|
||||||
print('Getting public IP from ifconfg.me...')
|
logger.info('Getting public IP from ifconfg.me...')
|
||||||
|
|
||||||
r = requests.get('https://ifconfig.me')
|
r = requests.get('https://ifconfig.me')
|
||||||
currentIP = r.text
|
currentIP = r.text
|
||||||
print('Public IP: {}'.format(currentIP))
|
logger.info('Public IP: {}'.format(currentIP))
|
||||||
|
|
||||||
|
|
||||||
def cloudflareDDNS():
|
def cloudflareDDNS():
|
||||||
print('Checking IP recorded in Cloudflare...')
|
logger.info('Checking IP recorded in Cloudflare...')
|
||||||
ddnsRecord = getDDNSAddresszoneId(DDNS_ZONE)
|
ddnsRecord = getDDNSAddresszoneId(DDNS_ZONE)
|
||||||
recordedIP = ddnsRecord['content']
|
recordedIP = ddnsRecord['content']
|
||||||
print('Found ddns recorded IP: {}'.format(recordedIP))
|
logger.info('Found ddns recorded IP: {}'.format(recordedIP))
|
||||||
|
|
||||||
if currentIP != recordedIP:
|
if currentIP != recordedIP:
|
||||||
print('Public IP has changed, updating all A records.')
|
logger.info('Public IP has changed, updating all A records.')
|
||||||
updateAllZones(recordedIP, currentIP)
|
updateAllZones(recordedIP, currentIP)
|
||||||
else:
|
else:
|
||||||
print('is same, exiting')
|
logger.info('is same, exiting')
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|||||||
Reference in New Issue
Block a user