Allow multiple domain ddns updates

This commit is contained in:
Thomas Kleinendorst 2024-04-10 19:29:40 +02:00
parent ca501f9b26
commit 47e5cb4062

View file

@ -12,16 +12,13 @@ from ip_helpers import get_public_IP, resolve_name
logging.basicConfig(stream=sys.stdout, level=logging.INFO, format='%(levelname)s - %(message)s') logging.basicConfig(stream=sys.stdout, level=logging.INFO, format='%(levelname)s - %(message)s')
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument('subdomain') parser.add_argument('subdomains', nargs='+')
parser.add_argument('-c', '--config-file', dest='config') parser.add_argument('-c', '--config-file', dest='config')
args = parser.parse_args() args = parser.parse_args()
subdomain = args.subdomain
config_file_path = args.config
fixedTopLevelDomain = 'kleinendorst.info' config_file_path = args.config
fullDomainName = f'{subdomain}.{fixedTopLevelDomain}'
config = configparser.ConfigParser() config = configparser.ConfigParser()
config.read(config_file_path) config.read(config_file_path)
@ -34,17 +31,23 @@ if log_path is not None:
log_path = config['log_changes']['log_path'] log_path = config['log_changes']['log_path']
logging.info(f'Logging DNS name changes to {log_path} on IP updates.') logging.info(f'Logging DNS name changes to {log_path} on IP updates.')
resolvedIP = resolve_name(fullDomainName)
publicIP = get_public_IP() publicIP = get_public_IP()
if resolvedIP == publicIP: subdomains = args.subdomains
logging.info(f'Currently resolved name already matches the public ip ({publicIP}), exiting...') fixedTopLevelDomain = 'kleinendorst.info'
exit(0)
zoneId = cloudflare.get_zone_id(fixedTopLevelDomain) for subdomain in subdomains:
recordId = cloudflare.get_record_id(zoneId, fullDomainName) fullDomainName = f'{subdomain}.{fixedTopLevelDomain}'
cloudflare.change_record(subdomain, zoneId, recordId, publicIP)
with open(log_path, 'a+') as log_file: resolvedIP = resolve_name(fullDomainName)
msg = f'Address for FQDN {fullDomainName} altered from: {resolvedIP} - {publicIP}.' if resolvedIP == publicIP:
logging.info(f'Writing: "{msg}" to log file at {log_path}...') logging.info(f'Currently resolved name already matches the public ip ({publicIP}), exiting...')
log_file.write(msg + '\n') exit(0)
zoneId = cloudflare.get_zone_id(fixedTopLevelDomain)
recordId = cloudflare.get_record_id(zoneId, fullDomainName)
cloudflare.change_record(subdomain, zoneId, recordId, publicIP)
with open(log_path, 'a+') as log_file:
msg = f'Address for FQDN {fullDomainName} altered from: {resolvedIP} - {publicIP}.'
logging.info(f'Writing: "{msg}" to log file at {log_path}...')
log_file.write(msg + '\n')